Email capture, double opt-in, referral tracking, and an admin dashboard that actually shows you what's happening. Built to ship in one sitting.
Stack
- Next.js 16 — Static landing + API routes in one project.
- Supabase — Postgres + row-level security. Free tier is generous.
- Resend — Confirmation + referral emails.
Features
- Email capture with double opt-in — Collect, confirm, and track. Nobody on your list should be there by accident.
- Referral tracking — Each subscriber gets a unique link. We count, you rank, you reward.
- Admin dashboard — See signups, referrals, sources, and export to CSV. Password-protected.
Install
npx create-bitroot@latest my-waitlist --kit waitlist-kit
cd my-waitlist
cp .env.example .env.local
npm run devEnvironment
.env.example
NEXT_PUBLIC_APP_URL=http://localhost:3000
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=eyJhbG...
RESEND_API_KEY=re_...
ADMIN_PASSWORD=change-meWalkthrough
1. Create a Supabase project
Go to supabase.com, new project, copy the URL and service key. Run our seed script to create the subscribers table.
npm run db:seed2. Wire up Resend
Verify your sending domain (5 min), drop the API key into .env.local, and ship.
Gotchas
- Supabase RLS is ON by default — if the admin dashboard shows zero rows, check you're using the service key, not the anon key.
- Referral codes need to be URL-safe. We use nanoid, not uuid.
Why not just build it yourself?
If you need scheduling, A/B testing, or a full landing page builder, this is too lean. This kit is one job: collect emails well.
Links
License: MIT
Got stuck, or want this shipped end-to-end for you? bitroot.club builds custom products for founders. →