# getqueueless/queueless architecture

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

- Interactive diagram: https://gitdiagram.com/getqueueless/queueless
- Repository: https://github.com/getqueueless/queueless

## Overview

This is a multi-client queue and appointment-management product: people obtain and track service tokens, while counter staff serve the queue and administrators configure operations and monitor demand. The web and mobile clients provide public, kiosk, staff, display, and admin experiences backed by Supabase; a FastAPI service supplies prediction and notification-related capabilities. The tree and excerpts establish these broad responsibilities, but README content and most runtime modules were not provided, so uncertain wiring—especially notification and ML flows—is omitted.

Main entry points: [`apps/web/src/lib/supabase/server.ts`](https://github.com/getqueueless/queueless/blob/main/apps/web/src/lib/supabase/server.ts) (Supabase access), [`apps/api/app/main.py`](https://github.com/getqueueless/queueless/blob/main/apps/api/app/main.py) (Prediction API), [`apps/mobile/src/app/(app)/(tabs)/index.tsx`](https://github.com/getqueueless/queueless/blob/main/apps/mobile/src/app/(app)/(tabs)/index.tsx) (Mobile app), [`apps/web/src/app/admin/_components/DashboardClient.tsx`](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/_components/DashboardClient.tsx) (Queue dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User experiences"]
  node_webpublic["Public status<br/>[page.tsx]"]
  node_webhome["Public landing<br/>[page.tsx]"]
  node_mobile["Mobile app<br/>[index.tsx]"]
  node_mobilepredict["Mobile prediction<br/>[predict.ts]"]
end

subgraph group_operations["Queue operations"]
  node_kiosk["Token kiosk<br/>[actions.ts]"]
  node_counter["Counter console"]
  node_display["Queue display<br/>[display-board.tsx]"]
end

subgraph group_admin["Administration"]
  node_dashboard["Queue dashboard"]
  node_services["Service setup"]
  node_counters["Counter setup"]
  node_staff["Staff management<br/>[StaffManager.tsx]"]
  node_staffapi["Staff API<br/>[route.ts]"]
  node_webpredict["Web prediction<br/>[predict.ts]"]
end

subgraph group_platform["Shared services"]
  node_dbclient["Supabase access<br/>[server.ts]"]
  node_database[("Queue database<br/>[database.types.ts]")]
  node_realtime["Realtime channels"]
end

subgraph group_mlapi["Prediction API"]
  node_fastapi["Prediction API<br/>[main.py]"]
  node_predictroute["Prediction route<br/>[predict.py]"]
  node_mlruntime["ML runtime<br/>[ml_runtime.py]"]
  node_notifications["Queue notifications<br/>[notifications.py]"]
end

node_visitor(("Queue user"))
node_adminuser(("Admin"))
node_external["Push service"]

node_visitor -->|"checks token"| node_webpublic
node_visitor -->|"views queue"| node_webhome
node_visitor -->|"uses app"| node_mobile
node_visitor -->|"requests token"| node_kiosk
node_webpublic -->|"reads status"| node_dbclient
node_webhome -->|"reads board"| node_dbclient
node_mobile -->|"accesses data"| node_dbclient
node_kiosk -->|"issues token"| node_dbclient
node_counter -->|"updates queue"| node_dbclient
node_display -->|"subscribes"| node_realtime
node_dashboard -->|"loads stats"| node_dbclient
node_adminuser -->|"monitors"| node_dashboard
node_adminuser -->|"configures"| node_services
node_adminuser -->|"configures"| node_counters
node_adminuser -->|"manages"| node_staff
node_services -->|"writes services"| node_dbclient
node_counters -->|"writes counters"| node_dbclient
node_staff -->|"sends CRUD"| node_staffapi
node_staffapi -->|"reads/writes profiles"| node_database
node_dbclient -->|"reads/writes"| node_database
node_realtime -->|"receives changes"| node_database
node_mobile -.->|"requests estimate"| node_mobilepredict
node_dashboard -.->|"requests estimate"| node_webpredict
node_mobilepredict -.->|"calls prediction"| node_fastapi
node_webpredict -.->|"calls prediction"| node_fastapi
node_fastapi -->|"dispatches"| node_predictroute
node_predictroute -->|"uses model"| node_mlruntime
node_fastapi -->|"starts tasks"| node_notifications
node_notifications -.->|"sends alerts"| node_external

click node_webpublic "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/t/%5Bid%5D/page.tsx"
click node_webhome "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/page.tsx"
click node_mobile "https://github.com/getqueueless/queueless/blob/main/apps/mobile/src/app/(app)/(tabs)/index.tsx"
click node_kiosk "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/kiosk/actions.ts"
click node_counter "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/counter/counter-console.tsx"
click node_display "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/display/%5Bservice%5D/display-board.tsx"
click node_dashboard "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/_components/DashboardClient.tsx"
click node_services "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/services/ServicesManager.tsx"
click node_counters "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/counters/CountersManager.tsx"
click node_staff "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/staff/StaffManager.tsx"
click node_staffapi "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/api/admin/staff/route.ts"
click node_dbclient "https://github.com/getqueueless/queueless/blob/main/apps/web/src/lib/supabase/server.ts"
click node_database "https://github.com/getqueueless/queueless/blob/main/apps/web/types/database.types.ts"
click node_realtime "https://github.com/getqueueless/queueless/blob/main/apps/web/src/lib/realtime/useResilientChannel.ts"
click node_mobilepredict "https://github.com/getqueueless/queueless/blob/main/apps/mobile/src/lib/predict.ts"
click node_webpredict "https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/_lib/predict.ts"
click node_fastapi "https://github.com/getqueueless/queueless/blob/main/apps/api/app/main.py"
click node_predictroute "https://github.com/getqueueless/queueless/blob/main/apps/api/app/routes/predict.py"
click node_mlruntime "https://github.com/getqueueless/queueless/blob/main/apps/api/app/ml_runtime.py"
click node_notifications "https://github.com/getqueueless/queueless/blob/main/apps/api/app/notifications.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_webpublic,node_webhome,node_mobile,node_mobilepredict toneBlue
class node_kiosk,node_counter,node_display toneAmber
class node_dashboard,node_services,node_counters,node_staff,node_staffapi,node_webpredict toneMint
class node_dbclient,node_database,node_realtime,node_visitor toneRose
class node_fastapi,node_predictroute,node_mlruntime,node_notifications,node_adminuser,node_external toneIndigo
```

## Components

### User experiences

- [Public status](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/t/%5Bid%5D/page.tsx): `apps/web/src/app/t/[id]/page.tsx`
- [Public landing](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/page.tsx): `apps/web/src/app/page.tsx`
- [Mobile app](https://github.com/getqueueless/queueless/blob/main/apps/mobile/src/app/(app)/(tabs)/index.tsx): `apps/mobile/src/app/(app)/(tabs)/index.tsx`
- [Mobile prediction](https://github.com/getqueueless/queueless/blob/main/apps/mobile/src/lib/predict.ts): `apps/mobile/src/lib/predict.ts`

### Queue operations

- [Token kiosk](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/kiosk/actions.ts): `apps/web/src/app/kiosk/actions.ts`
- [Counter console](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/counter/counter-console.tsx): `apps/web/src/app/counter/counter-console.tsx`
- [Queue display](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/display/%5Bservice%5D/display-board.tsx): `apps/web/src/app/display/[service]/display-board.tsx`

### Administration

- [Queue dashboard](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/_components/DashboardClient.tsx): `apps/web/src/app/admin/_components/DashboardClient.tsx`
- [Service setup](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/services/ServicesManager.tsx): `apps/web/src/app/admin/services/ServicesManager.tsx`
- [Counter setup](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/counters/CountersManager.tsx): `apps/web/src/app/admin/counters/CountersManager.tsx`
- [Staff management](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/staff/StaffManager.tsx): `apps/web/src/app/admin/staff/StaffManager.tsx`
- [Staff API](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/api/admin/staff/route.ts): `apps/web/src/app/api/admin/staff/route.ts`
- [Web prediction](https://github.com/getqueueless/queueless/blob/main/apps/web/src/app/admin/_lib/predict.ts): `apps/web/src/app/admin/_lib/predict.ts`

### Shared services

- [Supabase access](https://github.com/getqueueless/queueless/blob/main/apps/web/src/lib/supabase/server.ts): `apps/web/src/lib/supabase/server.ts`
- [Queue database](https://github.com/getqueueless/queueless/blob/main/apps/web/types/database.types.ts): `apps/web/types/database.types.ts`
- [Realtime channels](https://github.com/getqueueless/queueless/blob/main/apps/web/src/lib/realtime/useResilientChannel.ts): `apps/web/src/lib/realtime/useResilientChannel.ts`

### Prediction API

- [Prediction API](https://github.com/getqueueless/queueless/blob/main/apps/api/app/main.py): `apps/api/app/main.py`
- [Prediction route](https://github.com/getqueueless/queueless/blob/main/apps/api/app/routes/predict.py): `apps/api/app/routes/predict.py`
- [ML runtime](https://github.com/getqueueless/queueless/blob/main/apps/api/app/ml_runtime.py): `apps/api/app/ml_runtime.py`
- [Queue notifications](https://github.com/getqueueless/queueless/blob/main/apps/api/app/notifications.py): `apps/api/app/notifications.py`

### Other components

- **Queue user**
- **Admin**
- **Push service**

## Connections

- Queue user → Public status: checks token
- Queue user → Public landing: views queue
- Queue user → Mobile app: uses app
- Queue user → Token kiosk: requests token
- Public status → Supabase access: reads status
- Public landing → Supabase access: reads board
- Mobile app → Supabase access: accesses data
- Token kiosk → Supabase access: issues token
- Counter console → Supabase access: updates queue
- Queue display → Realtime channels: subscribes
- Queue dashboard → Supabase access: loads stats
- Admin → Queue dashboard: monitors
- Admin → Service setup: configures
- Admin → Counter setup: configures
- Admin → Staff management: manages
- Service setup → Supabase access: writes services
- Counter setup → Supabase access: writes counters
- Staff management → Staff API: sends CRUD
- Staff API → Queue database: reads/writes profiles
- Supabase access → Queue database: reads/writes
- Realtime channels → Queue database: receives changes
- Mobile app → Mobile prediction: requests estimate
- Queue dashboard → Web prediction: requests estimate
- Mobile prediction → Prediction API: calls prediction
- Web prediction → Prediction API: calls prediction
- Prediction API → Prediction route: dispatches
- Prediction route → ML runtime: uses model
- Prediction API → Queue notifications: starts tasks
- Queue notifications → Push service: sends alerts
