Waitlist Kit
A real waitlist page. In an hour. With referrals.
Email capture, double opt-in, referral tracking, and an admin dashboard that actually shows you what's happening. Built to ship in one sitting.
Install
~60 secondsnpx create-bitroot@latest my-waitlist --kit waitlist-kit
cd my-waitlist
cp .env.example .env.local
npm run devAlready wired, so you can skip to 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.
Every dependency has a reason.
- Next.js 16Static landing + API routes in one project.
- SupabasePostgres + row-level security. Free tier is generous.
- ResendConfirmation + referral emails.
Here's every env var, labeled.
Copy to .env.local. The included first-run script refuses to boot if any of them are missing — you'll know immediately.
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-meZero to first deploy.
This is the exact sequence we'd run from a blank directory. Steps are reproducible — if one fails, we want to know.
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.
The stuff that ate our afternoons.
Things we'd have wanted a heads-up on. Logged as we hit them.
- !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.
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.
Got stuck, or want this shipped end-to-end for you? bitroot.club builds custom products for founders. →