# fatima0253/garage-platform architecture

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

- Interactive diagram: https://gitdiagram.com/fatima0253/garage-platform
- Repository: https://github.com/fatima0253/garage-platform

## Overview

FixDrive is a Bahrain garage-services platform connecting customers with garages and rental cars, while giving garage owners management tools. Customers browse and inspect garages, check appointment availability, then book service with optional pickup and a rental; they can track bookings and review completed work. Owners register a garage and manage its service offerings and hours. Authentication and role checks protect account workflows; admin routes provide platform oversight. The Worker mounts the domain APIs, which use Prisma over D1. Several route and page implementations were not sampled, so their documented responsibilities are shown without speculative internal call chains.

Main entry points: [`client/src/App.tsx`](https://github.com/fatima0253/garage-platform/blob/main/client/src/App.tsx) (Web app routes), [`server/src/index.ts`](https://github.com/fatima0253/garage-platform/blob/main/server/src/index.ts) (HTTP API), [`client/src/lib/api.ts`](https://github.com/fatima0253/garage-platform/blob/main/client/src/lib/api.ts) (API client), [`server/src/db.ts`](https://github.com/fatima0253/garage-platform/blob/main/server/src/db.ts) (Prisma access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer["Customer experience"]
  node_app["Web app routes<br/>[App.tsx]"]
  node_garage_browse["Garage discovery<br/>[Garages.tsx]"]
  node_garage_detail["Garage details<br/>[GarageDetail.tsx]"]
  node_booking_ui["Service booking<br/>[Booking.tsx]"]
  node_booking_history["Booking tracking<br/>[MyBookings.tsx]"]
  node_booking_detail["Booking detail<br/>[BookingDetail.tsx]"]
  node_pickup_ui["Pickup options<br/>[Pickup.tsx]"]
  node_rental_ui["Rental browsing<br/>[Rentals.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
end

subgraph group_owner["Garage operations"]
  node_registration["Garage onboarding<br/>[RegisterGarage.tsx]"]
  node_owner_dashboard["Owner dashboard<br/>[OwnerDashboard.tsx]"]
  node_admin_ui["Admin console<br/>[Admin.tsx]"]
end

subgraph group_api["Worker API"]
  node_review_api["Customer reviews<br/>[reviews.ts]"]
  node_worker["HTTP API<br/>[index.ts]"]
  node_garage_api["Garage management<br/>[garages.ts]"]
  node_service_api["Service catalog<br/>[services.ts]"]
  node_availability_api["Slot availability<br/>[availability.ts]"]
  node_booking_api["Booking lifecycle<br/>[bookings.ts]"]
  node_car_api["Customer cars<br/>[cars.ts]"]
  node_rental_api["Rental inventory<br/>[rentals.ts]"]
  node_admin_api["Administration<br/>[admin.ts]"]
end

subgraph group_identity["Identity"]
  node_auth_ui["Session client<br/>[auth.ts]"]
  node_auth_guard["Role guards<br/>[RequireAuth.tsx]"]
  node_auth_service["Authentication<br/>[auth.ts]"]
end

subgraph group_data["Persistence and messaging"]
  node_db_layer["Prisma access<br/>[db.ts]"]
  node_d1[("Cloudflare D1")]
  node_notify["Email notifications<br/>[notify.ts]"]
end

node_customer_actor(("Customer"))
node_owner_actor(("Garage owner"))
node_email_service["Email provider"]

node_customer_actor -->|"uses"| node_app
node_owner_actor -->|"uses"| node_app
node_app -->|"routes to"| node_garage_browse
node_app -->|"routes to"| node_garage_detail
node_app -->|"routes to"| node_booking_ui
node_app -->|"routes to"| node_booking_history
node_app -->|"routes to"| node_booking_detail
node_app -->|"routes to"| node_pickup_ui
node_app -->|"routes to"| node_rental_ui
node_app -->|"routes to"| node_registration
node_app -->|"routes to"| node_owner_dashboard
node_app -->|"routes to"| node_admin_ui
node_app -->|"reads session"| node_auth_ui
node_app -->|"protects routes"| node_auth_guard
node_garage_browse -->|"requests garages"| node_api_client
node_garage_detail -->|"requests details"| node_api_client
node_booking_ui -->|"submits booking"| node_api_client
node_booking_history -->|"loads bookings"| node_api_client
node_booking_detail -->|"loads booking"| node_api_client
node_pickup_ui -->|"loads options"| node_api_client
node_rental_ui -->|"loads rentals"| node_api_client
node_registration -->|"creates garage"| node_api_client
node_owner_dashboard -->|"manages garage"| node_api_client
node_admin_ui -->|"requests admin"| node_api_client
node_api_client -->|"HTTP requests"| node_worker
node_auth_ui -->|"authenticates"| node_auth_service
node_auth_guard -->|"checks session"| node_auth_ui
node_worker -->|"handles auth"| node_auth_service
node_worker -->|"dispatches"| node_garage_api
node_worker -->|"dispatches"| node_service_api
node_worker -->|"dispatches"| node_availability_api
node_worker -->|"dispatches"| node_booking_api
node_worker -->|"dispatches"| node_car_api
node_worker -->|"dispatches"| node_rental_api
node_worker -->|"dispatches"| node_review_api
node_worker -->|"dispatches"| node_admin_api
node_garage_api -->|"queries"| node_db_layer
node_service_api -->|"queries"| node_db_layer
node_availability_api -->|"queries"| node_db_layer
node_booking_api -->|"reads and writes"| node_db_layer
node_car_api -->|"reads and writes"| node_db_layer
node_rental_api -->|"queries"| node_db_layer
node_review_api -->|"reads and writes"| node_db_layer
node_admin_api -->|"reads and writes"| node_db_layer
node_db_layer -->|"persists data"| node_d1
node_booking_api -.->|"may notify"| node_notify
node_notify -.->|"sends email"| node_email_service

click node_app "https://github.com/fatima0253/garage-platform/blob/main/client/src/App.tsx"
click node_garage_browse "https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/Garages.tsx"
click node_garage_detail "https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/GarageDetail.tsx"
click node_booking_ui "https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/Booking.tsx"
click node_booking_history "https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/MyBookings.tsx"
click node_booking_detail "https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/BookingDetail.tsx"
click node_pickup_ui "https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/Pickup.tsx"
click node_rental_ui "https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/Rentals.tsx"
click node_review_api "https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/reviews.ts"
click node_registration "https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/RegisterGarage.tsx"
click node_owner_dashboard "https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/OwnerDashboard.tsx"
click node_api_client "https://github.com/fatima0253/garage-platform/blob/main/client/src/lib/api.ts"
click node_worker "https://github.com/fatima0253/garage-platform/blob/main/server/src/index.ts"
click node_auth_ui "https://github.com/fatima0253/garage-platform/blob/main/client/src/auth.ts"
click node_auth_guard "https://github.com/fatima0253/garage-platform/blob/main/client/src/components/RequireAuth.tsx"
click node_auth_service "https://github.com/fatima0253/garage-platform/blob/main/server/src/auth.ts"
click node_garage_api "https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/garages.ts"
click node_service_api "https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/services.ts"
click node_availability_api "https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/availability.ts"
click node_booking_api "https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/bookings.ts"
click node_car_api "https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/cars.ts"
click node_rental_api "https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/rentals.ts"
click node_admin_api "https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/admin.ts"
click node_admin_ui "https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/Admin.tsx"
click node_db_layer "https://github.com/fatima0253/garage-platform/blob/main/server/src/db.ts"
click node_notify "https://github.com/fatima0253/garage-platform/blob/main/server/src/lib/notify.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_garage_browse,node_garage_detail,node_booking_ui,node_booking_history,node_booking_detail,node_pickup_ui,node_rental_ui,node_api_client toneBlue
class node_registration,node_owner_dashboard,node_admin_ui toneAmber
class node_review_api,node_worker,node_garage_api,node_service_api,node_availability_api,node_booking_api,node_car_api,node_rental_api,node_admin_api toneMint
class node_auth_ui,node_auth_guard,node_auth_service toneRose
class node_db_layer,node_d1,node_notify,node_customer_actor,node_owner_actor,node_email_service toneIndigo
```

## Components

### Customer experience

- [Web app routes](https://github.com/fatima0253/garage-platform/blob/main/client/src/App.tsx): `client/src/App.tsx`
- [Garage discovery](https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/Garages.tsx): `client/src/pages/Garages.tsx`
- [Garage details](https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/GarageDetail.tsx): `client/src/pages/GarageDetail.tsx`
- [Service booking](https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/Booking.tsx): `client/src/pages/Booking.tsx`
- [Booking tracking](https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/MyBookings.tsx): `client/src/pages/MyBookings.tsx`
- [Booking detail](https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/BookingDetail.tsx): `client/src/pages/BookingDetail.tsx`
- [Pickup options](https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/Pickup.tsx): `client/src/pages/Pickup.tsx`
- [Rental browsing](https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/Rentals.tsx): `client/src/pages/Rentals.tsx`
- [API client](https://github.com/fatima0253/garage-platform/blob/main/client/src/lib/api.ts): `client/src/lib/api.ts`

### Garage operations

- [Garage onboarding](https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/RegisterGarage.tsx): `client/src/pages/RegisterGarage.tsx`
- [Owner dashboard](https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/OwnerDashboard.tsx): `client/src/pages/OwnerDashboard.tsx`
- [Admin console](https://github.com/fatima0253/garage-platform/blob/main/client/src/pages/Admin.tsx): `client/src/pages/Admin.tsx`

### Worker API

- [Customer reviews](https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/reviews.ts): `server/src/routes/reviews.ts`
- [HTTP API](https://github.com/fatima0253/garage-platform/blob/main/server/src/index.ts): `server/src/index.ts`
- [Garage management](https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/garages.ts): `server/src/routes/garages.ts`
- [Service catalog](https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/services.ts): `server/src/routes/services.ts`
- [Slot availability](https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/availability.ts): `server/src/routes/availability.ts`
- [Booking lifecycle](https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/bookings.ts): `server/src/routes/bookings.ts`
- [Customer cars](https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/cars.ts): `server/src/routes/cars.ts`
- [Rental inventory](https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/rentals.ts): `server/src/routes/rentals.ts`
- [Administration](https://github.com/fatima0253/garage-platform/blob/main/server/src/routes/admin.ts): `server/src/routes/admin.ts`

### Identity

- [Session client](https://github.com/fatima0253/garage-platform/blob/main/client/src/auth.ts): `client/src/auth.ts`
- [Role guards](https://github.com/fatima0253/garage-platform/blob/main/client/src/components/RequireAuth.tsx): `client/src/components/RequireAuth.tsx`
- [Authentication](https://github.com/fatima0253/garage-platform/blob/main/server/src/auth.ts): `server/src/auth.ts`

### Persistence and messaging

- [Prisma access](https://github.com/fatima0253/garage-platform/blob/main/server/src/db.ts): `server/src/db.ts`
- **Cloudflare D1**
- [Email notifications](https://github.com/fatima0253/garage-platform/blob/main/server/src/lib/notify.ts): `server/src/lib/notify.ts`

### Other components

- **Customer**
- **Garage owner**
- **Email provider**

## Connections

- Customer → Web app routes: uses
- Garage owner → Web app routes: uses
- Web app routes → Garage discovery: routes to
- Web app routes → Garage details: routes to
- Web app routes → Service booking: routes to
- Web app routes → Booking tracking: routes to
- Web app routes → Booking detail: routes to
- Web app routes → Pickup options: routes to
- Web app routes → Rental browsing: routes to
- Web app routes → Garage onboarding: routes to
- Web app routes → Owner dashboard: routes to
- Web app routes → Admin console: routes to
- Web app routes → Session client: reads session
- Web app routes → Role guards: protects routes
- Garage discovery → API client: requests garages
- Garage details → API client: requests details
- Service booking → API client: submits booking
- Booking tracking → API client: loads bookings
- Booking detail → API client: loads booking
- Pickup options → API client: loads options
- Rental browsing → API client: loads rentals
- Garage onboarding → API client: creates garage
- Owner dashboard → API client: manages garage
- Admin console → API client: requests admin
- API client → HTTP API: HTTP requests
- Session client → Authentication: authenticates
- Role guards → Session client: checks session
- HTTP API → Authentication: handles auth
- HTTP API → Garage management: dispatches
- HTTP API → Service catalog: dispatches
- HTTP API → Slot availability: dispatches
- HTTP API → Booking lifecycle: dispatches
- HTTP API → Customer cars: dispatches
- HTTP API → Rental inventory: dispatches
- HTTP API → Customer reviews: dispatches
- HTTP API → Administration: dispatches
- Garage management → Prisma access: queries
- Service catalog → Prisma access: queries
- Slot availability → Prisma access: queries
- Booking lifecycle → Prisma access: reads and writes
- Customer cars → Prisma access: reads and writes
- Rental inventory → Prisma access: queries
- Customer reviews → Prisma access: reads and writes
- Administration → Prisma access: reads and writes
- Prisma access → Cloudflare D1: persists data
- Booking lifecycle → Email notifications: may notify
- Email notifications → Email provider: sends email
