Appearance
005 — Vite SPA for the dashboard
Context
The UI is session-backed domain management (a dashboard). SSR/SSG, file-based routing, and edge middleware from full-stack frameworks add little for this surface. There is no SEO-driven marketing site inside the app. API transport is covered in ADR 004.
Decision
Ship a React + Vite SPA in apps/web, with TanStack Query for client cache, deployed as static assets via Wrangler. The API stays on the Worker (ADR 001).
Consequences
- Clear BFF boundary (
/trpcproxy in dev); no shared Next/Remix data layer. - Deep-linking and auth UX are client-side concerns — fine for a dashboard prototype.
- Avoids coupling the UI deploy to a meta-framework that would blur the Worker/cron/D1 boundary.