- Camera feeds
- Dealer, cards, scanner, every player
- Capture
- Custom Raspberry Pi rigs
- Event bus
- Kafka on AWS MSK
A live poker platform streaming a physical card table to every seat in the game — dealer, cards and card scanner from custom hardware at the table, plus every player’s webcam to every other player, simultaneously.
01 The problem
Online poker loses the thing that makes poker poker: you cannot read anyone. The premise here was to put remote players at an actual table with an actual dealer and actual cards — which means every player has to see the table, and every player has to see every other player, live. The constraint is unforgiving. Video is heavy, latency is visible, and a game of poker is a shared clock: if one seat lags, the hand is wrong for everyone.
02 Hardware at the table
The table itself ran on custom Raspberry Pi devices streaming the dealer camera, the card cameras and the card scanner up to the cloud. Getting a physical card table to behave like a reliable data source — several feeds, consistently, from commodity hardware in a room nobody owns — is most of the problem that never appears in a system diagram.
03 The streaming backend
Go services handled the streaming backend, fanning the table feeds out to every seat and each player’s webcam out to every other player at the table. Go was the right call here specifically because this is a concurrency problem: many simultaneous long-lived streams, per-table fan-out, and no tolerance for a slow consumer stalling the others.
04 Events and deployment
Game events propagated over Kafka using AWS MSK, keeping the state of a hand consistent across the players watching it. The player-facing application was Angular, and the whole platform ran on AWS EKS.
- Go streaming services for multi-camera fan-out
- Kafka on AWS MSK for event propagation
- Angular player-facing application
- Raspberry Pi capture devices at the table
- Deployed on AWS EKS