03-projects
Waitlist-app
Scratchpad Waitlist

Scratchpad Waitlist

Waitlist Kit – Scratchpad

A lightweight wait-list template (Next 14 Γ— Tailwind Γ— shadcn/ui Γ— Supabase).

Background & Motivation

Makers often need nothing more than a "coming-soon + join the wait-list" page. SaaS offerings charge monthly, and DIY setups are repetitive. The goal of Waitlist Kit is to ship a one-click-deploy repo that anyone can fork or buy, press Deploy to Vercel, add Supabase keys, tweak content.json, and be live in minutes.

Design pillars

β€’ Zero-config deploy (Vercel Γ— Supabase integration runs SQL migrations automatically).
β€’ Password-less auth by default (email magic-link). Google OAuth can be enabled later by dropping creds into Supabase.
β€’ Public list view (names optionally anonymised) β€” never expose email.
β€’ Styling: Tailwind utility classes + shadcn/ui β€” no custom CSS.
β€’ Low-code audience: minimal edits, clear instructions, MIT-licensed template.

For the full spec & packaging details see project-plan.mdx in the same folder.


Master Task Board (single source of truth)

Section keys

  • βœ… Done: completed tasks verified in main branch.
  • 🟑 In-progress: actively worked on right now.
  • ⏳ Todo: next agreed tasks, scheduled but not started.
  • πŸ—‚οΈ Backlog: parked ideas / blocked items for future review.
  • πŸš€ Next Steps: To release public version

βœ… Done

  • Task 01 Repo skeleton
  • Task 02 Tailwind + shadcn/ui baseline
  • Task 03 Supabase helpers (client / server / middleware)
  • Task 04 Initial SQL migration + RLS (insert / select)
  • Task 05 Landing page (hero, modal trigger, copy from content.json)
  • Task 06 Magic-link auth series complete (A-F inc. middleware) βœ…
  • Task 07A-F Wait-list modal form (fields, action, round-trip smoke-test) βœ…
  • Task 08 Public wait-list list component verified & polished βœ…
  • Task 08a Landing-page static demo section βœ…
  • Task 09b Deploy button β†’ minimal URL shows env-var wizard βœ…
  • Hot-fix Anon-key fallback for public list (2025-05-27)
  • Task 09a Sync Supabase dashboard migrations back into supabase/migrations/ βœ…
  • Task 10b ENV vars + README snippet βœ…
  • Task 10c Supabase SMTP wiring βœ…
  • Task 10d Welcome e-mail component & server action βœ…
  • Task 10e DX / packaging docs + smoke-test βœ…
  • Task 10f Final QA tweaks (welcome email flag, doc patch) βœ…
  • Task 09c Final packaging: README polish, repo badges, MIT licence text, helper scripts βœ…
  • Copy Update Landing-page product name, hero subtitle (Resend), footer credits, removed "Next steps" section βœ…
  • Copy Update Waitlist headers & spacing tweaks: centred header, reduced waitlist top margin (mt-8 β†’ mt-4) and hero bottom padding (py-16 β†’ pt-16 pb-8) βœ…

🟑 In-progress

(empty currently)

⏳ Todo

  • Go through the app step by step for small UX and copy changes to get it ready for No Bad Parts Landing (ignore polish for public version as taking too much time, everything else moves to the backlog).

πŸ—‚οΈ Backlog

  • Profile photos & join reason follow-ups

    • Ranking mechanic requires further QA – current implementation sets negative ranks but list reordering not yet reliable.
    • Investigate promote endpoint ordering bug (see discussion 2025-06-02).
    • Tests & docs outstanding.
    • Status:
    • Task 11 Profile photos & join reason
    • T11A DB + storage foundations (avatar_url, join_reason; avatars bucket) – reuse storage policy from Sunni waitlist-app.
    • T11B Fallback avatar logic (initial letter circle, anon-animal via CDN) – port helper logic from Sunni code. βœ…
    • T11C Waitlist table UI update (Avatar component). βœ…
    • T11D Profile completion flow (photo upload card β†’ reason card). βœ…
    • T11E UX polish & ranking bonus
      • E1 DB migration: add rank INTEGER DEFAULT NULL, index on (rank, created_at). βœ…
      • E2 List query: order by coalesce(rank, 2147483647), then created_at. βœ…
      • E3 Bonus helper (rank bump endpoint) 🟑 implemented – needs QA.
      • E4 Photo & reason flows call the helper βœ…
      • E5 UI tweaks (layout, dynamic copy, highlight) βœ…
      • E6 Tests & docs.
  • Review the original template repo for helper-file ideas to possibly port later (low priority).

  • Walk through the README as a first-time user, note friction points and patch.

πŸš€ Next Steps (release checklist)

  1. Run pnpm lint && pnpm build locally – both should pass without error.
  2. Tag v1.0.0 and push to GitHub.
  3. Publish the template or send to marketplace.
  4. Celebrate πŸ₯³

Ensure Vercel deploy wizard now pulls our template, user to smoke-test.


Decisions & Reference

  • Styling: Tailwind utilities + shadcn/ui components only; no bespoke CSS without warning.
  • Auth: email magic-link only (Supabase auth.signInWithOtp).
  • Privacy: never expose user email publicly; waitlist_public view omits it; anon role only sees that view.
  • DB idempotency: Supabase Cloud (PG 15) lacks CREATE POLICY IF NOT EXISTS; wrap in DO $$ … when needed.

Changelog (chronological history)

2025-05-29

  • Middleware QA passed; Task 06E complete, closing Task-06 series.
  • Modal smoke-test succeeded; Task 07F complete.
  • Public list verified; Task 08 complete.
  • Landing-page static demo added; Task 08a complete.

2025-05-28

  • Planning session: reviewed outstanding items, confirmed Task 08 (public wait-list verification) is next, and outlined step-by-step plan.

2025-05-27

  • End-of-day checkpoint – list API fixed (anon-key fallback); list component implemented; scratchpad reorganised.
  • Hot-fix: fallback to anon key (utils/supabase/admin.ts).
  • Repo sync to GitHub, port 3010 dev server running.

2025-05-26

  • Snapshot commit "Clean Start" – repo + .cursor scaffold.
  • Cloned reference repo signup/ for inspection.
  • Landing page hero built, modal integration planned.
  • Task-06/07 clarifications received (OTP-only auth, modal fields, tracking).
  • Sub-task progress: 06A-B done, 07A-E implemented.

2025-05-31

  • Task 09a initiated – running supabase db diff to capture latest schema into new migration file.
  • Task 09a completed – migration file 004_schema_sync_20250531.sql generated from remote DB.

2025-06-01

  • Hot-fix: Added suppressHydrationWarning to <body> in app/layout.tsx to silence hydration mismatch caused by next-themes body style attribute.

2025-06-02

  • Removed obsolete email-plan.md after Task-10 completion.

2025-06-05

  • Added "Freeze & Duplicate Quick Checklist" doc (pages/02-developer-docs/waitlist-freeze-duplicate.md) to help park the template and fork a personal copy.

Open Questions / Help Needed

(none right now)