Operator Dashboard v2 — Requirements (recovered 2026-08-15)¶
Source: Germaine, Telegram 2026-08-15. Previously lost to context compaction; re-supplied verbatim. DO NOT LOSE AGAIN.
Reference layout¶
- Preferred operator-dashboard layout =
fleet/dashboard.html(dark shell, live fleet map, stat cards). - Requirement: dashboard "needs to match TransitPin site theme" and be replicated per tenant (subdomain → tenant theme).
- Replication mechanism: same
resolveTenantSlug()+loadTenantTheme()+applyTheme()+applyBrandName()pattern already insignin.html(lines ~967–1035). Convert hardcoded hex → CSS variables (:root), then tenant theme JSON from/api/theme/<slug>drives colors/brand. One file, N tenants, zero per-tenant code.
The 11 requirements¶
fleet/dashboard.htmlis the preferred layout for all operator dashboards.- Surface the AI Route Builder (currently only on
admin.html). Options: (a) add under Operations, (b)+ Add AI Routebutton next to+ Add Route, (c) post-click dropdown "AI route" vs "manual". Default chosen: (b)+ Add AI Routebutton. - Route actions = edit / delete. Delete requires a confirmation prompt.
- Route columns sortable: route, driver/students, status.
- Click/hover a route name → show its stops and riders.
- Routes auto-save during creation (2–3 min interval) + manual save. Routes are
draftorpublished. - Routes page shows published (active/live) separately from draft.
- OPEN QUESTION (answer, don't build yet): "If there were a dedicated Maps option, what would we put on it?" → Recommendation: full-screen live fleet map + traffic toggle + driver pin-to-center + route polylines + stop markers + geofence/ETA panel.
- Traffic on/off button (EXISTS in dashboard) + pin-a-driver-to-center-on-map toggle (MISSING).
- Driver logged into driver PWA = on the clock; driving location tracked (buses table has lat/lng/heading/speed;
PUT /api/buses/{id}/locationexists). - Nice-to-have: show the route on the map (polyline overlay).
Parent portal consolidation¶
- Signin + registration consolidated into
signin.htmlonly. - STATUS:
register.htmlalready redirects tosignin.html#register.signup.htmlis the marketing "Start Free Trial" (operator signup) — different purpose. Remaining: ensure no page links to a separate parent-register page.
Ops "my dashboard" — ops.transitpin.com¶
- Built as
ops.transitpin.com(exists:ops/index.html+ops/login.html). - Auth page login wired to auth2 (
auth2-api.itpropartner.com), grouptransitpin-it-staff. - User's account in group
transitpin-it-staff:g@germainebrown.com(confirmed working 2026-08-15). - See all clients (
/api/tenants), API health (/api/health), per-client logs (/api/tenants/{id}/logs— backend endpoint MISSING). - Use
fleet/dashboard.htmllayout.
Current backend state (app3 /opt/transitpin-api)¶
- AUTH2_API =
http://127.0.0.1:8102/api/latest(backend); frontend ops useshttps://auth2-api.itpropartner.com. - Endpoints:
/api/health,/api/tenants,/api/theme/{slug},/api/auth/login|register,/api/registrations,/api/routes(GET only),/api/buses+/api/buses/{id}/location(PUT),/api/schools,/api/children,/api/dashboard/stats. - GAPS: no routes POST/PUT/DELETE, no route stops/riders detail, no draft/published
mode, no per-tenant logs endpoint. - routes table: id, name, bus_id, driver, stops (INT count), miles, status ('active'), created_at, tenant_id.
- buses table has lat/lng/heading/speed/last_update (driver tracking fields present).