# priyayids/bookspace architecture

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

- Interactive diagram: https://gitdiagram.com/priyayids/bookspace
- Repository: https://github.com/priyayids/bookspace

## Overview

BookSpace supports public room discovery and reservation, live occupancy viewing, and administrator workflows for approvals, room management, settings, and usage oversight. The frontend pages use a typed REST client; an Express server routes requests to domain handlers, which use Prisma for persistence. Backend excerpts show booking validation and conflict checks. Other route behavior and several UI details are described by the README and SOURCE INDEX; links based only on those documented relationships cite the README.

Main entry points: [`backend/src/index.ts`](https://github.com/priyayids/bookspace/blob/main/backend/src/index.ts) (HTTP server), [`frontend/src/App.tsx`](https://github.com/priyayids/bookspace/blob/main/frontend/src/App.tsx) (Page navigation), [`frontend/src/lib/api/client.ts`](https://github.com/priyayids/bookspace/blob/main/frontend/src/lib/api/client.ts) (Typed API client), [`backend/src/prisma/client.ts`](https://github.com/priyayids/bookspace/blob/main/backend/src/prisma/client.ts) (Prisma client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Frontend experiences"]
  node_reservation["Reservations"]
  node_occupancy["Occupancy display<br/>[OccupancyPage.tsx]"]
  node_adminui["Admin console<br/>[AdminPage.tsx]"]
  node_timeline["Room timeline<br/>[RoomTimeline.tsx]"]
  node_navigation["Page navigation<br/>[App.tsx]"]
end

subgraph group_client["API and transport"]
  node_api["Typed API client<br/>[client.ts]"]
end

subgraph group_services["Backend services"]
  node_server["HTTP server<br/>[index.ts]"]
  node_auth["Admin authentication<br/>[auth.ts]"]
  node_authmw["JWT middleware<br/>[auth.ts]"]
  node_booking["Booking lifecycle<br/>[bookings.ts]"]
  node_validation["Time validation<br/>[validation.ts]"]
  node_rooms["Room management<br/>[rooms.ts]"]
  node_dashboard["Usage dashboard<br/>[dashboard.ts]"]
  node_settings["Booking settings<br/>[settings.ts]"]
end

subgraph group_data["Persistence"]
  node_prisma["Prisma client<br/>[client.ts]"]
  node_schema["Booking data model<br/>[schema.prisma]"]
end

node_visitor(("Room user"))
node_administrator(("Administrator"))
node_postgres[("PostgreSQL")]

node_visitor -->|"opens app"| node_navigation
node_administrator -->|"opens app"| node_navigation
node_navigation -->|"routes to"| node_reservation
node_navigation -->|"routes to"| node_occupancy
node_navigation -->|"routes to"| node_adminui
node_reservation -->|"requests data"| node_api
node_adminui -->|"requests admin data"| node_api
node_occupancy -->|"requests status"| node_api
node_reservation -->|"renders"| node_timeline
node_occupancy -->|"renders"| node_timeline
node_timeline -->|"fetches availability"| node_api
node_api -->|"sends REST requests"| node_server
node_server -->|"mounts auth routes"| node_auth
node_server -->|"mounts booking routes"| node_booking
node_server -->|"mounts room routes"| node_rooms
node_server -->|"mounts settings routes"| node_settings
node_server -->|"mounts protected routes"| node_dashboard
node_server -->|"protects dashboard"| node_authmw
node_booking -->|"checks overlaps"| node_validation
node_booking -->|"reads and writes"| node_prisma
node_rooms -->|"reads and writes"| node_prisma
node_settings -->|"reads and writes"| node_prisma
node_dashboard -->|"queries metrics"| node_prisma
node_prisma -->|"uses data models"| node_schema
node_schema -->|"persists records"| node_postgres
node_auth -->|"issues login token"| node_administrator

click node_reservation "https://github.com/priyayids/bookspace/blob/main/frontend/src/pages/ReservationPage.tsx"
click node_occupancy "https://github.com/priyayids/bookspace/blob/main/frontend/src/pages/OccupancyPage.tsx"
click node_adminui "https://github.com/priyayids/bookspace/blob/main/frontend/src/pages/AdminPage.tsx"
click node_timeline "https://github.com/priyayids/bookspace/blob/main/frontend/src/components/RoomTimeline.tsx"
click node_navigation "https://github.com/priyayids/bookspace/blob/main/frontend/src/App.tsx"
click node_api "https://github.com/priyayids/bookspace/blob/main/frontend/src/lib/api/client.ts"
click node_server "https://github.com/priyayids/bookspace/blob/main/backend/src/index.ts"
click node_auth "https://github.com/priyayids/bookspace/blob/main/backend/src/routes/auth.ts"
click node_authmw "https://github.com/priyayids/bookspace/blob/main/backend/src/middleware/auth.ts"
click node_booking "https://github.com/priyayids/bookspace/blob/main/backend/src/routes/bookings.ts"
click node_validation "https://github.com/priyayids/bookspace/blob/main/backend/src/utils/validation.ts"
click node_rooms "https://github.com/priyayids/bookspace/blob/main/backend/src/routes/rooms.ts"
click node_dashboard "https://github.com/priyayids/bookspace/blob/main/backend/src/routes/dashboard.ts"
click node_settings "https://github.com/priyayids/bookspace/blob/main/backend/src/routes/settings.ts"
click node_prisma "https://github.com/priyayids/bookspace/blob/main/backend/src/prisma/client.ts"
click node_schema "https://github.com/priyayids/bookspace/blob/main/backend/prisma/schema.prisma"

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_reservation,node_occupancy,node_adminui,node_timeline,node_navigation,node_visitor toneBlue
class node_api,node_postgres toneAmber
class node_server,node_auth,node_authmw,node_booking,node_validation,node_rooms,node_dashboard,node_settings toneMint
class node_prisma,node_schema toneRose
class node_administrator toneIndigo
```

## Components

### Frontend experiences

- [Reservations](https://github.com/priyayids/bookspace/blob/main/frontend/src/pages/ReservationPage.tsx): `frontend/src/pages/ReservationPage.tsx`
- [Occupancy display](https://github.com/priyayids/bookspace/blob/main/frontend/src/pages/OccupancyPage.tsx): `frontend/src/pages/OccupancyPage.tsx`
- [Admin console](https://github.com/priyayids/bookspace/blob/main/frontend/src/pages/AdminPage.tsx): `frontend/src/pages/AdminPage.tsx`
- [Room timeline](https://github.com/priyayids/bookspace/blob/main/frontend/src/components/RoomTimeline.tsx): `frontend/src/components/RoomTimeline.tsx`
- [Page navigation](https://github.com/priyayids/bookspace/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`

### API and transport

- [Typed API client](https://github.com/priyayids/bookspace/blob/main/frontend/src/lib/api/client.ts): `frontend/src/lib/api/client.ts`

### Backend services

- [HTTP server](https://github.com/priyayids/bookspace/blob/main/backend/src/index.ts): `backend/src/index.ts`
- [Admin authentication](https://github.com/priyayids/bookspace/blob/main/backend/src/routes/auth.ts): `backend/src/routes/auth.ts`
- [JWT middleware](https://github.com/priyayids/bookspace/blob/main/backend/src/middleware/auth.ts): `backend/src/middleware/auth.ts`
- [Booking lifecycle](https://github.com/priyayids/bookspace/blob/main/backend/src/routes/bookings.ts): `backend/src/routes/bookings.ts`
- [Time validation](https://github.com/priyayids/bookspace/blob/main/backend/src/utils/validation.ts): `backend/src/utils/validation.ts`
- [Room management](https://github.com/priyayids/bookspace/blob/main/backend/src/routes/rooms.ts): `backend/src/routes/rooms.ts`
- [Usage dashboard](https://github.com/priyayids/bookspace/blob/main/backend/src/routes/dashboard.ts): `backend/src/routes/dashboard.ts`
- [Booking settings](https://github.com/priyayids/bookspace/blob/main/backend/src/routes/settings.ts): `backend/src/routes/settings.ts`

### Persistence

- [Prisma client](https://github.com/priyayids/bookspace/blob/main/backend/src/prisma/client.ts): `backend/src/prisma/client.ts`
- [Booking data model](https://github.com/priyayids/bookspace/blob/main/backend/prisma/schema.prisma): `backend/prisma/schema.prisma`

### Other components

- **Room user**
- **Administrator**
- **PostgreSQL**

## Connections

- Room user → Page navigation: opens app (evidence: `README.md`)
- Administrator → Page navigation: opens app (evidence: `README.md`)
- Page navigation → Reservations: routes to (evidence: `frontend/src/App.tsx`)
- Page navigation → Occupancy display: routes to (evidence: `frontend/src/App.tsx`)
- Page navigation → Admin console: routes to (evidence: `frontend/src/App.tsx`)
- Reservations → Typed API client: requests data (evidence: `frontend/src/pages/ReservationPage.tsx`)
- Admin console → Typed API client: requests admin data (evidence: `frontend/src/pages/AdminPage.tsx`)
- Occupancy display → Typed API client: requests status (evidence: `frontend/src/pages/OccupancyPage.tsx`)
- Reservations → Room timeline: renders (evidence: `frontend/src/pages/ReservationPage.tsx`)
- Occupancy display → Room timeline: renders (evidence: `frontend/src/pages/OccupancyPage.tsx`)
- Room timeline → Typed API client: fetches availability (evidence: `frontend/src/components/RoomTimeline.tsx`)
- Typed API client → HTTP server: sends REST requests (evidence: `README.md`)
- HTTP server → Admin authentication: mounts auth routes (evidence: `backend/src/index.ts`)
- HTTP server → Booking lifecycle: mounts booking routes (evidence: `backend/src/index.ts`)
- HTTP server → Room management: mounts room routes (evidence: `backend/src/index.ts`)
- HTTP server → Booking settings: mounts settings routes (evidence: `backend/src/index.ts`)
- HTTP server → Usage dashboard: mounts protected routes (evidence: `backend/src/index.ts`)
- HTTP server → JWT middleware: protects dashboard (evidence: `backend/src/index.ts`)
- Booking lifecycle → Time validation: checks overlaps (evidence: `backend/src/routes/bookings.ts`)
- Booking lifecycle → Prisma client: reads and writes (evidence: `backend/src/routes/bookings.ts`)
- Room management → Prisma client: reads and writes (evidence: `backend/src/routes/rooms.ts`)
- Booking settings → Prisma client: reads and writes (evidence: `backend/src/routes/settings.ts`)
- Usage dashboard → Prisma client: queries metrics (evidence: `backend/src/routes/dashboard.ts`)
- Prisma client → Booking data model: uses data models (evidence: `README.md`)
- Booking data model → PostgreSQL: persists records (evidence: `README.md`)
- Admin authentication → Administrator: issues login token (evidence: `README.md`)
