Skip to content

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 in signin.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

  1. fleet/dashboard.html is the preferred layout for all operator dashboards.
  2. Surface the AI Route Builder (currently only on admin.html). Options: (a) add under Operations, (b) + Add AI Route button next to + Add Route, (c) post-click dropdown "AI route" vs "manual". Default chosen: (b) + Add AI Route button.
  3. Route actions = edit / delete. Delete requires a confirmation prompt.
  4. Route columns sortable: route, driver/students, status.
  5. Click/hover a route name → show its stops and riders.
  6. Routes auto-save during creation (2–3 min interval) + manual save. Routes are draft or published.
  7. Routes page shows published (active/live) separately from draft.
  8. 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.
  9. Traffic on/off button (EXISTS in dashboard) + pin-a-driver-to-center-on-map toggle (MISSING).
  10. Driver logged into driver PWA = on the clock; driving location tracked (buses table has lat/lng/heading/speed; PUT /api/buses/{id}/location exists).
  11. Nice-to-have: show the route on the map (polyline overlay).

Parent portal consolidation

  • Signin + registration consolidated into signin.html only.
  • STATUS: register.html already redirects to signin.html#register. signup.html is 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), group transitpin-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.html layout.

Current backend state (app3 /opt/transitpin-api)

  • AUTH2_API = http://127.0.0.1:8102/api/latest (backend); frontend ops uses https://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).