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.