Web Admin Dashboard
-
Networking: all fetches use
hooks/useAuthToken.ts; never callgetIdToken(), create auth headers, or read Firestore in the client. Server routes callverifyAdmin(request)fromlib/auth.ts. -
Revenue metrics: subscription metrics use
lib/stripe-subscriptions.ts; never list subscriptions by price ID. -
Admin removal:
adminData/{uid}.owner === truemarks the workspace owner; only the owner canDELETE /api/omi/team-members(any role, never themselves). Set the flag in Firestore, never through the UI.
Fetcher, SWR, partial-failure, and subscription-scope detail: docs/data-contracts.md.
/dashboard embeds uid omi-tv from grafana/; see grafana/README.md.
TV kiosk share links: /dashboard/tv-links (admin) → /tv/view/<token> (no login); docs/tv-mode.md.