USA TODAY's sportsdata.usatoday.com launched in 2021 on a data provider that could not hold. By 2023 RTW was brought in to rebuild the frontend, migrate to a reliable real-time feed, and wire the platform for scale: live scores, NFL Draft tracker, parlay calculator, and betting legality map. Dozens of dynamic pages, all live data, still running on active retainer.
Live scores, standings, and event data across NFL, MLB, NBA, and more.
Dynamic pages and toolsplatform scope
dozens
Score dashboards, draft tracker, parlay calculator, legality map - all live data.
Platform lifespanstill running
3+ yrs
Launched 2021, rebuilt 2023, and maintained on active retainer.
Cross-team reachcollaboration
2 continents
RTW and Gannett teams coordinating across time zones for the engagement.
// 01 - the brief
What the work required.
Platform rebuild / live migrationNew data provider / new frontendMulti-year ongoing engagement
When USA TODAY built sportsdata.usatoday.com in 2021, it ran on a data provider that turned out to be unreliable. Feed inconsistencies, real-time gaps, and scaling limitations were undermining the platform before it had a chance to prove itself. By 2023 the question was no longer "how do we iterate" - it was "how do we rebuild the foundation without losing the surface." That is what RTW was brought in to do.
The scope of the rebuild covered the full frontend stack: Next.js and React with a GraphQL data layer, TypeScript for type-safe feed normalization, and a component architecture designed to support what sportsdata.usatoday.com actually needed to be: not a single dashboard but a multi-tool, multi-sport platform. Live scores. Standings. An NFL Draft tracker. A parlay calculator. A state-by-state betting legality map. Dozens of pages, each with a live data dependency, all built from a shared component system.
The engagement has been active since. RTW has stayed on retainer through the rebuild and feature expansion, working in iterative cycles with close coordination between the frontend team and Gannett's backend and editorial teams across two continents. The platform is live with the NFL Draft page, legality map, parlay calculator, and NBA scores all running production data today.
// 02 - the challenge
Where the platform was failing.
Live platform / unreliable foundationReal-time accuracy at stakeCross-continent delivery
[01]
Migrating data providers without breaking live coverage
The platform was live and users were on it. Every data feed dependency had to be rebuilt against the new provider API contract without triggering visible breakage across existing pages and tools.
Critical [02]
Ensuring real-time accuracy under high-frequency update cycles
Sports data changes constantly: live scores, in-game events, and live odds. Any normalization error or caching miss shows up immediately as a wrong number to a reader who knows the score.
Critical [03]
Building sports domain knowledge into the data layer
NFL scoring, MLB innings, NBA overtime - each sport has structural logic that has to live in the normalization layer, not as an afterthought in the UI.
Critical [04]
Handling large data volumes across concurrent sports and events
Game days bring simultaneous events with high-frequency updates. The GraphQL layer had to handle concurrent feed subscriptions without degrading response time or dropping updates.
Medium [05]
Cross-continent async collaboration at pace
RTW and Gannett teams operate across different time zones. Work had to be structured so blocked tasks never waited for a synchronous answer, with ownership clear at every API boundary.
Medium [06]
Maintaining platform performance through peak event traffic
Super Bowl Sunday, draft night, playoff runs - the frontend had to be engineered for peak traffic from the start, with caching and rendering strategies that did not degrade under national attention.
A live platform with a broken foundation, rebuilt from underneath.
Rebuilding a live sports platform is not the same as building one. The existing surface had users; we could not take it down while replacing what was underneath. The work was structured so the new data layer and component system could be validated in parallel, then swapped in progressively - sport by sport, tool by tool.
A
API-first developmentThe GraphQL contract between the data layer and frontend was defined before any component was written.
B
Component-based frontend architectureEach sports tool was built from a shared component library, keeping dozens of pages manageable for a small team.
C
Continuous testing and validationNormalization logic was tested against real feed formats because wrong scores are visible immediately.
D
Async collaboration across time zonesWork was divided at clear API and component boundaries so RTW and Gannett teams could move in parallel.
PHASE // 01Discovery
Data provider research and API contract design
Mapped existing data dependencies and failure points. Evaluated providers against feed reliability, real-time latency, sports coverage, and TypeScript-friendly API contracts.
Boring tech where possibleSharp tools where needed
Frontend
[01]
Next.jsframework
Reactui
TypeScriptlang
HTML5 / CSS3markup
Responsive layoutsmobile-first
API layer
[02]
GraphQLquery lang
Type-safe queriescontracts
Subscriptionsreal-time
Resolver cachingperformance
Backend
[03]
Node.jsruntime
TypeScript layernormalization
Feed integrationreal-time
Unit testsdata accuracy
Data
[04]
Sports data APIsprimary
Feed normalizationlogic
High-frequency updateslive scores
Multi-sport schemasNFL / MLB / NBA
Design
[05]
Figmadesign tool
Data visualizationcharts
Multi-sport systemdesign sys
Component libraryshared UI
Dev ops
[06]
GitHubversion control
Iterative CI/CDpipeline
Cross-team reviewasync QA
Unit test pipelinefeed validation
// 06 - what we built
Three things worth showing.
Real-time scores + standingsSpecialist tools / draft to parlayMulti-sport / single component library
Feature 01 / 03 - live data at scale
Real-time sports data dashboards, rebuilt on a foundation that holds.
The core of sportsdata.usatoday.com is live scores, standings, and game stats across major sports leagues. The 2023 rebuild replaced an unreliable data provider with a stable real-time feed wired through a TypeScript normalization layer.
Live scores and standings updated in real time across major sports leagues.
SSR routes for season and sport context pages; React live state for in-game score updates.
Shared score tables, stat blocks, and standings grids reused across dozens of pages.
Edge-cached SSR routes engineered to absorb game-day traffic spikes.
LIVE - NFL / NBA / MLB
Feature 02 / 03 - specialist tools
Interactive sports tools, each one wired to live data.
Beyond scores and standings, the platform needed to support specific sports moments and decisions. RTW built the NFL Draft tracker, parlay calculator, and state betting legality map on the same GraphQL contract.
NFL Draft tracker with round-by-round picks, position filters, and team views.
Parlay calculator using live odds and projected payout logic.
State-by-state sports betting legality map with jurisdiction-level rules.
New tools could be composed from existing data and UI contracts.
TOOLS - LIVE DATA
Feature 03 / 03 - data visualization
Dynamic data visualizations, consistent across every sport.
A multi-sport platform needs the same visualization logic to work for NFL records, MLB batting averages, and NBA player stats. The component library made visual consistency and data accuracy part of the same contract.
Standings tables, box scores, and stat comparisons as reusable components.
Layouts scale from dense tables to mobile-first stat cards.
Chart and table components receive typed data from the GraphQL layer.
Consistent visual system across NFL, MLB, NBA, and future sport additions.
DATA - MULTI-SPORT
// 08 - gallery
What it looks like in the wild.
Production screenshotsPublic site + data tools
01 / Live scores dashboard - NFL / NBA / MLB
02 / NFL Draft tracker - round-by-round picks
03 / Parlay calculator - odds + potential payout
04 / State betting legality map - jurisdiction view
05 / Mobile sports data - game-day experience
06 / Team stats depth - standings + player breakdown
// 09 - takeaways
Three things we would do again.
Carry-forwards into future engagements
// 01
Validate your data provider before you build on it.
Every live-data platform lives or dies on what is upstream. Before writing components, provider reliability, feed edge cases, and normalization tests need to be validated against real data samples.
// 02
Sports domain knowledge lives in the normalization layer.
Scoring rules, innings counts, overtime, stat definitions, and feed quirks are not UI details. They belong in tested data logic before they reach components.
// 03
Async collaboration needs explicit ownership.
When teams span continents, ambiguous ownership becomes delay. RTW and Gannett split the work at clear data and frontend boundaries so tasks could move without waiting on shared time zones.
We build data platforms that stay accurate under load.
Multi-year retainers on live sports data, election coverage, and editorial platforms. If your platform needs to hold up when everyone is watching - and the score has to be right - we would like to hear about it.