Nothing in this folder is a real app. Each subfolder is a runnable skeleton
already wired to the kit, the theme, and the deploy path, distilled from an app
that shipped. Pick the one whose shape matches what you are building, copy it
out, and follow its TEMPLATE.md.
| Folder | Shape | Distilled from | Pick it when |
|---|---|---|---|
react-router-ssr/ | React Router 7 framework mode, SSR, node server, Cloud Run | speedway | loaders and actions must run on the server (a database, an LLM call, file parsing) and the app is one deployable |
vite-spa/ | Vite + React single-page app, React Router library mode, talks to a separate API over /api | walmart-mvp frontend/ | the backend already exists or lives in another language, and the browser only needs a static bundle |
next/ | Next 16 app router | the playground | the app wants Next specifically (server components, the playground's toolchain); neither customer app uses this shape today |
All three carry the same non-negotiables: the kit as the only component
source, the theme attribute set before paint, the bundler contract from
packages/ui/README.md Install step 4, a build-info surface so a deploy is verifiable
without credentials (docs/app-patterns/03-deploying-on-gcp.md), and a
TEMPLATE.md whose first block is the copy-out checklist and whose second
block is where the design rules live before you build a screen.
Inside this repo the templates depend on @versable-git/ui as workspace:*
so they typecheck and run against the live kit. A copied-out app swaps that
for the registry pin; the checklist says how. The templates never depend on
@versable-git/toolkit; a new app adds it when a real call site appears.
docs/app-patterns/05-starting-a-new-app.md covers what happens after the
app runs and before it has any screens.