A production-ready full-stack TypeScript starter. Authentication, organizations, billing, and email — all wired up and working out of the box.
Built with React 19, Convex, TanStack Router, and TailwindCSS.
| Layer | Technology |
|---|---|
| Frontend | React 19, TailwindCSS v4, TanStack Router, Vite |
| Backend | Convex |
| Auth | WorkOS AuthKit |
| Billing | Autumn |
| Resend | |
| Monorepo | Turborepo, Bun |
# Install dependencies
bun install
# Set up Convex (first time only)
bun run dev:setup
# Start everything
bun run devOpen localhost:3001.
You will need to configure environment variables before the app fully works. See Environment Variables.
apps/web/ Frontend application
src/routes/ File-based routing (TanStack Router)
src/components/ React components
src/hooks/ Custom hooks
src/lib/ Utilities
packages/backend/convex/ Convex serverless functions
schema.ts Database schema
lib/ Shared backend utilities (auth, RBAC, email)
packages/env/ Environment variable validation
packages/config/ Shared TypeScript configuration
| Command | Purpose |
|---|---|
bun run dev |
Start all apps in development |
bun run dev:web |
Start frontend only (port 3001) |
bun run dev:server |
Start Convex backend only |
bun run dev:setup |
First-time Convex project setup |
bun run build |
Build all apps |
bun run check-types |
TypeScript type checking |
bun run check |
Biome lint and format |
bun run prepare |
Install git hooks |
| Guide | Description |
|---|---|
| Getting Started | Full setup walkthrough from zero to running |
| Architecture | How the codebase is organized |
| Authentication | WorkOS auth flow, sign-in, callbacks |
| Organizations | Org mode, roles, invitations, toggling on/off |
| Billing | Autumn integration, plans, feature gating |
| Environment Variables | Every env var explained |
| Deployment | Shipping to production |
All code is checked by Biome with a pre-commit hook.
- Tab indentation, double quotes
- No unused imports
- No
anytypes - SVGs require
aria-hidden="true" - Tailwind classes are auto-sorted in
cn()calls
Run bun run check before committing.
MIT