██████╗ ██████╗ ██████╗ ██████╗ ███████╗ ██████╗ ██╗ ██╗███████╗██╗ ██╔══██╗██╔══██╗██╔═══██╗██╔═══██╗██╔════╝ ██╔══██╗██║ ██║██╔════╝██║ ██████╔╝██████╔╝██║ ██║██║ ██║█████╗ ██║ ██║██║ ██║█████╗ ██║ ██╔═══╝ ██╔══██╗██║ ██║██║ ██║██╔══╝ ██║ ██║██║ ██║██╔══╝ ██║ ██║ ██║ ██║╚██████╔╝╚██████╔╝██║███████╗██████╔╝╚██████╔╝███████╗███████╗ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝╚══════╝╚═════╝ ╚═════╝ ╚══════╝╚══════╝
1v1 head-to-head competition-math duels. Glicko-2 ratings. LLM-authored problems. No signup, no tracking — just an HTTP cookie and a fight card.
Solo-vs-AI by default, opportunistic ghost-pairing against real recent attempts at your rating. Feels live, requires zero WebSocket plumbing.
Proper rating model with rating deviation and volatility — not naive Elo. New players move fast, stabilize as the system learns their level.
Claude Haiku 4.5 drafts problems; Claude Sonnet 4.6 validates every one before it goes live. AMC/AIME-style. Bad drafts get discarded silently.
Per-day USD budget guard. When exceeded, the generator pauses and play continues against the existing cache. Aggressive prompt-cache use keeps cost ~$0.01/problem.
One HTTP cookie containing a random UUID — that is the entire identity model. No email, no password, no tracking, no analytics.
Dark theme, monospace, red/amber accent, fight-card matchmaking intro. Built to feel like a 1v1 arena game, not a homework site.
All players start at 1500 / RD 350 / vol 0.06 — Glicko-2 default. The high initial RD means your rating moves quickly during your first few duels.
Single Go binary serves embedded static frontend + JSON API; SQLite holds all state; background workers generate problems via Claude on demand. The whole production stack is one container, one volume, one systemd unit.
| Method | Path | Purpose |
|---|---|---|
| GET | /api/healthz | liveness |
| GET | /api/me | current player: handle, rating, RD, tier, W/L |
| POST | /api/duel/start | issue a duel — problem + opponent + you |
| POST | /api/duel/answer | submit answer — outcome + new rating |
| GET | /api/leaderboard?limit=N | top N players by rating (min 3 duels) |