Daideeonline
Browser based Big2 (Daidee) with built in voice and text chat.

Problem
Big2 (Daidee) is the casual card game most Hong Kong people grew up playing in person. As adults, everyone is busy with their own life, and it gets harder to find a reason to actually catch up. I wanted a version that gives friends an excuse to hop on, talk to each other, relax over a game, and stay connected even when no one has time for a proper meet-up.
Outcome
- Played across multiple friend groups, with sessions that go round after round, which was the actual goal.
- Picked up some organic traction even before launch, a real signal for a small social side project.
- Rounded out with the features that make the game feel complete: sound effects, persistent scoreboard, spectator mode and more.
Stack
PWA (browser-first) · WebRTC (peer-to-peer voice) · coturn (STUN / TURN) · WebSocket signalling · TypeScript
A bit of context on the game
Big2 is a shedding card game for two to four players, widely played across Asia, in the same family as Western games like President or Tichu, or Dizhu in Mandarin Chinese. You take turns playing single cards or combinations (pairs, straights, full houses and so on), and the first player to empty their hand wins the round. It is fast, social, and built for the kind of casual session where you are mostly there to talk.
A small note on how it works
It runs in the browser as a PWA, so desktop, phone and tablet all get the same build with no install. The join flow is intentionally one short link, a name, and a ready button, because the friends I wanted to play with are not going to download an app for a card game.
The interesting architectural choice was splitting the two real-time channels. Voice goes peer-to-peer between players over WebRTC (with a coturn server as a fallback for tricky networks), so audio never touches my server. That keeps latency tight and keeps voice from scaling up the server cost. Game state, on the other hand, runs through a small authoritative WebSocket server. The server is the single source of truth for whose turn it is and what cards are on the table, which means no one can desync or cheat by lying to their peers. Voice is direct, game state is centralised, each on the channel that suits it.


