~/work/meridian[ESC] BACK
Meridian
01 — THE PROBLEM
Online board games usually pick one: they look good, or they can't be cheated. Meridian is a full implementation of the Catan base game, with original name and art, that does both. Snake-draft setup, dice production, the robber and discards, building, trades and development cards, played on a painted-miniature 3D board with friends in their own browsers.
02 — ARCHITECTURE
Three packages in a Turborepo. A pure TypeScript rules engine with no rendering or networking dependencies: hex math, zod-validated declarative rulesets, a single intent reducer, and win detection, fully unit-tested without a browser. A zod protocol package for every client-server message. An authoritative Colyseus server that owns all game state: clients send intents, the engine validates them, and each seat receives a redacted snapshot so a player only ever sees what they are allowed to know.
The client is Vite and React Three Fiber: a lobby with four-letter join codes, the 3D board, click-to-build with legality glow, and the HUD for discards, steals and the win screen. The end-to-end suite drives a full three-browser match and captures a performance snapshot.
03 — DECISIONS
Secrets never leave the server. Hidden development cards and hands are redacted per seat before a snapshot is sent, so the spoof-proof guarantee lives in the protocol rather than in client discipline.
Absent players don't stall the table. A caretaker pilot plays empty or disconnected seats, and a reconnecting player can reclaim their seat until the game ends. Server-side bots fill seats for a solo game.
Rules are data. Rulesets are declarative and validated at load, so variants and expansions are content drops rather than engine changes.
Performance is a budget, not a hope. Instanced geometry, a draw-call budget, and a low quality tier that drops the ambient-occlusion pass keep mid-range laptops at a steady frame rate.