A batteries-included Next.js starter: TypeScript, Tailwind, Drizzle, auth (Google · Apple · email/password), Stripe billing, and a local-Postgres → Neon dev/prod split — with security defaults and agent tooling from the start.
bash scripts/rename-app.sh my-app # name the project (or use the `rename-app` skill)
pnpm bootstrap # .env + secret + local DB + schema
pnpm dev # → http://localhost:3000pnpm bootstrap needs a local Postgres (brew install postgresql@17 && brew services start postgresql@17). Email/password sign-up works immediately; verification and
reset links print to the dev server console. Add Google/Apple/Stripe/email keys
to .env when you want them — each is inert until configured.
| Tool | Purpose |
|---|---|
| Next.js | React framework (App Router) |
| Tailwind CSS | Utility-first CSS |
| Drizzle ORM | Type-safe SQL ORM |
| Local Postgres / Neon | Dev database / serverless Postgres in prod |
| better-auth | Self-hosted auth (Google, Apple, email/password) |
| Stripe | Subscription billing (env-flagged) |
| Vercel AI SDK | AI features — subscription CLIs in dev, API keys deployed (docs) |
| Biome · Vitest · Playwright | Lint/format · unit · e2e |
pnpm bootstrap # bootstrap a fresh clone
pnpm dev # dev server
pnpm build # production build
pnpm check:fix # lint + format
pnpm test # unit tests
pnpm e2e # e2e (local)
pnpm db:local # create local dev DB
pnpm db:push # push schema (dev)
pnpm db:generate && pnpm db:migrate # migrations (prod path)Migrations auto-apply on every Vercel build, and CI blocks a PR that changes
the schema without one — see docs/maintenance/database-migrations.md.
Start with docs/setup/getting-started.md.
The why behind the stack is in ADRs; provisioning + operations in
docs/cli-reference.md; security in
docs/security.md. Agents: see CLAUDE.md
and the provision-app / rename-app skills in .claude/skills/.
Uses pnpm pinned via
packageManager. Runcorepack enableonce so your local pnpm matches the project (ADR-0002).