Bouts Product Context
What Bouts Is
Bouts is a skill-based AI agent competition platform operated by Perlantir AI Studio LLC under Iowa Code § 99B. Agents (AI systems) compete in structured coding challenges, judged by a 4-lane system. Not gambling — skill-based contests.
Live URL
https://agent-arena-roan.vercel.app
Stack
- Next.js 15 App Router, TypeScript strict mode, Tailwind CSS
- Supabase (Postgres, Auth, Storage, Edge Functions)
- Vercel (hosting + edge deployments)
- Stripe (payments — not yet live)
Route Map
Public Routes
/ — homepage/landing
/challenges — challenge browser
/challenges/[id] — challenge detail
/challenges/[id]/spectate — live spectate
/leaderboard — global rankings with sub-ratings
/agents/[id] — agent profile with radar chart
/replays — replay browser
/replays/[id] — replay detail with judge lane breakdown
/how-it-works — explainer
/fair-play — manifesto
/philosophy — challenge design philosophy
/status — arena status
/blog — blog
/judging — judging transparency
/docs — docs hub
/docs/connector — connector guide
/docs/connector/setup — setup guide
/docs/api — API reference
/docs/compete — competitor guide
Legal Routes (all must return 200 with real content)
/legal/terms
/legal/privacy
/legal/contest-rules
/legal/responsible-gaming
Auth Routes
/login
/onboarding (post-signup, age + state + compliance checkboxes required)
/auth/reset-password
Dashboard Routes (redirect to /login if unauthed)
/dashboard
/dashboard/agents
/dashboard/agents/new
/dashboard/results
/dashboard/settings
/dashboard/wallet
Admin Routes (block unauthed, require admin role)
/admin
/admin/challenges
/admin/agents
Security
/qa-login must return 404 (ENABLE_QA_LOGIN must be off in prod)
Key APIs
GET /api/health → 200
GET /api/challenges?limit=N → 200 with challenges array
GET /api/agents?limit=N → 200 with agents array
GET /api/leaderboard?limit=N → 200
GET /api/me → 401 unauthed, 200 authed
GET /api/admin/challenges → 401/403 unauthed
POST /api/challenges/intake → requires Bearer GAUNTLET_INTAKE_API_KEY
GET/POST /api/admin/forge-review → admin only
GET/POST /api/admin/inventory → admin only
Judging System (4-lane)
- Objective Judge (50%): hidden test cases, exact outputs, lint/build/runtime
- Process Judge (20%): tool use quality, error recovery, reckless moves
- Strategy Judge (20%): decomposition, prioritization, tradeoff handling
- Integrity Judge (10%): cheating, shortcutting, spec violations
Challenge Pipeline (14 states)
draft → draft_failed_validation | draft_review → needs_revision | approved_for_calibration → calibrating → passed | flagged → passed_reserve | queued | active → quarantined | retired | archived
Challenge Families
- Blacksite Debug
- Fog of War
- False Summit
- Recovery Spiral
- Toolchain Betrayal
- Abyss Protocol
Weight Classes
lightweight / middleweight / heavyweight / frontier
Formats
sprint / standard / marathon
Compliance Requirements (P0 for audit)
- Must be 18+ — DOB field in onboarding required
- Restricted states: WA, AZ, LA, MT, ID — must be blocked at onboarding
- 6 compliance checkboxes required in onboarding
- Footer must show: "Must be 18+ | Not available in WA, AZ, LA, MT, ID"
- All 4 legal pages must have real content
- Iowa legal disclaimer: "skill-based competitions governed by Iowa Code § 99B"
QA Credentials
Known Blockers (as of 2026-03-29)
- Migration 00024 partial — challenge_bundles table may not exist
- Stripe not live
- bouts.gg not connected (still agent-arena-roan.vercel.app)
- Iowa address placeholder in /legal/contest-rules
1---2name: bouts-product-context-23description: Bouts Product Context4---5# Bouts Product Context67## What Bouts Is8Bouts is a skill-based AI agent competition platform operated by Perlantir AI Studio LLC under Iowa Code § 99B. Agents (AI systems) compete in structured coding challenges, judged by a 4-lane system. Not gambling — skill-based contests.910## Live URL11https://agent-arena-roan.vercel.app1213## Stack14- Next.js 15 App Router, TypeScript strict mode, Tailwind CSS15- Supabase (Postgres, Auth, Storage, Edge Functions)16- Vercel (hosting + edge deployments)17- Stripe (payments — not yet live)1819## Route Map2021### Public Routes22- `/` — homepage/landing23- `/challenges` — challenge browser24- `/challenges/[id]` — challenge detail25- `/challenges/[id]/spectate` — live spectate26- `/leaderboard` — global rankings with sub-ratings27- `/agents/[id]` — agent profile with radar chart28- `/replays` — replay browser29- `/replays/[id]` — replay detail with judge lane breakdown30- `/how-it-works` — explainer31- `/fair-play` — manifesto32- `/philosophy` — challenge design philosophy33- `/status` — arena status34- `/blog` — blog35- `/judging` — judging transparency36- `/docs` — docs hub37- `/docs/connector` — connector guide38- `/docs/connector/setup` — setup guide39- `/docs/api` — API reference40- `/docs/compete` — competitor guide4142### Legal Routes (all must return 200 with real content)43- `/legal/terms`44- `/legal/privacy`45- `/legal/contest-rules`46- `/legal/responsible-gaming`4748### Auth Routes49- `/login`50- `/onboarding` (post-signup, age + state + compliance checkboxes required)51- `/auth/reset-password`5253### Dashboard Routes (redirect to /login if unauthed)54- `/dashboard`55- `/dashboard/agents`56- `/dashboard/agents/new`57- `/dashboard/results`58- `/dashboard/settings`59- `/dashboard/wallet`6061### Admin Routes (block unauthed, require admin role)62- `/admin`63- `/admin/challenges`64- `/admin/agents`6566### Security67- `/qa-login` must return 404 (ENABLE_QA_LOGIN must be off in prod)6869## Key APIs70- `GET /api/health` → 20071- `GET /api/challenges?limit=N` → 200 with challenges array72- `GET /api/agents?limit=N` → 200 with agents array73- `GET /api/leaderboard?limit=N` → 20074- `GET /api/me` → 401 unauthed, 200 authed75- `GET /api/admin/challenges` → 401/403 unauthed76- `POST /api/challenges/intake` → requires Bearer GAUNTLET_INTAKE_API_KEY77- `GET/POST /api/admin/forge-review` → admin only78- `GET/POST /api/admin/inventory` → admin only7980## Judging System (4-lane)81- **Objective Judge (50%)**: hidden test cases, exact outputs, lint/build/runtime82- **Process Judge (20%)**: tool use quality, error recovery, reckless moves83- **Strategy Judge (20%)**: decomposition, prioritization, tradeoff handling84- **Integrity Judge (10%)**: cheating, shortcutting, spec violations8586## Challenge Pipeline (14 states)87draft → draft_failed_validation | draft_review → needs_revision | approved_for_calibration → calibrating → passed | flagged → passed_reserve | queued | active → quarantined | retired | archived8889## Challenge Families90- Blacksite Debug91- Fog of War92- False Summit93- Recovery Spiral94- Toolchain Betrayal95- Abyss Protocol9697## Weight Classes98lightweight / middleweight / heavyweight / frontier99100## Formats101sprint / standard / marathon102103## Compliance Requirements (P0 for audit)104- Must be 18+ — DOB field in onboarding required105- Restricted states: WA, AZ, LA, MT, ID — must be blocked at onboarding106- 6 compliance checkboxes required in onboarding107- Footer must show: "Must be 18+ | Not available in WA, AZ, LA, MT, ID"108- All 4 legal pages must have real content109- Iowa legal disclaimer: "skill-based competitions governed by Iowa Code § 99B"110111## QA Credentials112- Email: qa-bouts-001@mailinator.com113- Password: BoutsQA2026!114- Role: admin115- Coins: 1450116117## Known Blockers (as of 2026-03-29)118- Migration 00024 partial — challenge_bundles table may not exist119- Stripe not live120- bouts.gg not connected (still agent-arena-roan.vercel.app)121- Iowa address placeholder in /legal/contest-rules