What this is
DHH-approved structure with a React escape hatch. Rails handles the data, auth, jobs, and most of the HTML (Hotwire keeps the simpler pages JS-free) but you reach for React + Vite when a page needs real interactivity (a kanban board, a markdown editor, a multi-step builder).
When to pick this stack
- You like Rails’ productivity but parts of the product genuinely need SPA-like UX.
- You’re comfortable with the team owning a JS toolchain alongside Ruby.
- You want the option to dial React up (full SPA) or down (sprinkles only) per route.
What we’d swap
- React + Vite → Hotwire only: if you don’t actually need React, see the Rails + Hotwire + SQLite stack, same productivity, fewer moving parts, better SEO.
- Postgres → SQLite: with Rails 8’s Solid Cable / Solid Cache / Solid Queue, SQLite is now a credible production DB.
Common gotchas
- Two CSS pipelines if you’re not careful: Rails ships its own (Propshaft / Sprockets) and Vite ships its own. Pick one (usually Vite) and route everything through it.
- Dev mode runs two servers (Rails + Vite). The vite_ruby gem handles the orchestration but expect a slightly heavier dev loop than pure Rails.