# ibahars/tosfed-bys architecture

> Architecture diagram of the GitHub repository ibahars/tosfed-bys, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ibahars/tosfed-bys
- Repository: https://github.com/ibahars/tosfed-bys

## Overview

TOSFED-bys is a marshal and race-operations application with a React UI and Express API. Marshals authenticate, maintain profiles, browse eligible races, and apply; administrators manage marshals and races, review applications, make assignments, and export records. The API persists domain data and queues race announcements and finalized-application notifications for workers. The README gives no further product description, and several domain services, routes, and workers were not sampled, so those links are limited to the structure and evidence available.

Main entry points: [`API/src/index.ts`](https://github.com/ibahars/tosfed-bys/blob/main/API/src/index.ts) (Express entry), [`API/src/config/prisma.ts`](https://github.com/ibahars/tosfed-bys/blob/main/API/src/config/prisma.ts) (Prisma client), [`UI/src/api/client.ts`](https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/client.ts) (HTTP client), [`API/src/workers/raceAnnouncement.worker.ts`](https://github.com/ibahars/tosfed-bys/blob/main/API/src/workers/raceAnnouncement.worker.ts) (Announcement worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Web application"]
  node_app["Routes and pages<br/>[App.tsx]"]
  node_authcontext["Session context<br/>[AuthContext.tsx]"]
  node_apiclient["HTTP client<br/>[client.ts]"]
  node_ui_auth["Auth API<br/>[auth.ts]"]
  node_ui_profile["Profile API<br/>[profile.ts]"]
  node_ui_races["Races API<br/>[races.ts]"]
  node_ui_marshals["Marshals API<br/>[marshals.ts]"]
end

subgraph group_api["API and access"]
  node_entry["Express entry<br/>[index.ts]"]
  node_auth["Authentication"]
  node_prisma["Prisma client<br/>[prisma.ts]"]
end

subgraph group_race["Race operations"]
  node_races["Race management<br/>[races.service.ts]"]
  node_applications["Applications and assignment"]
  node_csv["CSV export<br/>[csv.ts]"]
end

subgraph group_people["Marshal management"]
  node_profile["Marshal profile"]
  node_marshals["Marshal administration"]
end

subgraph group_async["Background notifications"]
  node_racequeue["Race announcement queue"]
  node_applicationqueue["Finalization queue"]
  node_announcementworker["Announcement worker"]
  node_applicationworker["Application worker"]
end

node_marshal(("Marshal"))
node_admin(("Administrator"))
node_database[("Application database")]
node_redis[("Redis")]
node_email(("Email service"))

node_marshal -->|"uses"| node_app
node_admin -->|"uses"| node_app
node_app -->|"provides session"| node_authcontext
node_authcontext -->|"requests auth"| node_ui_auth
node_ui_auth -->|"sends requests"| node_apiclient
node_ui_profile -->|"sends requests"| node_apiclient
node_ui_races -->|"sends requests"| node_apiclient
node_ui_marshals -->|"sends requests"| node_apiclient
node_apiclient -->|"calls API"| node_entry
node_entry -->|"mounts routes"| node_auth
node_entry -->|"mounts routes"| node_profile
node_entry -->|"mounts routes"| node_marshals
node_entry -->|"mounts routes"| node_races
node_auth -->|"reads and writes"| node_prisma
node_profile -->|"reads and writes"| node_prisma
node_marshals -->|"reads and writes"| node_prisma
node_races -->|"reads and writes"| node_prisma
node_applications -->|"reads and writes"| node_prisma
node_prisma -->|"queries"| node_database
node_applications -->|"builds export"| node_csv
node_applications -->|"queues finalization"| node_applicationqueue
node_applicationqueue -->|"uses"| node_redis
node_entry -->|"starts worker"| node_announcementworker
node_entry -->|"starts worker"| node_applicationworker
node_announcementworker -->|"consumes jobs"| node_redis
node_applicationworker -->|"consumes jobs"| node_redis
node_announcementworker -->|"loads race data"| node_prisma
node_announcementworker -->|"sends notices"| node_email

click node_app "https://github.com/ibahars/tosfed-bys/blob/main/UI/src/App.tsx"
click node_authcontext "https://github.com/ibahars/tosfed-bys/blob/main/UI/src/context/AuthContext.tsx"
click node_apiclient "https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/client.ts"
click node_ui_auth "https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/auth.ts"
click node_ui_profile "https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/profile.ts"
click node_ui_races "https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/races.ts"
click node_ui_marshals "https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/marshals.ts"
click node_entry "https://github.com/ibahars/tosfed-bys/blob/main/API/src/index.ts"
click node_auth "https://github.com/ibahars/tosfed-bys/tree/main/API/src/modules/auth"
click node_profile "https://github.com/ibahars/tosfed-bys/tree/main/API/src/modules/profile"
click node_marshals "https://github.com/ibahars/tosfed-bys/tree/main/API/src/modules/admin"
click node_races "https://github.com/ibahars/tosfed-bys/blob/main/API/src/modules/races/races.service.ts"
click node_applications "https://github.com/ibahars/tosfed-bys/blob/main/API/src/modules/races/applications.service.ts"
click node_csv "https://github.com/ibahars/tosfed-bys/blob/main/API/src/utils/csv.ts"
click node_prisma "https://github.com/ibahars/tosfed-bys/blob/main/API/src/config/prisma.ts"
click node_racequeue "https://github.com/ibahars/tosfed-bys/blob/main/API/src/queues/raceAnnouncement.queue.ts"
click node_applicationqueue "https://github.com/ibahars/tosfed-bys/blob/main/API/src/queues/raceApplication.queue.ts"
click node_announcementworker "https://github.com/ibahars/tosfed-bys/blob/main/API/src/workers/raceAnnouncement.worker.ts"
click node_applicationworker "https://github.com/ibahars/tosfed-bys/blob/main/API/src/workers/raceApplication.worker.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_authcontext,node_apiclient,node_ui_auth,node_ui_profile,node_ui_races,node_ui_marshals toneBlue
class node_entry,node_auth,node_prisma,node_database,node_redis toneAmber
class node_races,node_applications,node_csv toneMint
class node_profile,node_marshals toneRose
class node_racequeue,node_applicationqueue,node_announcementworker,node_applicationworker,node_marshal,node_admin,node_email toneIndigo
```

## Components

### Web application

- [Routes and pages](https://github.com/ibahars/tosfed-bys/blob/main/UI/src/App.tsx): `UI/src/App.tsx`
- [Session context](https://github.com/ibahars/tosfed-bys/blob/main/UI/src/context/AuthContext.tsx): `UI/src/context/AuthContext.tsx`
- [HTTP client](https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/client.ts): `UI/src/api/client.ts`
- [Auth API](https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/auth.ts): `UI/src/api/auth.ts`
- [Profile API](https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/profile.ts): `UI/src/api/profile.ts`
- [Races API](https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/races.ts): `UI/src/api/races.ts`
- [Marshals API](https://github.com/ibahars/tosfed-bys/blob/main/UI/src/api/marshals.ts): `UI/src/api/marshals.ts`

### API and access

- [Express entry](https://github.com/ibahars/tosfed-bys/blob/main/API/src/index.ts): `API/src/index.ts`
- [Authentication](https://github.com/ibahars/tosfed-bys/tree/main/API/src/modules/auth): `API/src/modules/auth`
- [Prisma client](https://github.com/ibahars/tosfed-bys/blob/main/API/src/config/prisma.ts): `API/src/config/prisma.ts`

### Race operations

- [Race management](https://github.com/ibahars/tosfed-bys/blob/main/API/src/modules/races/races.service.ts): `API/src/modules/races/races.service.ts`
- [Applications and assignment](https://github.com/ibahars/tosfed-bys/blob/main/API/src/modules/races/applications.service.ts): `API/src/modules/races/applications.service.ts`
- [CSV export](https://github.com/ibahars/tosfed-bys/blob/main/API/src/utils/csv.ts): `API/src/utils/csv.ts`

### Marshal management

- [Marshal profile](https://github.com/ibahars/tosfed-bys/tree/main/API/src/modules/profile): `API/src/modules/profile`
- [Marshal administration](https://github.com/ibahars/tosfed-bys/tree/main/API/src/modules/admin): `API/src/modules/admin`

### Background notifications

- [Race announcement queue](https://github.com/ibahars/tosfed-bys/blob/main/API/src/queues/raceAnnouncement.queue.ts): `API/src/queues/raceAnnouncement.queue.ts`
- [Finalization queue](https://github.com/ibahars/tosfed-bys/blob/main/API/src/queues/raceApplication.queue.ts): `API/src/queues/raceApplication.queue.ts`
- [Announcement worker](https://github.com/ibahars/tosfed-bys/blob/main/API/src/workers/raceAnnouncement.worker.ts): `API/src/workers/raceAnnouncement.worker.ts`
- [Application worker](https://github.com/ibahars/tosfed-bys/blob/main/API/src/workers/raceApplication.worker.ts): `API/src/workers/raceApplication.worker.ts`

### Other components

- **Marshal**
- **Administrator**
- **Application database**
- **Redis**
- **Email service**

## Connections

- Marshal → Routes and pages: uses
- Administrator → Routes and pages: uses
- Routes and pages → Session context: provides session
- Session context → Auth API: requests auth
- Auth API → HTTP client: sends requests
- Profile API → HTTP client: sends requests
- Races API → HTTP client: sends requests
- Marshals API → HTTP client: sends requests
- HTTP client → Express entry: calls API
- Express entry → Authentication: mounts routes
- Express entry → Marshal profile: mounts routes
- Express entry → Marshal administration: mounts routes
- Express entry → Race management: mounts routes
- Authentication → Prisma client: reads and writes
- Marshal profile → Prisma client: reads and writes
- Marshal administration → Prisma client: reads and writes
- Race management → Prisma client: reads and writes
- Applications and assignment → Prisma client: reads and writes
- Prisma client → Application database: queries
- Applications and assignment → CSV export: builds export
- Applications and assignment → Finalization queue: queues finalization
- Finalization queue → Redis: uses
- Express entry → Announcement worker: starts worker
- Express entry → Application worker: starts worker
- Announcement worker → Redis: consumes jobs
- Application worker → Redis: consumes jobs
- Announcement worker → Prisma client: loads race data
- Announcement worker → Email service: sends notices
