Next.js 15, TypeScript, Prisma, Clerk, Neon, Stripe, shadcn/ui. Pre-wired, typed end-to-end, MIT-licensed. Clone it, ship it, delete what you don't need.
The same five tasks, every project. Either you do them this weekend, or this repo already did.
Eight things you'd otherwise build, debug, and rebuild. Each configured to production defaults — not toy examples.
Clerk pre-wired. Protected routes, middleware, signin/signup. Social logins enabled.
Prisma + Neon Postgres. Schema with User, Account, Subscription. Migrations ready.
Stripe checkout + webhooks. Signature verification, typed events, idempotent handlers.
shadcn/ui + Tailwind. Token-based theming, dark mode, copy-in components you own.
Resend configured. React email templates, welcome flow, transactional helpers.
Vercel config, env vars documented, migrations on build. Preview deploys work.
Organizations, invitations, and role-based access powered by Clerk. Every resource scoped to a tenant out of the box.
Locale-based routing and translated UI powered by next-intl, with a working example locale included.
No "we use the best tools" — here's what's in package.json and why each line is there. Disagree with a choice? Swap it. The boundaries are clean.
{
"name": "boilerplate-saas",
"version": "2.4.1",
"private": true,
"type": "module",
"dependencies": {
"next": "^15.0.3", // app router, server actions, no pages/
"react": "^19.0.0", // concurrent rendering, use() hook
"typescript": "^5.6.3", // strict mode, no implicit any
"@clerk/nextjs": "^6.3.0", // auth without the auth.js config hell
"@prisma/client": "^5.20.0", // typed db client, migrations as code
"@neondatabase/serverless": // postgres over http, no pool limits
"^0.9.4",
"stripe": "^17.0.0", // typed webhooks, no signature handling
"resend": "^4.0.0", // email with react templates
"tailwindcss": "^3.4.14", // tokens, not config files
"@shadcn/ui": "latest", // copy-in components, not a dependency
"next-intl": "^3.26.0" // i18n with [locale] routing, no config hell
},
"engines": { "node": ">=20.0.0" } // vercel runs 20.x, you should too
}
If you're none of these, the repo still works — but the defaults are tuned for these people.
Weekend projects that ship Monday. No three-week scaffold phase, no auth rabbit hole. Clone, configure five env vars, push.
Skip the scaffold debate. The boring decisions are made: Postgres over Mongo, Clerk over DIY, Stripe over Lemon Squeezy. Disagree? Fork it.
A defensible default across client work. Same starter every project, same deployment story, same handoff. Bill for the product, not the boilerplate.
Numbered because this is actually a sequence — not a value framework, not a "philosophy". Three steps, in order.
One command. Creates a fresh Next.js app wired to this repo's example. No fork, no template — you get a clean git history.
$ npx create-next-app@latest my-app \
Five environment variables. All documented in .env.example. Clerk keys, Neon DSN, Stripe keys, Resend key. That's the entire setup.
$ cp .env.example .env.local
Push to GitHub, import to Vercel. Migrations run on build via prisma migrate deploy. Preview deploys get isolated database branches automatically.
$ git push origin main
The repo is the product. MIT-licensed, hosted on GitHub, maintained in the open. If we ever build a hosted dashboard, it'll be a separate product — this starter stays free forever.
grep -r "fetch\|axios" src/ returning only your own code.Pulled from GitHub issues, Discord DMs, and the awkward @-mentions. Answered honestly.
.env and you're on any Postgres provider. Auth: possible but more work. The auth boundary lives in src/lib/auth/ — replace those exports and the rest of the app doesn't care.
.env.example. Database migrations run automatically on build via prisma migrate deploy in the build script. Not on Vercel? The build command is standard Next.js — works on Netlify, Railway, Fly.io, your own server.
No signup. No email. No "book a demo". Just a git URL and 47 seconds of npm install.