Getting started
This template runs end-to-end on Bun + Next 16 + Supabase + Stripe. By the end of this page you will have a local dev server running with auth, billing, and admin all working against a free Supabase project.
If you have used the template before and just want a refresher, the CLAUDE.md file in the repo root has the full conventions reference.
1. Fork
bunx degit acme/landing my-app
cd my-app
bun installThe template ships bun.lock as the canonical lockfile. npm and
pnpm work too — but install will be slower and the husky hook expects
bun.
2. Configure your brand
Open src/template.config.ts. Edit:
SITE.name— your brand name (used in titles, JSON-LD, OG)SITE.url— production URL (drives canonical + sitemap)SITE.contactEmail— used by/contactand the footerLANGUAGES— re-order or remove locales you do not needFEATURES— toggle the newsletter, theme studio, blog, demo apps
Nothing in the codebase reads brand values from anywhere else. If you see a hardcoded site name, that is a bug — file an issue.
3. Wire your services
Copy .env.example to .env.local and fill the six core variables:
NEXT_PUBLIC_SUPABASE_URL=https://<project>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=<anon-key>
SUPABASE_SERVICE_ROLE_KEY=<service-role-key>
DATABASE_URL=postgresql://postgres:<password>@db.<project>.supabase.co:5432/postgres
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...Two more if you want billing tiers other than the free one:
STRIPE_PRICE_PRO=price_...
STRIPE_PRICE_BUSINESS=price_...The Zod schema in src/env.ts validates every variable at boot. In
production the server fails to start if a required variable is
missing — by design.
4. Apply migrations
bunx prisma generate
supabase db push # or: psql $DATABASE_URL -f prisma/migrations/0001_initial_rls.sqlThe prisma/migrations/ and supabase/migrations/ directories mirror
each other. Prisma owns the schema; Supabase owns the runtime, and the
raw SQL migrations enable RLS + write explicit policies.
5. Run
bun devOpen http://localhost:3000. You should see the landing page in your
browser locale. Sign in with the demo account if you ran the seeder:
bun run seed:demo
# email: demo@example.com
# password: demo12345The seeded user is an admin — you will see the Admin CTA in the header.
What's next
- Read Customisation for the directory tour and the deletion paths for opt-out subsystems.
- Read Deploying when you are ready to ship.