# reyszkie/school-clinic-capstone architecture

> Architecture diagram of the GitHub repository reyszkie/school-clinic-capstone, 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/reyszkie/school-clinic-capstone
- Repository: https://github.com/reyszkie/school-clinic-capstone

## Overview

MQC School Clinic is a browser-based clinic workspace for staff to sign in, manage patients and clinical visits, track inventory, review reports, administer users, and maintain audit and deleted-record history. The Next.js page hosts the existing clinic interface in an iframe; its JavaScript coordinates the workspace and shared-state sync. Documented data storage uses Supabase, while the sampled state API calls Supabase REST directly. Feature modules are included from the README and tree; their internal calls were not sampled, so uncertain links are omitted or dashed.

Main entry points: [`artifacts/mqc-clinic/public/clinic/js/app.js`](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/app.js) (Workspace router), [`artifacts/mqc-clinic/public/clinic/js/storage.js`](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/storage.js) (Shared state sync), [`artifacts/mqc-clinic/public/clinic/js/login.js`](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/login.js) (Staff sign-in), [`artifacts/mqc-clinic/app/page.tsx`](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/page.tsx) (Clinic page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application entry"]
  node_nextpage["Clinic page<br/>[page.tsx]"]
  node_clinicui["Clinic interface<br/>[index.html]"]
end

subgraph group_workspace["Clinic workspace"]
  node_app["Workspace router<br/>[app.js]"]
  node_login["Staff sign-in<br/>[login.js]"]
  node_shell["Navigation shell<br/>[shell.js]"]
  node_dashboard["Dashboard<br/>[dashboard.js]"]
  node_patients["Patients and visits<br/>[patients.js]"]
  node_inventory["Inventory<br/>[inventory.js]"]
  node_reports["Reports<br/>[reports.js]"]
  node_admin["User administration<br/>[admin.js]"]
  node_settings["Clinic settings<br/>[settings.js]"]
  node_state["Workspace state<br/>[state.js]"]
  node_data["Clinic data<br/>[data.js]"]
end

subgraph group_services["API services"]
  node_storage["Shared state sync<br/>[storage.js]"]
  node_loginapi["Login endpoint<br/>[route.ts]"]
  node_registerapi["Registration endpoint<br/>[route.ts]"]
  node_stateapi["Clinic state endpoint<br/>[route.ts]"]
  node_health["Health endpoint<br/>[route.ts]"]
end

subgraph group_persistence["Data persistence"]
  node_supabase[("Supabase")]
  node_dbschema["Clinic data schema<br/>[index.ts]"]
  node_dbclient["Drizzle database client<br/>[index.ts]"]
end

node_staff(("Clinic staff"))

node_staff -->|"opens"| node_nextpage
node_nextpage -->|"embeds"| node_clinicui
node_clinicui -->|"loads"| node_app
node_app -->|"renders"| node_login
node_app -->|"renders"| node_shell
node_app -->|"binds"| node_dashboard
node_app -.->|"renders"| node_patients
node_app -->|"renders"| node_inventory
node_app -->|"binds"| node_reports
node_app -->|"renders"| node_admin
node_app -->|"binds"| node_settings
node_app -->|"hydrates"| node_storage
node_staff -->|"signs in"| node_login
node_login -.->|"authenticates"| node_loginapi
node_admin -.->|"registers users"| node_registerapi
node_storage -->|"reads and writes"| node_stateapi
node_stateapi -->|"reads and writes"| node_supabase
node_loginapi -->|"authenticates"| node_supabase
node_registerapi -->|"creates account"| node_supabase
node_state -.->|"supplies state"| node_storage
node_data -.->|"supplies records"| node_storage
node_dbclient -->|"loads schema"| node_dbschema
node_dbschema -.->|"models tables"| node_supabase
node_staff -.->|"checks service"| node_health

click node_nextpage "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/page.tsx"
click node_clinicui "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/index.html"
click node_app "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/app.js"
click node_login "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/login.js"
click node_shell "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/shell.js"
click node_dashboard "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/dashboard.js"
click node_patients "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/patients.js"
click node_inventory "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/inventory.js"
click node_reports "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/reports.js"
click node_admin "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/admin.js"
click node_settings "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/settings.js"
click node_state "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/state.js"
click node_data "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/data.js"
click node_storage "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/storage.js"
click node_loginapi "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/api/auth/login/route.ts"
click node_registerapi "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/api/auth/register/route.ts"
click node_stateapi "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/api/clinic-state/route.ts"
click node_dbschema "https://github.com/reyszkie/school-clinic-capstone/blob/main/lib/db/src/schema/index.ts"
click node_dbclient "https://github.com/reyszkie/school-clinic-capstone/blob/main/lib/db/src/index.ts"
click node_health "https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/api/healthz/route.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_nextpage,node_clinicui toneBlue
class node_app,node_login,node_shell,node_dashboard,node_patients,node_inventory,node_reports,node_admin,node_settings,node_state,node_data toneAmber
class node_storage,node_loginapi,node_registerapi,node_stateapi,node_health toneMint
class node_supabase,node_dbschema,node_dbclient toneRose
class node_staff toneIndigo
```

## Components

### Application entry

- [Clinic page](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/page.tsx): `artifacts/mqc-clinic/app/page.tsx`
- [Clinic interface](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/index.html): `artifacts/mqc-clinic/public/clinic/index.html`

### Clinic workspace

- [Workspace router](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/app.js): `artifacts/mqc-clinic/public/clinic/js/app.js`
- [Staff sign-in](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/login.js): `artifacts/mqc-clinic/public/clinic/js/login.js`
- [Navigation shell](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/shell.js): `artifacts/mqc-clinic/public/clinic/js/shell.js`
- [Dashboard](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/dashboard.js): `artifacts/mqc-clinic/public/clinic/js/dashboard.js`
- [Patients and visits](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/patients.js): `artifacts/mqc-clinic/public/clinic/js/patients.js`
- [Inventory](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/inventory.js): `artifacts/mqc-clinic/public/clinic/js/inventory.js`
- [Reports](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/reports.js): `artifacts/mqc-clinic/public/clinic/js/reports.js`
- [User administration](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/admin.js): `artifacts/mqc-clinic/public/clinic/js/admin.js`
- [Clinic settings](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/settings.js): `artifacts/mqc-clinic/public/clinic/js/settings.js`
- [Workspace state](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/state.js): `artifacts/mqc-clinic/public/clinic/js/state.js`
- [Clinic data](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/data.js): `artifacts/mqc-clinic/public/clinic/js/data.js`

### API services

- [Shared state sync](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/public/clinic/js/storage.js): `artifacts/mqc-clinic/public/clinic/js/storage.js`
- [Login endpoint](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/api/auth/login/route.ts): `artifacts/mqc-clinic/app/api/auth/login/route.ts`
- [Registration endpoint](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/api/auth/register/route.ts): `artifacts/mqc-clinic/app/api/auth/register/route.ts`
- [Clinic state endpoint](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/api/clinic-state/route.ts): `artifacts/mqc-clinic/app/api/clinic-state/route.ts`
- [Health endpoint](https://github.com/reyszkie/school-clinic-capstone/blob/main/artifacts/mqc-clinic/app/api/healthz/route.ts): `artifacts/mqc-clinic/app/api/healthz/route.ts`

### Data persistence

- **Supabase**
- [Clinic data schema](https://github.com/reyszkie/school-clinic-capstone/blob/main/lib/db/src/schema/index.ts): `lib/db/src/schema/index.ts`
- [Drizzle database client](https://github.com/reyszkie/school-clinic-capstone/blob/main/lib/db/src/index.ts): `lib/db/src/index.ts`

### Other components

- **Clinic staff**

## Connections

- Clinic staff → Clinic page: opens (evidence: `README.md`)
- Clinic page → Clinic interface: embeds (evidence: `artifacts/mqc-clinic/app/page.tsx`)
- Clinic interface → Workspace router: loads (evidence: `README.md`)
- Workspace router → Staff sign-in: renders (evidence: `artifacts/mqc-clinic/public/clinic/js/app.js`)
- Workspace router → Navigation shell: renders (evidence: `artifacts/mqc-clinic/public/clinic/js/app.js`)
- Workspace router → Dashboard: binds (evidence: `artifacts/mqc-clinic/public/clinic/js/app.js`)
- Workspace router → Patients and visits: renders
- Workspace router → Inventory: renders (evidence: `artifacts/mqc-clinic/public/clinic/js/app.js`)
- Workspace router → Reports: binds (evidence: `artifacts/mqc-clinic/public/clinic/js/app.js`)
- Workspace router → User administration: renders (evidence: `artifacts/mqc-clinic/public/clinic/js/app.js`)
- Workspace router → Clinic settings: binds (evidence: `artifacts/mqc-clinic/public/clinic/js/app.js`)
- Workspace router → Shared state sync: hydrates (evidence: `artifacts/mqc-clinic/public/clinic/js/app.js`)
- Clinic staff → Staff sign-in: signs in (evidence: `README.md`)
- Staff sign-in → Login endpoint: authenticates
- User administration → Registration endpoint: registers users
- Shared state sync → Clinic state endpoint: reads and writes (evidence: `artifacts/mqc-clinic/public/clinic/js/storage.js`)
- Clinic state endpoint → Supabase: reads and writes (evidence: `artifacts/mqc-clinic/app/api/clinic-state/route.ts`)
- Login endpoint → Supabase: authenticates (evidence: `artifacts/mqc-clinic/app/api/auth/login/route.ts`)
- Registration endpoint → Supabase: creates account (evidence: `artifacts/mqc-clinic/app/api/auth/register/route.ts`)
- Workspace state → Shared state sync: supplies state
- Clinic data → Shared state sync: supplies records
- Drizzle database client → Clinic data schema: loads schema (evidence: `lib/db/src/index.ts`)
- Clinic data schema → Supabase: models tables
- Clinic staff → Health endpoint: checks service
