Smoke from the post-game fireworks still hangs over Truist Park. The announcer’s screen? It’s already pulling the recap and next-game preview, no tabs required.
Braves Booth dashboard users—those harried broadcasters—never wanted to choose between RECAP and PREVIEW tabs during idle time. Two commits. 29 files touched. 600 lines rewritten. That’s the tally for a refactor that packs both views onto one screen, tightens the grid, and kills off unreliable AI-generated pitcher narratives.
Here’s the thing: announcers need the full picture instantly. Line score from the just-ended game. AI summary recapping the chaos. Clickable preview card for what’s next. Old setup forced a toggle. New one? Everything stacked, smoothly.
Why Ditch the Tab Bar Entirely?
The GameStateBar used to boss users around with those buttons. Gone now. Idle page renders full recap up top—line score plus AI game summary—with the next-game preview card slotted below. Tap it, expands to pregame details. Backend got a new route pulling future games from MLB’s schedule API, caching with a 300-second TTL. Smart.
And that DRY helper? Gold. PR nixed three scattered pregame builders:
static fromGameState(gameState: GameState): PregameContext { return { homeTeam: gameState.homeTeam, awayTeam: gameState.aweyTeam, // etc. }; }
One function. Duplicate death. (PR review caught it early—don’t sleep on those.)
Three-column grid? Responsive rails now: 280px small, 320px medium, 360px large. Padding? Consistent. GameStateBar sports a gradient, bigger scores, no redundant “Home:” labels—logos say it all.
PanelHeader’s variant prop anchors the center column with a red border. Weather card swallows Wind Impact. Ticker slows to 75-second cycles, slimmer height. Less distraction mid-broadcast.
But.
The refactor snowballed. Pitcher scouting reports triggered a text-size audit. text-[7px] and text-[8px] littered 15 files. Useless for glancing during live calls. Bumped everything to 10px min. Ghost numbers? Visual noise—axed.
Center column hits TweetDeck density: shaved padding, tighter gaps, max data per pixel. That’s the market dynamic here—broadcast dashboards compete on glanceability, not whitespace virtue-signaling.
Is Dashboard Density Worth the Squeeze?
Density sounds risky. Overload announcers, lose the game. But facts: pros scan these during live play. More pixels = more context without clicks. Side columns default styling, center pops red. Weather consolidated. Ticker tamed.
This isn’t hype. It’s iterative polish on a tool that’s already battle-tested. Braves Booth’s edge? They ship. Two commits expose real pain—tabs that annoy, text too small, layouts loose across phones/tablets.
Now, the killer fix: AI pitcher narratives. Old block spat unstructured prose from duplicate LLM logic. Wild variance. Hallucination bait.
Replaced with buildPitcherFacts() in a fresh lib file. 78 lines of pure structure:
export function buildPitcherFacts(pitcher: PitcherStats): string[] { const facts: string[] = []; if (pitcher.era !== undefined) { facts.push(
ERA ${pitcher.era.toFixed(2)}); } // K/9, WHIP, velocity, arsenal… return facts; }
ERA 3.42. 11.2 K/9. WHIP 1.08. Verbatim gold from MLB API. No prose fluff. No AI risks. Stats missing? Empty array, graceful fallback.
Head-to-head matchups? Bigger text. OPS coloring: green over .800, red below. Focal point now.
My take—and it’s sharper than the PR spin—this mirrors Moneyball’s ghost. Sports tech ditched narrative scouting reports for bullet stats two decades ago. Braves Booth’s catching up, but in UI form. Bold prediction: expect copycats in NBA, NFL broadcast tools by 2025. Why? Structured facts scale; prose doesn’t. It’s data dynamics over LLM dreams.
Look, corporate dashboards love AI buzz. This? Dumps it for reliability. That’s authority earned, not bought.
The grid’s rails ensure it works everywhere—from booth tablets to control room walls. Vertical space saved means more panels visible. Ticker’s slower scroll? Lets eyes catch plays without vertigo.
Sub-10px text purge alone justifies the audit. In live sports, 7px ERA is a joke—you squint, you miss the pitch.
Why Does This Matter for Sports Broadcast Devs?
Market’s crowded: ESPN’s setups, MLB’s own tools. Braves Booth differentiates via density + facts. No more “narrative generation” that’s 80% placeholder. Structured arrays? Plug ‘em anywhere—voiceover, chyrons, even AR overlays.
Historical parallel: 1990s graphics were tabbed monstrosities too. FoxTrax puck died for good reason—distraction. Today’s winners cram intel tight, like TradingView charts for stocks.
Braves wins here because they measured: announcer feedback drove tabs’ death. Data over assumption.
PR’s clean—DRY helpers, responsive math. No bloat.
This refactor’s small on lines, huge on flow. Idle state’s unified. Density boosts utility. Facts replace fiction.
Announcers thank them silently between innings.
**
🧬 Related Insights
- Read more: Trysil’s Six Attributes: Zero-Boilerplate Audits and Soft Deletes for Delphi ORMs
- Read more: 7 Prompt Engineering Tricks That Haven’t Died Yet in 2026
Frequently Asked Questions**
What changed in the Braves Booth idle view?
Tabs gone; full recap (line score + AI summary) stacks with expandable next-game preview card. No more choosing.
Why replace AI pitcher narratives with facts?
AI prose varied wildly and risked errors; new buildPitcherFacts() delivers structured MLB API stats like “ERA 3.42”—reliable, readable verbatim.
Does denser dashboard layout hurt usability?
Nope—responsive rails, bigger key text, tamed ticker make it glanceable for live broadcasts, packing more data without overload.