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_GOOGLE
env-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.mdx
and start building.