A wall dashboard built for the 2026 World Cup. The main panel shows live match scores with real-time updates sourced from a hybrid ESPN data overlay, including a stoppage-aware game clock that ticks locally in the browser and re-anchors on each server poll so drift never accumulates. A timeline bar beneath the scoreline marks the half-time and full-time positions with an open-ended stoppage zone for injury time.
The second panel is an LIRR transit tracker: per-station summary cards pair with a subway-style dot-and-line stop diagram that color-codes branches and renders departure countdowns in real time. A compact local weather radar strip rounds out the screen. All three panels update continuously without a page reload.
The architecture is deliberately thin on the client side. A server-side Redis updater polls LAN services - a FastAPI transit aggregator, a NEXRAD radar pipeline, and the ESPN overlay - and writes normalized JSON into Redis on a short interval. The React frontend is a pure read-through to that cache, which keeps browser logic simple and latency predictable even when individual upstream sources are slow.
Architecture
The dashboard runs as a set of Docker Swarm services behind Traefik. A Python redis_updater worker polls each data source on its own schedule and writes to Redis with a short TTL. The Next.js / React frontend fetches from a thin FastAPI gateway that reads Redis and shapes responses, never touching upstream APIs directly. A Playwright-driven smoke suite gates deploys by asserting that live score data appears within the expected refresh window.