article
Why Tilehaus uses one TypeScript engine for web and mobile
Authoritative apply() for Tile Rummy table dumps and mahjong claims, reused by a WebSocket server and future iOS/Android clients.
Protocol
Clients send actions. Servers (or the local hook) apply them. Views hide foreign racks. That is the whole multiplayer model.