Separate from the user dashboard at web/ so admin and end-user surfaces
never get confused. Same stack (React 19 + Vite + Tailwind v4 + shadcn)
for consistency; differentiated visually via:
- 3px amber top stripe on every authenticated page
- persistent ADMIN badge in the sidebar header and login card
- amber-tinted sidebar with diagonal pattern
- amber accent on active nav items and primary buttons
- env pill (red/amber/emerald for prod/staging/dev) in the topbar
- 'Admin · Warmbly' title and amber-stroked shield favicon
Pages with real data wiring:
Overview, Workers (list+detail with SSH actions), Egresses,
Audit Log, Settings (Encryption / Storage / Messaging / Cache /
Transports) backed by /admin/settings/backends
Stub pages with placeholder bodies (nav exists, no 404):
Mailboxes, Users, Organizations, Plans, Warmup, Campaigns,
Analytics
Auth reuses backend session cookies. Dev server runs on port 5174 to
coexist with the dashboard on 5173.
pnpm install && pnpm build → clean
pnpm typecheck && pnpm lint → clean (2 pre-existing fast-refresh
warnings in shadcn primitives kept verbatim from the dashboard)