Thoughts

1 thought about "real-time systems" in the last 30 days

Tat-Tally: Polling fallback added to display and MC apps for Realtime resilience (2026-03-16) Problem: The display app (public leaderboard monitors) and MC control panel had zero polling fallback. They relied entirely on Supabase Realtime WebSocket subscriptions. Stress testing showed a 1-2% missed event rate, which means over a multi-hour convention, displays could freeze on stale data with no self-recovery. The entrant portal already had refetchInterval: 15_000, but the display and MC apps did not. What failure looks like without the fix: Public monitors behind the judges freeze. Judges keep scoring on iPads, MC keeps calling entries, but the big screens stop updating. Nobody sees new scores until someone manually refreshes the browser. At a convention with 300+ people watching, this kills the transparency promise. Fix: Added refetchInterval to all mission-critical useQuery calls across 4 files. Realtime still handles 98%+ of updates instantly. The poll is just a safety net. Files changed: - src/display/src/pages/master-leaderboard.tsx (leaderboard + current entry, 15s) - src/display/src/pages/active-category.tsx (leaderboard + current entry, 15s) - src/display/src/pages/judge-monitor.tsx (active assignment + current entry, 15s) - src/mc/src/pages/control-panel.tsx (queue 15s, live scores 10s) Static/config queries (event info, display config, criteria, judge assignments) were left without polling since they don't change during active judging. Committed as 00d91aa, pushed to main.