Under the surface
SSR, local state, validation, and deployment.
Nuxt from end to end
Nuxt 4 renders the seeded workspace on the server through useAsyncData. A client plugin restores a validated, versioned localStorage snapshot after hydration. Routes that depend on browser-only records show a loading state until restoration finishes.
Two kinds of storage
Text records live in localStorage. Blob data lives in IndexedDB through idb. When storage is unavailable, the active session continues in memory with visible save feedback. Workspace IDs isolate local edits.
Predictable demo data
Faker is imported only in server utilities. Metadata is reproducible; replies and transcripts are written by hand. Shared TypeScript models and Yup schemas define API boundaries.
Interaction and accessibility
UI Thing components use Reka UI primitives. The shell offers keyboard navigation, a command palette, visible focus, responsive drawers, light and dark themes, and reduced-motion support. Charts load on demand and include a text table.
Delivery
Bun manages dependencies and scripts. Node runs Nuxt builds and the server. Oxfmt formats Vue and TypeScript; Oxlint checks scripts, and Nuxt typecheck checks types. Vitest and Playwright cover validation, APIs, persistence, media cleanup, and key browser flows. Netlify uses Nitro server functions so demo APIs remain available.