Party Game
Chowka Bhara
A classic South Indian race game, rebuilt as a real-time multiplayer party web game. No install, phones only, 15–30 minutes.
Create a lobby, share a short code, and race four pawns to the center. Throw cowrie shells, capture rivals, stack on safe houses, and chase bonus rolls with friends on the couch.
Project Overview
Chowka Bhara is a traditional cross-and-circle race game from South India, related in spirit to Pachisi and Ludo, but with its own shell dice, spiral paths, and safe-house stacking. This project brings that living-room energy to the browser: one person starts a room, friends join on their phones with a code, and everyone plays from the couch.
I built it end-to-end as a solo full-stack game: lobby flow, authoritative multiplayer rooms, dual board sizes, phone-first UI, animations, and in-browser sound, so a party session stays fair, snappy, and finishable in one sitting.
Look & Feel
Wood-toned board, ring zones, safe-house icons, shell dice, and soft party UI.
How to Play
Built for parties, not spreadsheets. Get in fast, throw shells, talk trash, finish the race.
-
Create a lobby
One player opens the game and creates a room. They set party size (2–4) and board mode: classic 7×7 for a full race, or quicker 5×5 for shorter nights.
-
Share the code
Everyone else joins on their phone with a 4-letter room code. Pick a unique name, color, and pawn shape, then ready up. When the table is set, the host starts.
-
Throw & move
On your turn, throw four cowrie shells, then tap a legal pawn to move that many steps along your path toward the center.
-
Capture & chase home
Land on a rival (off a safe house) to send them home and earn another throw. First player to get all four pawns into the center wins.
Rules & Mechanics
Same rules as the tabletop classic, encoded so every phone sees the same fair state.
Cowrie shells
Throw 4 shells. Mouth-up count is your roll. Valid rolls: 1, 2, 3, 4. All mouths down counts as 8: the lucky big move.
Movement
Move one legal pawn that many steps along your color’s spiral path. Illegal targets stay dimmed; legal ones highlight so you can tap and go.
Captures & bonuses
Land on an opponent not on a safe house → they return home, and you get a bonus roll. Rolling a 4 or 8 also grants another throw.
Safe houses
Certain cells are safe. Pieces can stack there, and captures are forbidden: a temporary truce on the track.
Finishing
You need an exact roll to land in the center. First player to bring all four pawns home wins the match.
Keep the table moving
Idle players don’t stall the night. Auto-roll, auto-move, and skip timeouts keep turns flowing. Pause, rematch, and reconnect are built in.
Board modes
Pick the race length when you create the lobby. Rules stay the same; only the track shrinks.
- 7×7 Classic: longer spiral (49 steps): outer ring → middle → inner → center. The full party race.
- 5×5 Classic: shorter spiral (25 steps): outer → inner → center. Faster sessions for quick rematches.
- Four seats: Red, Blue, Green, Yellow; each path is the same spiral rotated 90°, so captures meet on absolute board cells.
- Four pawns each: cosmetic shapes (circle, square, star, triangle) on top of seat color.
What Makes a Session Fun
Designed like a Jackbox-style party night: low friction to start, high energy once shells fly.
- Lobby in seconds: 4-letter codes skip ambiguous letters (no I/O), unique names per room, ready-up, host start.
- Phone-first board: throw shells, see legal moves, watch pawns travel step-by-step, hear capture and victory cues.
- In-game rules screen: mode-aware path diagram so new players learn without leaving the couch.
- Party resilience: pause/resume, rematch, reconnect grace period, and AFK timeouts so a dropped phone doesn’t end the night.
- Mute + synthesized SFX: roll, move, capture, and win sounds generated in the browser (no audio asset pack).
- Touch-friendly mobile UI: safe-area padding, no accidental zoom, big hit targets for shell throws and pawn picks.
What I Built
Solo full-stack: game design, shared rules package, realtime server, and mobile web client, shipped as a playable online party game.
Technical stack
- TypeScript throughout: shared board math, Zod schemas for every WebSocket message and room view.
- Astro 5 + React 19 islands with Tailwind: landing/lobby and play screens, mobile-first.
- Cloudflare Workers + Durable Objects: one authoritative room per code, SQLite-backed persistence, WebSocket fan-out.
- pnpm + Turborepo monorepo: a shared rules package imported by both web and Worker so clients never fork legality.
- Vercel frontend + Worker deploy with CORS allowlist for production origins.
Systems highlights
- Server-authoritative multiplayer: phones send intents like throws and moves; the room decides legality and broadcasts state + events.
- Phase machine: lobby → roll → move → resolution → bonus or next turn → endgame, with alarms so the table never soft-locks.
- Board geometry as data: one Red spiral, rotated for four seats; dual 7×7 / 5×5 configs without forking game logic.
- Animation ↔ turn timing: pawn travel duration synced to the server resolution window so the UI doesn’t freeze mid-path.
- Reconnect & pause: persistent player identity in the browser, grace period on disconnect, pause/resume mid-match.
Why I Made It
I wanted the energy of a physical Chowka Bhara night without needing a board in the room: something friends can open on their phones and actually finish in one sitting.
The engineering (authoritative rooms, shared rules, reconnect) exists so the party stays fair and smooth. The point of the project is still the table: shells, captures, and who gets home first.