Watch the full recording (4:39)
One hub, several games
Each game had its own rules, but friends, chat, currency, and player state belonged to the hub. I kept those services separate from the individual games so they stayed available between matches.
My contributions
- Shared services: Built player-state and currency services that games could use to request user data and report match results.
- Backend & social features: Built the NestJS/WebSocket backend, friends, direct messages, lobbies, and match invitations.
- Billiards: Wrote a deterministic simulation that synchronizes the initial shot data rather than continuously sending every ball’s position.
- UI: Built the hub and game screens with UI Toolkit and an MVC pattern.
Billiards networking
With shot-based networking, each client needs to simulate the same result from the same input. I built the billiards simulation around that requirement.
Related code
My MVC Framework has public source for the UI navigation and view system.