# bisonrides/comp4350project architecture

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

- Interactive diagram: https://gitdiagram.com/bisonrides/comp4350project
- Repository: https://github.com/bisonrides/comp4350project

## Overview

BisonRides is a student ride-sharing web application. Students sign up and verify a University of Manitoba email, then drivers can post rides and riders can browse rides and submit requests; drivers manage requests and users see request updates. The frontend routes pages, stores login state, and calls a FastAPI backend whose routers use database models and schemas. The README also describes recommendations, price negotiation/splitting, and multiple campuses, but sampled implementation evidence does not establish those flows; they are shown as documented, unverified capabilities.

Main entry points: [`Frontend/src/App.tsx`](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/App.tsx) (Page routing), [`backend/models.py`](https://github.com/bisonrides/comp4350project/blob/main/backend/models.py) (Domain models), [`backend/schemas.py`](https://github.com/bisonrides/comp4350project/blob/main/backend/schemas.py) (API schemas), [`backend/database.py`](https://github.com/bisonrides/comp4350project/blob/main/backend/database.py) (PostgreSQL data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Student web app"]
  node_app["Page routing<br/>[App.tsx]"]
  node_home["Ride discovery<br/>[HomePage.tsx]"]
  node_dashboard["Ride dashboard<br/>[DashboardPage.tsx]"]
  node_postride["Post ride<br/>[PostRidePage.tsx]"]
  node_map["Map view<br/>[MapPage.tsx]"]
  node_profile["Student profile<br/>[ProfilePage.tsx]"]
  node_rideclient["Ride API client<br/>[rides.ts]"]
  node_geocode["Location lookup<br/>[geocode.ts]"]
end

subgraph group_identity["Accounts and verification"]
  node_authpages["Sign-in and signup<br/>[LoginPage.tsx]"]
  node_verifyui["Email verification<br/>[VerifyPage.tsx]"]
  node_session[("Browser session<br/>[auth.ts]")]
end

subgraph group_rides["Ride coordination"]
  node_recommend["Recommended rides"]
  node_pricing["Price negotiation"]
  node_campuses["Multiple campuses"]
end

subgraph group_backend["API and persistence"]
  node_authapi["Authentication API<br/>[auth.py]"]
  node_userapi["User API<br/>[users.py]"]
  node_rideapi["Rides API<br/>[rides.py]"]
  node_requestapi["Ride requests<br/>[ride_requests.py]"]
  node_updatesapi["Request updates<br/>[updates.py]"]
  node_models["Domain models<br/>[models.py]"]
  node_schemas["API schemas<br/>[schemas.py]"]
  node_db[("PostgreSQL data<br/>[database.py]")]
end

node_student(("Student"))

node_student -->|"uses"| node_app
node_app -->|"routes to"| node_home
node_app -->|"routes to"| node_authpages
node_app -->|"routes to"| node_verifyui
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_postride
node_app -->|"routes to"| node_map
node_app -->|"routes to"| node_profile
node_authpages -->|"saves session"| node_session
node_verifyui -->|"verifies token"| node_authapi
node_postride -->|"looks up location"| node_geocode
node_postride -->|"posts ride"| node_rideclient
node_dashboard -->|"loads rides"| node_rideclient
node_rideclient -->|"calls API"| node_rideapi
node_authapi -->|"queries users"| node_db
node_authapi -->|"reads user"| node_models
node_authapi -->|"validates payloads"| node_schemas
node_userapi -->|"uses sessions"| node_db
node_userapi -->|"uses records"| node_models
node_userapi -->|"uses schemas"| node_schemas
node_rideapi -->|"uses sessions"| node_db
node_rideapi -->|"reads rides"| node_models
node_rideapi -->|"uses schemas"| node_schemas
node_requestapi -->|"uses sessions"| node_db
node_requestapi -->|"updates requests"| node_models
node_requestapi -->|"uses schemas"| node_schemas
node_updatesapi -->|"uses sessions"| node_db
node_updatesapi -->|"reads updates"| node_models
node_updatesapi -->|"uses schemas"| node_schemas
node_recommend -.->|"documented capability"| node_student
node_pricing -.->|"documented capability"| node_student
node_campuses -.->|"documented capability"| node_student

click node_app "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/App.tsx"
click node_home "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/HomePage.tsx"
click node_dashboard "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/DashboardPage.tsx"
click node_postride "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/PostRidePage.tsx"
click node_map "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/MapPage.tsx"
click node_profile "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/ProfilePage.tsx"
click node_rideclient "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/lib/rides.ts"
click node_geocode "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/lib/geocode.ts"
click node_authpages "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/LoginPage.tsx"
click node_verifyui "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/VerifyPage.tsx"
click node_session "https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/lib/auth.ts"
click node_authapi "https://github.com/bisonrides/comp4350project/blob/main/backend/routers/auth.py"
click node_userapi "https://github.com/bisonrides/comp4350project/blob/main/backend/routers/users.py"
click node_rideapi "https://github.com/bisonrides/comp4350project/blob/main/backend/routers/rides.py"
click node_requestapi "https://github.com/bisonrides/comp4350project/blob/main/backend/routers/ride_requests.py"
click node_updatesapi "https://github.com/bisonrides/comp4350project/blob/main/backend/routers/updates.py"
click node_models "https://github.com/bisonrides/comp4350project/blob/main/backend/models.py"
click node_schemas "https://github.com/bisonrides/comp4350project/blob/main/backend/schemas.py"
click node_db "https://github.com/bisonrides/comp4350project/blob/main/backend/database.py"

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_home,node_dashboard,node_postride,node_map,node_profile,node_rideclient,node_geocode toneBlue
class node_authpages,node_verifyui,node_session toneAmber
class node_recommend,node_pricing,node_campuses toneMint
class node_authapi,node_userapi,node_rideapi,node_requestapi,node_updatesapi,node_models,node_schemas,node_db toneRose
class node_student toneIndigo
```

## Components

### Student web app

- [Page routing](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/App.tsx): `Frontend/src/App.tsx`
- [Ride discovery](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/HomePage.tsx): `Frontend/src/pages/HomePage.tsx`
- [Ride dashboard](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/DashboardPage.tsx): `Frontend/src/pages/DashboardPage.tsx`
- [Post ride](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/PostRidePage.tsx): `Frontend/src/pages/PostRidePage.tsx`
- [Map view](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/MapPage.tsx): `Frontend/src/pages/MapPage.tsx`
- [Student profile](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/ProfilePage.tsx): `Frontend/src/pages/ProfilePage.tsx`
- [Ride API client](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/lib/rides.ts): `Frontend/src/lib/rides.ts`
- [Location lookup](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/lib/geocode.ts): `Frontend/src/lib/geocode.ts`

### Accounts and verification

- [Sign-in and signup](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/LoginPage.tsx): `Frontend/src/pages/LoginPage.tsx`
- [Email verification](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/pages/VerifyPage.tsx): `Frontend/src/pages/VerifyPage.tsx`
- [Browser session](https://github.com/bisonrides/comp4350project/blob/main/Frontend/src/lib/auth.ts): `Frontend/src/lib/auth.ts`

### Ride coordination

- **Recommended rides**
- **Price negotiation**
- **Multiple campuses**

### API and persistence

- [Authentication API](https://github.com/bisonrides/comp4350project/blob/main/backend/routers/auth.py): `backend/routers/auth.py`
- [User API](https://github.com/bisonrides/comp4350project/blob/main/backend/routers/users.py): `backend/routers/users.py`
- [Rides API](https://github.com/bisonrides/comp4350project/blob/main/backend/routers/rides.py): `backend/routers/rides.py`
- [Ride requests](https://github.com/bisonrides/comp4350project/blob/main/backend/routers/ride_requests.py): `backend/routers/ride_requests.py`
- [Request updates](https://github.com/bisonrides/comp4350project/blob/main/backend/routers/updates.py): `backend/routers/updates.py`
- [Domain models](https://github.com/bisonrides/comp4350project/blob/main/backend/models.py): `backend/models.py`
- [API schemas](https://github.com/bisonrides/comp4350project/blob/main/backend/schemas.py): `backend/schemas.py`
- [PostgreSQL data](https://github.com/bisonrides/comp4350project/blob/main/backend/database.py): `backend/database.py`

### Other components

- **Student**

## Connections

- Student → Page routing: uses (evidence: `Frontend/src/App.tsx`)
- Page routing → Ride discovery: routes to (evidence: `Frontend/src/App.tsx`)
- Page routing → Sign-in and signup: routes to (evidence: `Frontend/src/App.tsx`)
- Page routing → Email verification: routes to (evidence: `Frontend/src/App.tsx`)
- Page routing → Ride dashboard: routes to (evidence: `Frontend/src/App.tsx`)
- Page routing → Post ride: routes to (evidence: `Frontend/src/App.tsx`)
- Page routing → Map view: routes to (evidence: `Frontend/src/App.tsx`)
- Page routing → Student profile: routes to (evidence: `Frontend/src/App.tsx`)
- Sign-in and signup → Browser session: saves session (evidence: `Frontend/src/pages/LoginPage.tsx`)
- Email verification → Authentication API: verifies token (evidence: `backend/routers/auth.py`)
- Post ride → Location lookup: looks up location (evidence: `Frontend/src/pages/PostRidePage.tsx`)
- Post ride → Ride API client: posts ride (evidence: `Frontend/src/pages/PostRidePage.tsx`)
- Ride dashboard → Ride API client: loads rides
- Ride API client → Rides API: calls API (evidence: `Frontend/src/lib/rides.ts`)
- Authentication API → PostgreSQL data: queries users (evidence: `backend/routers/auth.py`)
- Authentication API → Domain models: reads user (evidence: `backend/routers/auth.py`)
- Authentication API → API schemas: validates payloads (evidence: `backend/routers/auth.py`)
- User API → PostgreSQL data: uses sessions (evidence: `backend/routers/users.py`)
- User API → Domain models: uses records (evidence: `backend/routers/users.py`)
- User API → API schemas: uses schemas (evidence: `backend/routers/users.py`)
- Rides API → PostgreSQL data: uses sessions (evidence: `backend/routers/rides.py`)
- Rides API → Domain models: reads rides (evidence: `backend/routers/rides.py`)
- Rides API → API schemas: uses schemas (evidence: `backend/routers/rides.py`)
- Ride requests → PostgreSQL data: uses sessions (evidence: `backend/routers/ride_requests.py`)
- Ride requests → Domain models: updates requests (evidence: `backend/routers/ride_requests.py`)
- Ride requests → API schemas: uses schemas (evidence: `backend/routers/ride_requests.py`)
- Request updates → PostgreSQL data: uses sessions (evidence: `backend/routers/updates.py`)
- Request updates → Domain models: reads updates (evidence: `backend/routers/updates.py`)
- Request updates → API schemas: uses schemas (evidence: `backend/routers/updates.py`)
- Recommended rides → Student: documented capability
- Price negotiation → Student: documented capability
- Multiple campuses → Student: documented capability
