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.

sample
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.

sample
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.

sample
npx prisma migrate dev && npx prisma db seed

Dashboard 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.

sample
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.

sample
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.

sample
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.

sample
npm test  # runs on every push