Project Plan
Goal
Ship a minimal, reusable wait-list starter that anyone can deploy to Vercel in one click.
0 Β· Prerequisites
| Tool | Version / note | 
|---|---|
| Node | β₯ 18 | 
| Package manager | pnpm / npm / yarn | 
| Supabase CLI (optional) | for local DB | 
| GitHub account | template clone | 
| Vercel account | production host | 
| Google Cloud project | only if deployer wants Google Auth | 
1 Β· Repo scaffolding
waitlist-kit/ ββ app/ β ββ layout.tsx # global shell + Tailwind β ββ page.tsx # landing β ββ join/page.tsx # sign-up form (magic link) β ββ list/page.tsx # public list of sign-ups β ββ api/ β ββ preview/route.ts # (optional) OG-image ββ lib/ β ββ supabase.ts # createBrowserClient / createServerClient ββ public/ β ββ logo.svg # replaceable brand asset ββ supabase/ β ββ migrations/ β β ββ 000_waitlist.sql # table + RLS policy β ββ config.toml # link migrations ββ content.json # hero copy, colours, perks cards ββ tailwind.config.ts ββ .env.example ββ vercel.json # runtime opts (edge optional) ββ README.md
Keep editable copy in content.json so deployers tweak text, not TSX.
2 Β· Database schema (000_waitlist.sql)
create table public.waitlist_signups (
  id         uuid primary key default gen_random_uuid(),
  email      text not null check (email <> ''),
  name       text,
  message    text,
  hidden     boolean default false,
  created_at timestamp with time zone default now()
);
 
alter table public.waitlist_signups
  enable row level security;
 
create policy "Public insert" on public.waitlist_signups
  for insert using (true);Magic-link e-mail auth works without extra policies.
3 Β· Core UI flow
- 
Landing β reads perks + launch date from
content.json. - 
Call-to-action
- Show Continue with Google only if 
NEXT_PUBLIC_GOOGLEenv-var exists. - Always offer Sign up with email (Supabase magic link).
 
 - Show Continue with Google only if 
 - 
Insert to Supabase
supabase .from('waitlist_signups') .insert({ email, name, message, hidden }); - 
Redirect to
/listβ fetch withselect * from waitlist_signups order by created_at desc;Display as Tailwind card grid; rows #1β40 get a founder badge.
 
4 Β· Packaging as a template
| File | Purpose | 
|---|---|
README.md | pitch β Deploy to Vercel button β quick-start | 
| Deploy button | https://vercel.com/new/clone?repository-url=https://github.com/YOUR_ORG/waitlist-kit&project-name=waitlist-kit | 
.env.example | only NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY | 
supabase/config.toml | tells integration to run migrations | 
LICENSE | MIT or commercial | 
5 Β· Buyer onboarding
- Click Deploy to Vercel.
 - Authorise Vercel β Supabase.
 - Wait ~60 s for build.
 - (Optional) Add Google OAuth creds in Supabase β Auth β Providers.
 - Replace 
public/logo.svg& tweakcontent.json. - Push β redeploy β done.
 
6 Β· Optional power-ups
| Feature | Effort | Note | 
|---|---|---|
| Supabase Realtime feed | 1 h | live updates | 
| Slack / email weekly digest | 1 h | Edge Function + cron | 
| Stripe checkout | 3 h | copy nextjs-subscription-payments | 
| Multi-list support | 2 h | add list_id FK | 
7 Β· Schedule & owners
| Day | Deliverable | Owner | 
|---|---|---|
| D0 | Repo skeleton + Tailwind baseline | you / Cursor | 
| D1 AM | SQL, Supabase client, email flow | |
| D1 PM | List grid, badges, hide names toggle | |
| D2 AM | README, deploy button, migration test | |
| D2 PM | Edge-case QA, public launch | 
β 2 focussed energy-flow days.
8 Β· Risks & mitigations
| Risk | Mitigation | 
|---|---|
| Buyers skip Google setup | Make auth optional; magic link works OOTB | 
| Preview DB clutter | Supabase auto-deletes after 7 days | 
| Schema changes break users | Tag releases (v1.x), provide upgrade notes | 
9 Β· Next-action checklist
-  
npx create-next-app@latest waitlist-kit --ts --tailwind - Add files per Β§ 1
 -  Paste SQL migration; test (
supabase start) - Wire forms β DB insert
 - Push to GitHub; create Vercel project
 - Verify one-click deploy flow
 - Write README + licence
 
Everything's captured β paste this file into your repo as
PROJECT_PLAN.mdxand start building.