Introduction
Modern, type-safe/RPC starter monorepo with foundations for building scalable SaaS products with clean architecture, automation, and great developer experience.
ZeroStarter is a minimal, strictly-typed SaaS monorepo (Bun, Turborepo, and a single type that runs from Postgres to the DOM) built so a human and an AI agent can both read it end to end.
It ships the load-bearing parts of a SaaS (auth, a typed API, a database with migrations, docs, and deploy) already wired together, so your first day goes to your product instead of plumbing.
Both audiences are first-class. The codebase is small and strict on purpose, and it hands an AI agent the same footing it hands you: executable skills, a typed API that rejects wrong calls, a one-request local sign-in, and generated llms.txt context. Point Claude Code, Cursor, or your own agent at it and it can build a real feature.
What's inside
- Auth & organizations: Better Auth with optional GitHub and Google OAuth (each button appears only when its credentials are set), organizations and teams, and a role ladder that gates the console.
- A typed API: Hono with end-to-end RPC. The frontend infers its types from the backend, so a wrong call fails at compile time, not in production. The same client reaches WebSockets.
- Database & migrations: PostgreSQL and Drizzle on Bun's SQL driver, schema-first, with generated migrations you apply in one command.
- A staff console: who gets in (users and roles, plus an allowlist by domain or address), what they changed (Activity), and the waitlist signups, each built on one reusable data table.
- Feature flags: the allowlist, API reference, blog, docs, internal docs and waitlist are each one boolean, chosen at
initand flippable later. - Docs and a blog: Fumadocs with search, scheduled posts, SEO and OG images, and an auto-generated
llms.txt: the site you're reading now. - A CLI:
bunx zerostarterscaffolds a rebranded fork, and later syncs it with the starter without touching what the fork owns. - Deploy and release: Docker and Vercel configs that ship the same code you develop against, and a release that is one merge.
All of that is real and working. The dashboard is an auth-gated shell: a signed-in starting point, not a pre-built app. The console is where the worked examples live, and you build your product on both.
Start here
- Quickstart: two commands to a running, signed-in app.
- Architecture: the stack, and why each piece is here.
- Project Structure: two apps, their packages, one import graph.
- The Type-Safe API: how one type crosses every boundary.
- Working with Agents: the loop an AI agent uses to build here.