LA.
personal project · playable demo

Rally

A real-time match companion. You follow the game play by play, make predictions for fun, and climb the leaderboard. The first demo runs on a replayable match: France vs Australia, 2019 FIBA World Cup.

The product

No streaming, just the essentials of the game live and something to play with. The idea: turn a passive viewer into an active player, no money, just for fun.

Live scoreboard
score, quarter and clock, derived from the engine continuously
Momentum bar
the flow of the game at a glance, the visual signature
Predictions for fun
who scores next, who wins the quarter
Leaderboard and badges
your progress against bots, and soon against others
Play-by-play
the action feed, in real time

the architecture

Real time, cleanly distributed.

Static front served from the CDN, event-driven AWS backend. At the core is an event-sourced engine: every game action is an event, and the whole state (score, stats, leaderboard) is derived from the sequence of events. The data source is decoupled, so moving from replay to real time never touches the business logic.

Lambda
the brain, applies each event and computes state
API Gateway WebSocket
the real-time pipe to the browser
DynamoDB
the memory: handles, scores, progress
EventBridge Scheduler
the heartbeat that drives the match forward
IAM + CloudWatch
least-privilege permissions, logs and observability
Vercel + Next.js
the static front, built at compile time and hydrated client-side

Engine written in pure TypeScript, tested outside AWS. We'll swap the data source for the WebSocket without rewriting the logic.

V1 playable, already live.

The demo runs on a fixed France vs Australia match, which decouples it from any sports API. Next: a real live data source, player accounts, and more badges. It's a playground to push real-time architecture and AWS in real conditions.