03-projects
Waitlist-app
Waitlist Kit 0 β†’ 1 – Project Plan

Project Plan

Goal
Ship a minimal, reusable wait-list starter that anyone can deploy to Vercel in one click.


0 Β· Prerequisites

ToolVersion / note
Nodeβ‰₯ 18
Package managerpnpm / npm / yarn
Supabase CLI (optional)for local DB
GitHub accounttemplate clone
Vercel accountproduction host
Google Cloud projectonly 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

  1. Landing – reads perks + launch date from content.json.

  2. Call-to-action

    • Show Continue with Google only if NEXT_PUBLIC_GOOGLE env-var exists.
    • Always offer Sign up with email (Supabase magic link).
  3. Insert to Supabase

    supabase
      .from('waitlist_signups')
      .insert({ email, name, message, hidden });
  4. Redirect to /list – fetch with

    select * 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

FilePurpose
README.mdpitch β†’ Deploy to Vercel button β†’ quick-start
Deploy buttonhttps://vercel.com/new/clone?repository-url=https://github.com/YOUR_ORG/waitlist-kit&project-name=waitlist-kit
.env.exampleonly NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY
supabase/config.tomltells integration to run migrations
LICENSEMIT or commercial

5 Β· Buyer onboarding

  1. Click Deploy to Vercel.
  2. Authorise Vercel ⇄ Supabase.
  3. Wait ~60 s for build.
  4. (Optional) Add Google OAuth creds in Supabase β†’ Auth β†’ Providers.
  5. Replace public/logo.svg & tweak content.json.
  6. Push β†’ redeploy β†’ done.

6 Β· Optional power-ups

FeatureEffortNote
Supabase Realtime feed1 hlive updates
Slack / email weekly digest1 hEdge Function + cron
Stripe checkout3 hcopy nextjs-subscription-payments
Multi-list support2 hadd list_id FK

7 Β· Schedule & owners

DayDeliverableOwner
D0Repo skeleton + Tailwind baselineyou / Cursor
D1 AMSQL, Supabase client, email flow
D1 PMList grid, badges, hide names toggle
D2 AMREADME, deploy button, migration test
D2 PMEdge-case QA, public launch

β‰ˆ 2 focussed energy-flow days.


8 Β· Risks & mitigations

RiskMitigation
Buyers skip Google setupMake auth optional; magic link works OOTB
Preview DB clutterSupabase auto-deletes after 7 days
Schema changes break usersTag 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.mdx and start building.