NBA Intelligence Platform
Matchup analysis was rebuilt from scratch every week, on data that had already been collected and then thrown away.

Problem
Matchup analysis was rebuilt from scratch every week, on data that had already been collected and then thrown away.
Commercial sports-data providers exist, but licensing box scores, play-by-play and odds at that depth gets expensive fast — and still wouldn't cover the mix of sports that needed watching.
Approach
A season-long pipeline over 6,000+ games from 2019 to 2025: ingestion, feature engineering, scheduled training, and a front end that surfaces matchup-level output before tip-off. Odds collection runs beside it across MLB, NBA, NFL and golf.
The NBA database is the deepest piece — full box scores and player-level statistics for every regular-season and playoff game across six seasons, with gap detection and incremental sync so a missed night gets backfilled instead of silently dropped. The same infrastructure pattern extends to PGA Tour, tennis and LPGA/European Tour collection, each normalized into a shared schema so the analytics layer doesn't need to know which sport a row came from.
Result
One archive the whole system reads from, with the morning view already current and every number traceable to the game it came from.
Live tournament and game feeds update on a short interval during play, historical data refreshes daily, and every dataset passes through the same validation and deduplication layer — holding 70%+ accuracy on the predictive models built on top of it, drawing from 500K+ data points a day across the connected feeds.
Stack
Python and Airflow schedule the ingestion and training runs; Postgres is the archive everything reads from; React powers the front end that surfaces matchup output before tip-off; and odds APIs across MLB, NBA, NFL and golf feed the betting-facing side of the platform.