What's inside
Seven parts, each wired to the others. Nothing here is a stub.
Authentication
Auth.js v5 with Google, GitHub and email magic links. Sessions work out of the box, and protected routes stay protected.
providers: [Google, GitHub, Email({ server, from })]Stripe billing and webhooks
Checkout, the customer portal, and signed, idempotent webhooks that keep plans in sync. A retried event does no harm.
const event = stripe.webhooks.constructEvent(body, sig, secret)Database and Prisma
Prisma with Postgres, a ready schema, and a seed script. Migrate once and you have users, accounts and subscriptions.
npx prisma migrate dev && npx prisma db seedDashboard and plan gating
A protected dashboard with plan gating, plus settings and billing pages. Free users see the upgrade prompt. Paid users see the product.
if (user.plan !== "pro") redirect("/pricing")Marketing pages and SEO
Landing, pricing, terms, privacy, sitemap and social share images. Search engines and link previews get what they need.
export default function sitemap() { return pages }Rebrand in one file
Change the name, copy, plans and FAQ from a single config file. No find and replace across forty components.
export const site = { name: "YourApp", plans: [...] }Tests and CI
Tests ship with the kit and run in CI on every push. Break something and you hear about it before your customers do.
npm test # runs on every push