An app where stream viewers can propose and vote for projects/features that will be developed live in upcoming seasons and episodes.
Development:
- Next.js
- Supabase (database + vector search + auth)
Deployment:
- Cloudflare Workers + OpenNext
- Public: Dashboard, Search, Browse Topics
- Authenticated: Propose, Vote
- Admin: Create/Edit Topics
All entities have: createdAt, updatedAt, archivedAt
- Supabase Auth model
role:'admin'ornull
idtitlestatus:open|closed|archiveduserId(creator, FK → Users)
idtitletopicId(FK → Topics)userId(creator, FK → Users)
idproposalId(FK → Proposals)userId(FK → Users)- Unique constraint: one vote per user per proposal
- View dashboard with active topics
- Search topics and proposals (vector search)
- Browse individual topic pages with proposals
- Sign up/login via Email or Twitch
- Browse topics → Select topic → Create proposal
- Before submitting: see similar proposals (vector search, threshold ~0.8 similarity)
- If similar exists → can vote on existing instead
- Vote on any proposal (one vote per proposal)
- Delete own proposals (soft delete via
archivedAt) - Remove own votes
- All authenticated user capabilities
- Create new topics
- Edit topic titles
- Change topic status (open/closed/archived)
- Archive any proposal (moderation)
- Scope: Public
- Shows active topics with vote counts
- Scope: Public
- Vector search across Topics and Proposals tables
- Scope: Public
- View topic details and all proposals with vote counts
- Scope: Authenticated
- Duplicate check: show similar proposals (vector similarity ≥ 0.8)
- User can proceed to vote on existing or create new
- Scope: Authenticated
- One vote per user per proposal
- Can remove own vote
- Scope: Admin only
- Captcha: On proposal creation (e.g., Cloudflare Turnstile - free, privacy-friendly)
- Rate limits:
- Proposals: max 5 per user per day
- Votes: max 50 per user per day
- Account age: Optional - require account to be 1+ hour old before proposing
- Email (magic link or password)
- Twitch OAuth