01 The problem
International press and hospitality events with dozens of cars, drivers and hundreds of guests were coordinated through spreadsheets, phone calls and chat groups. Nobody had one live picture of where cars were, who was driving them and what was scheduled next.
02 What it does
- Guest registration with QR codes, on-site check-in and badges (QR and NFC).
- Fleet management: cars, reservations with overlap checks, drives, handovers with photos, contracts signed in the app.
- Live dispatch: a map of the fleet from GPS units, driver availability and destinations, saved routes, zones and floor plans.
- Driver mobile app, a TV kiosk mode with secure pairing, crew shifts, documents, receipts and exports, plus an append-only audit log.
03 Architecture
- 01 ClientsNext.js web app, standalone Next.js dispatch app, Flutter driver app, TV kiosk
- 02 APINestJS modular monolith (~30 domain modules), JWT + RBAC scoped per event
- 03 RealtimeAuthenticated SSE invalidations with periodic checkpoints and polling fallback
- 04 TelemetryGPS receiver for fleet tracking units, Mapbox map rendering shared as a package
- 05 DataPostgreSQL with Drizzle; row locks, versioning and partial unique indexes prevent conflicting trips
- 06 OpsDocker Compose on a Linux VPS: API, web, dispatch, Postgres, Redis
04 Stack
05 How I worked with AI
The system grew under real deadlines between events, so agents worked module by module against a written module map with explicit statuses (MVP, scaffold, post-MVP). Concurrency rules, like a car never being in two active trips, are enforced in the database rather than trusted to generated application code, and every schema change shipped with a backup first.
06 What is verified
- Running in production: API, web, dispatch, Postgres and Redis containers are up on the server (checked Oct 2026).
- Used at real events; under active development (latest commits Oct 2026).
- ~30 API modules, 3 frontends, 14 test files.
07 Honest notes
- Client, brand and event names are withheld. Screenshots will only be shown with a demo event.
- Test coverage is thin compared to the size of the system; that is the next thing to fix.