Live from the server
- Registered players6
- Matches completed1
Just launched — these numbers are small and real, read live from the game's own database. They'll grow, or they won't; either way this page won't dress them up.
La Cochina
Real-time 2v2 Venezuelan domino — a live game server you can sit down at right now.
A real-time multiplayer domino game, the Venezuelan way: 28 double-six tiles, no boneyard, counterclockwise play, and the winning pair scores the points of all four hands. Private tables by code, public matchmaking, elimination tournaments, and three levels of bots — running in production on a Colyseus game server with accounts, OpenSkill ratings, and a results pipeline that never double-counts a match.
Who used it
Just launched in 2026 and open to real players — accounts, matchmaking, and tournaments all live. The counts beside this are read straight from the game's own database; nothing seeded, nothing projected.
The problem
Venezuelan domino is a partner game with real rules — 28 tiles, no draws from a boneyard, counterclockwise play, and a scoring convention where the winning pair takes the points of all four hands. Putting that online for real pairs means solving the actual hard problems of networked games: a server that owns the truth while clients only send intentions, hidden information that must stay hidden at the protocol level, games that survive a server restart mid-hand, and results that post exactly once into ratings and tournaments.
Built with
What went into this
- Anticheat by construction, not by detection — server-side state filtering keeps another player's hand out of your client's payload entirely, and a test inspects the actual wire bytes to prove it
- A pure, deterministic rules engine with an injected RNG — one seed replays an entire game move for move; 1,102 lines of TypeScript with zero runtime dependencies
- A Redis snapshot after every move plus room rehydration on restart, so a server deploy mid-game puts every table back exactly where it was
- An idempotent results pipeline — OpenSkill ratings (Plackett-Luce, adapted to 2v2), lifetime stats, and achievements post exactly once per match, no matter how many times a result is delivered
- A real bug caught by adversarial review before it ever deployed: a tournament game rehydrated after a restart lost its tournament identity, and the orchestrator would have advanced the wrong team into a rated bracket
How it fits together
The engine is a pure, deterministic core — injected RNG, a seed replays a whole game — with the Colyseus server as the only authority: clients send intentions, the server validates them against the engine, and state filtering guarantees a client is never even sent the tiles it shouldn't see. Every move snapshots to Redis so a Fly.io restart rehydrates every live room; finished games flow through an idempotent results pipeline into Postgres, where OpenSkill ratings, lifetime stats, achievements, and tournament brackets each post exactly once. The protocol versions additively, server-first, so an old client keeps working against a new server mid-deploy. All of it holds under 1,414 tests across 96 files, and the whole thing runs on about $2–3 a month.
The real production app, not a sandbox — create an account, open a table by code or queue for matchmaking; the server you'd be playing against is the same one behind these numbers.
No repo link on this one, and that's a decision rather than an oversight: La Cochina is a live, competitive game with real accounts and a rating ladder, and its code stays private while it runs. The proof here isn't source you can read — it's a server you can play against right now, with live counts pulled straight from its database.