Battle Royale for Coders β Tetris 99 meets programming in a fast-paced multiplayer coding game.
Leet 99 is a real-time multiplayer battle royale game where players race to solve bite-sized tech interview-style problems. Unsolved problems stack up β if your stack overflows, you're eliminated. Solve problems to score points and attack your opponents with devious debuffs. Last coder standing wins!
- 2-99 Players β Join rooms with friends or compete against bots
- Real-time Combat β Attacks, debuffs, and garbage problems keep everyone on edge
- Stack Overflow Mechanic β Problems pile up; overflow = elimination
- Tetris 99-style Targeting β Choose your targeting mode: Random, Attackers, Top Score, or Near Death
- Function-only Python Problems β Quick to read, fast to solve (1-5 minutes each)
Read problem β Write code β Run (test) β Submit β Attack! β Next problem
- Start with 1 active problem + 2 queued problems in your stack
- Solve problems to earn points and automatically attack your target
- New problems arrive periodically β they push onto your stack
- Stack overflow? You're eliminated!
- Last player standing wins (or highest score when time expires)
| Difficulty | Points |
|---|---|
| Easy | +5 |
| Medium | +10 |
| Hard | +20 |
| Garbage | 0 |
When you solve a problem, you attack your current target:
| Attack | Effect | Trigger |
|---|---|---|
| ποΈ Garbage Drop | Add 1 garbage problem to target's stack | Solving Easy |
| π‘ Flashbang | Force light mode for 25s | Solving Medium |
| β¨οΈ Vim Lock | Force Vim mode for 12s | Solving Medium |
| π« DDOS | Disable "Run" for 12s | Solving Hard |
| πΎ Memory Leak | Double incoming problem rate for 30s | 3-solve streak |
Spend your hard-earned points to gain an edge:
| Item | Cost | Effect |
|---|---|---|
| Clear Debuff | 10 | Remove active debuff |
| Memory Defrag | 10 | Remove all garbage from stack |
| Skip Problem | 5 | Discard current problem (can go negative) |
| Rate Limiter | 10 | Halve incoming problem rate for 30s |
| Hint | 5 | Reveal a hint for current problem |
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β Browser ββββββΆβ Next.js ββββββΆβ Supabase β
β (Client) β β (Vercel) β β (Postgres) β
ββββββββ¬βββββββ βββββββββββββββ βββββββββββββββ
β
β WebSocket
βΌ
βββββββββββββββ βββββββββββββββ
β PartyKit ββββββΆβ Judge0 CE β
β (Room) β β (RapidAPI) β
βββββββββββββββ βββββββββββββββ
| Layer | Technology |
|---|---|
| Frontend | Next.js, Tailwind CSS, daisyUI, Lucide Icons |
| Editor | Monaco + monaco-vim |
| Realtime | PartyKit (WebSocket rooms) |
| Persistence | Supabase (PostgreSQL) |
| Code Execution | Judge0 CE via RapidAPI |
| Deploy | Vercel + PartyKit Cloud |
leet-99/
βββ apps/
β βββ web/ # Next.js frontend application
βββ packages/
β βββ contracts/ # Shared TypeScript types & Zod schemas
β βββ realtime/ # PartyKit room logic (game engine)
β βββ supabase/ # Database queries & types
β βββ ui/ # Shared React components
βββ docs/ # Design documents & specs
βββ supabase/ # Database migrations
"Riced Workstation" Aesthetic β Inspired by r/unixporn tiling WM setups:
- Dark theme (harsh white "Flashbang" for the debuff π)
- Sharp edges, minimal border-radius
- Dense but readable information layout
- IBM Plex fonts (Sans + Mono)
- Subtle noise grain texture
- β Purple gradients on white (AI-generated startup slop)
- β Rounded-everything soft UI
- β Default SaaS fonts
- β Empty decorative space
| Key | Action |
|---|---|
Alt+R |
Run code (public tests) |
Alt+S |
Submit code |
Alt+B |
Open/close shop |
Alt+T |
Targeting mode menu |
Alt+V |
Toggle Vim mode |
1-5 |
Quick-buy shop items |
Esc |
Close menus |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/rooms |
Create a new room |
POST |
/api/rooms/:roomId/join |
Join an existing room |
GET |
/api/rooms/:roomId |
Get room summary |
GET |
/api/matches/:matchId |
Get match results |
GET |
/api/leaderboard |
Get global leaderboard |
Client β Server:
JOIN_ROOMβ Authenticate and joinSET_TARGET_MODEβ Change targeting modeRUN_CODEβ Run public testsSUBMIT_CODEβ Submit for scoringSPEND_POINTSβ Purchase shop itemSPECTATE_PLAYERβ Watch another player
Server β Client:
ROOM_SNAPSHOTβ Full state syncPLAYER_UPDATEβ Player state changeJUDGE_RESULTβ Code execution resultATTACK_RECEIVEDβ Incoming attackMATCH_ENDβ Game over + standings
- Node.js 20+
- pnpm 8+
- RapidAPI account (for Judge0)
- Supabase project
- PartyKit account
Copy .env.example to .env.local and configure:
# PartyKit
NEXT_PUBLIC_PARTYKIT_HOST=your-project.partykit.dev
# Supabase
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-key
# Judge0 (RapidAPI)
RAPIDAPI_KEY=your-rapidapi-key
RAPIDAPI_HOST=judge0-ce.p.rapidapi.com# Install dependencies
pnpm install
# Start development servers
pnpm dev# Deploy PartyKit
npx partykit deploy
# Deploy to Vercel
vercel deploySim bots keep lobbies lively for demos:
- Solve Time: Easy 30-60s, Medium 45-90s, Hard 60-120s
- Failure Rate: ~20% of submissions fail
- Targeting: Always random
- Shop: Never buys items
Bots participate fully in scoring, stacks, and elimination.
| Setting | Default | Options |
|---|---|---|
| Match Duration | 10 min | 6-10 minutes |
| Player Cap | 8 | 2-99 |
| Stack Limit | 10 | β |
| Difficulty | Moderate | Beginner / Moderate / Competitive |
| Attack Intensity | Low | Low / High (1.3x debuff duration) |
- Design Document β Full game design spec
- Frontend UI Spec β UI/UX guidelines and layouts
- Backend API Spec β Complete API reference
- β Players can create/join rooms via URL
- β 2+ players see each other in minimap with synced game state
- β
Problems push onto stack;
RUN_CODEtests public,SUBMIT_CODEtests all - β Correct submissions award points, advance problems, send attacks
- β Stack overflow eliminates players
- β Winner determined: last alive or highest score
- β Bots fill lobbies for demos
- β Deployed publicly
May the best coder survive! π§βπ»βοΈ