Argument Arena - Startup Style
Refine your startup’s fundability by stress-testing ideas with VCs, CFOs, and users on our collaborative, community-driven platform.
YouTube Video
Project Description
Startup Jury AI — Project Documentation
Overview
Startup Jury AI (codename: Argument Arena) is an interactive web application that simulates a startup pitch panel. A founder describes their startup idea, and a panel of 8 AI-powered expert personas debate the idea across up to 4 rounds. After each round the founder can respond to the panel’s questions and challenges. At the end, each panelist scores the idea using their own weighted criteria, and a Consensus Judge delivers a final GO / MAYBE / NO-GO verdict.
Tech Stack
| Layer | Technology |
|---|---|
| Framework | React 18 + Vite |
| Language | TypeScript |
| Styling | Tailwind CSS + shadcn/ui (Radix UI primitives) |
| Routing | React Router DOM v6 |
| Server state | TanStack React Query |
| AI runtime | Supabase Edge Functions (debate-ai) |
| AI assistant | CopilotKit (React Core + UI) |
| Memory | Redis via useRedisMemory hook (with mock fallback) |
| Video clips | Tavus via useTavusClips hook |
| Voice input | ElevenLabs React SDK |
| Forms | React Hook Form + Zod |
| Animation | Framer Motion |
| Backend / DB | Supabase (PostgreSQL + Edge Functions) |
| Testing | Vitest + Testing Library |
Application Flow
Setup → Debating (rounds 1–3) → Final Ratings (round 4) → Judge Verdict
Phases
| Phase | Description |
|---|---|
setup |
Founder enters their startup idea and selects panelists |
debating |
Panelists respond in up to 4 rounds; founder responds after each round |
final-ratings |
Round 4 — each panelist scores the idea with weighted metrics |
judge |
Consensus Judge aggregates scores and delivers a structured verdict |
Debate Rounds
- Round 1 — Each panelist reacts to the raw idea (≤ 100 words each).
- Rounds 2–3 — Panelists react to each other and the founder’s response (≤ 75 / 50 words).
- Round 4 (Final Ratings) — Panelists give a verdict and a scored breakdown using their individual weighted rubrics.
- Judge — A neutral Consensus Judge aggregates all scores into a GO / MAYBE / NO-GO verdict.
After each round (except the last), the founder can type or speak a response to the panel before triggering the next round. An Auto-Debate mode can automatically generate a simulated founder response, allowing the full debate to run without any user input.
AI Personas
All 8 personas are defined in src/data/personas.ts. Each has a unique character, scoring rubric, and system prompt.
| Persona | Role | Scoring Weights |
|---|---|---|
| Alex Ventura | Angel Investor | Grit 40%, Timing 30%, Upside 30% |
| Jordan Reyes | VC Partner | TAM 35%, Moat 30%, Team 20%, Exit 15% |
| Sam Rivera | Power User | Pain 40%, BeatComps 30%, Retention 20%, UX 10% |
| Taylor Kim | COO / Operator | MVPSpec 35%, Resourcing 25%, GTM 25%, Complexity 15% |
| Riley Novak | Skeptical Pessimist | Competition 40%, Regs 30%, Timing 20%, Swans 10% (inverse score) |
| Casey Patel | Financial Analyst | LTV 30%, Growth 25%, Breakeven 25%, SAM 20% |
| Morgan Lee | Industry Insider | WorkflowFit 40%, Gatekeepers 30%, Regs 20%, Disruption 10% |
| Phoenix Quinn | Product Visionary | Roadmap 35%, Narrative 30%, Platform 20%, Wave 15% |
Inverse scoring: Riley Novak (Skeptic) scores the risk level of an idea. A raw score of 10 means extremely risky; the system inverts it (
10 - score) for the final tally.
Verdict Thresholds
| Score | Verdict |
|---|---|
| 8.0 – 10.0 | GO |
| 6.0 – 7.9 | MAYBE |
| 0.0 – 5.9 | NO-GO |
Key Source Files
| File | Purpose |
|---|---|
| src/pages/Index.tsx | Main page — orchestrates all phases and state |
| src/types/debate.ts | Core TypeScript interfaces (Persona, Round, DebateState, etc.) |
| src/data/personas.ts | All 8 persona definitions and system prompts |
| src/lib/ai.ts | AI generation functions (rounds, ratings, judge verdict, auto-response) |
| src/hooks/useDebateAgentState.ts | CopilotKit integration — exposes debate state to the AI agent |
| src/hooks/useRedisMemory.ts | Per-session persona memory via Redis (mock fallback available) |
| src/hooks/useTavusClips.ts | Tavus video clip generation per round |
| src/integrations/supabase/client.ts | Supabase client configuration |
| src/App.tsx | App root — CopilotKit, QueryClient, Router setup |
Key Components
| Component | Purpose |
|---|---|
| src/components/DebateTable.tsx | Displays panelist responses for the current round |
| src/components/RoundTimeline.tsx | Round navigation bar and progress indicator |
| src/components/UserResponsePanel.tsx | Founder text response input between rounds |
| src/components/VoiceInputButton.tsx | ElevenLabs voice-to-text input for the founder |
| src/components/RatingsOverview.tsx | Final-round scores and metric breakdowns |
| src/components/JudgeVerdictCard.tsx | Displays the Consensus Judge’s GO/MAYBE/NO-GO verdict |
| src/components/HostVideoPlayer.tsx | Tavus-generated video clip player per round |
Getting Started
Prerequisites
- Node.js ≥ 18
- A Supabase project with:
-
debate-aiEdge Function deployed -
copilotkitEdge Function deployed - Environment variables set
-
Environment Variables
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
Install and Run
npm install
npm run dev
Other Scripts
npm run build # Production build
npm run preview # Preview production build
npm run lint # ESLint
npm test # Run tests (Vitest)
npm run test:watch # Watch mode tests
AI Architecture
All AI calls flow through src/lib/ai.ts via the callCompletion helper, which invokes the debate-ai Supabase Edge Function. That function forwards prompts to a Claude model and returns the completion.
Prompt Strategy
- Each persona has a distinct
systemPromptdefining their character, priorities, and scoring rubric. - Industry keywords in the idea (e.g., “fintech”, “health”, “saas”) are auto-detected and injected into prompts.
- Word limits shrink each round (100 → 75 → 50 words) to keep debates focused.
- Memory: each persona accumulates notes across rounds via Redis, enabling continuity.
CopilotKit Integration
The debate state is published to CopilotKit via useDebateAgentState, allowing a CopilotKit agent to observe the live debate and emit AgUI events (e.g., user_response). The runtime endpoint is the copilotkit Supabase Edge Function.