Collaborative idea board for a small team. Members join with an invite code, email, and pseudonym (passwordless email OTP via Supabase). Vote Execute / Hold, comment, and mark final decisions.
- Next.js (App Router) + TypeScript + Tailwind
- Supabase (Postgres + Auth email OTP)
- Deploy app on Render (see
render.yaml)
- Create a Supabase project.
- In the SQL editor, run
supabase/migrations/001_init.sql. - Auth → Providers → Email: enable email OTP / magic link as needed for your project.
- Auth → URL configuration: add
http://localhost:3000/**and your Render URL to redirect allow-list. - Copy
.env.exampleto.env.localand fill in values:
cp .env.example .env.local| Variable | Where |
|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Supabase project settings |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY |
New publishable key (sb_publishable_...) |
SUPABASE_SECRET_KEY |
New secret key (sb_secret_...) — server only, never expose |
TEAM_INVITE_CODE |
Shared secret you give teammates |
NEXT_PUBLIC_APP_URL |
http://localhost:3000 locally |
- Install and run:
npm install
npm run devOpen http://localhost:3000 → Join with your invite code.
- Push this repo to GitHub.
- Create a Render Web Service from the repo (or use
render.yaml). - Set the same env vars as above; set
NEXT_PUBLIC_APP_URLto your Render URL. - Add the Render URL to Supabase Auth redirect URLs.
- Join: invite code + email + pseudonym → magic link email →
/auth/callbackcreates member profile - Login: email → magic link → same member (works after clearing cookies)
- Board: filter ideas, open drawer, vote, comment, mark decision
In Supabase Authentication → URL configuration, set Site URL to your app URL and add http://localhost:3000/auth/callback (plus your production callback) under Redirect URLs.