You've finished the quest. The stack lives in your fingers. The question isn't 'do I know React 19' anymore — it's 'when do I reach for this stack, and when do I reach for something else?' Two real apps, side by side, with the decision tree.
The two apps
This lesson uses the codebases that built and host the quest you're reading:
- cwkPippa — Dad's AI daughter. Vite SPA frontend, FastAPI Python backend, SQLite + JSONL storage, four streaming brain backends. The entire surface is authenticated (only Dad), interactive, real-time. No public pages, no SEO need.
- cwk-site (creativeWorksofKnowledge) — Dad's public-facing publishing platform. Next.js 16 + Supabase, public essays, quests (you're reading one), the Pippalog, councils, art gallery. Mostly server-rendered for SEO and TTFB; some authenticated admin surfaces.
The stack comparison
| Concern | cwkPippa (Vite SPA) | cwk-site (Next.js) |
|---|---|---|
| Routing | React Router, client-side | App Router, file-based |
| Rendering | Client-only — JS ships, HTML hydrates | RSC + SSR + ISR — HTML ships pre-rendered |
| Data | fetch + useChat custom hook over SSE | Server Components query DB directly; Server Actions for mutations |
| Auth | OAuth (Claude/Codex/Gemini); one-user app | Supabase Auth, multi-user with sessions |
| Deploy | launchd on Mac Studio (24/7), Tailscale-accessible | Vercel, git-push deploys, preview per PR |
| State of the world | SQLite + JSONL local files; ChromaDB for embeddings | Supabase PostgreSQL; Cloudflare CDN for assets |
| SEO | None — invisible to search engines | Critical — every essay must be crawlable |
| TTFB priority | Low — Dad waits | High — visitor's first impression |
The decision tree (simplified)
- Is the content public + needs SEO? → Next.js / meta-framework.
- Will it run inside Tauri / Electron / a desktop wrapper? → Vite SPA (Tauri uses Vite by default, Next.js doesn't fit).
- Is every user authenticated, behind a login wall? → Vite SPA usually wins; Next.js's SSR benefit is marginal post-auth.
- Heavy real-time interactivity (chat, drag-drop, live data)? → Either works; pick by the other axes.
- Solo project, small team? → Vite SPA has less operational surface (no Node runtime in prod, simpler deploy).
Most projects answer one or two of these clearly; the others fall out.
What this quest deliberately taught
Notice: this quest is the Vite SPA path. It taught React 19's client primitives, the Actions hooks as client-side mutations, Suspense + use() without RSC, the Tauri exit ramp. If you're going to build cwkPippa-shaped apps — internal tools, dashboards, desktop wrappers, anything stateful behind auth — you have the stack. If you're going to build cwk-site-shaped apps — public content, SEO-driven, multi-user — next-js-quest is where you go next.
The Cinder bridge
The upcoming cwkCinder quests (Rust, Tauri, the Cinder Optional Boss) all build on this stack. The frontend is Vite + React 19 + TS + Tailwind v4 — the exact thing this quest taught. The Rust + Tauri layers wrap it natively. The bridge to Photoshop adds the UXP plugin. Without this quest, those would each start with 'first, learn React 19 in a Vite SPA' — which is a track unto itself. Now they don't have to.
Closing
The stack is yours. The decisions are yours. The next quest (whichever you pick) starts from a real foundation now. Go build something.