Back to Portfolio

Sports Edge

Public ops dashboard with graded predictions, data-quality monitoring, and fail-closed sportsbook price checks. BigQuery warehouse, Cloud Run serving, GitHub Actions pipelines covering NBA, NFL, MLB, PGA, CBB, and World Cup.

PythonBigQueryGCPNext.jsLightGBMSupabase
Sports Edge ops dashboard

Ask the Data

This MVP assistant routes questions to SQL for current results and to project documentation for methodology, limitations, and metric definitions.

Sports Edge Chat

Hybrid assistant: SQL summaries for results + documentation retrieval for methodology.

Ask about Sports Edge results, methodology, or risk. I can combine live SQL stats with portfolio documentation.

Key Performance Indicators

Live ops dashboard

Graded predictions, data-quality page, sportsbook price freshness, and cross-league results live at the standalone ops dashboard. Board health, current candidate counts, and odds availability status update in real-time as the serving pipeline and sportsbook data refresh.

Open the live ops dashboard

System Architecture

Data Ingestion

Daily GitHub Actions refresh league schedules, odds, and curated artifacts into BigQuery.

Feature Engineering

League-specific feature builders compute rolling form, rest, and matchup context for scoring.

Inference

Model outputs are produced in Python, then synced to Supabase for web experiences and API access.

Pipeline Logic

The daily refresh is fully scripted in GitHub Actions and runs every day at 13:00 UTC. This is the production job skeleton that orchestrates data, features, inference, and serving sync:

.github/workflows/daily-refresh.yml
schedule:
  - cron: "0 13 * * *"  # 13:00 UTC daily

steps:
  - python scripts/backfill_nba_raw.py ...
  - python scripts/backfill_nfl_raw.py ...
  - python scripts/build_feature_snapshots.py --league NBA ...
  - python scripts/build_feature_snapshots.py --league NFL ...
  - python -m src.pipeline.refresh_nba --model-version v3
  - python -m src.pipeline.refresh_nfl --model-version v1
  - python -m src.pipeline.refresh_mlb --model-version v3
  - python scripts/sync_bq_to_supabase.py --league NBA --append
  - python scripts/sync_bq_to_supabase.py --league NFL --append
  - python scripts/sync_bq_to_supabase.py --league MLB --append
  - python scripts/sync_odds.py ...

Observed Output Snapshot

These values come from committed artifacts in the repository (not synthetic placeholders).

PGA Simulation Run

Latest meta bundle records 80 players and 50,000 simulations with an as-of date of 2026-04-07.

Serving and Freshness

The web dashboard export includes a generated timestamp and per-player outputs (expected SG, sim win/top-k rates, model heads, and probability estimates).

Automation Contract

Production refresh executes daily at 13:00 UTC and runs NBA, NFL, and probability-only MLB generation before syncing to Supabase.

CBB + PGA Context

CBB and PGA documentation/workflows are integrated in `data-core/docs` and cache artifacts, so project knowledge is broader than only NBA/NFL/MLB.

Season Metrics

Live ATS tracking

High-level ATS record, flat-unit ROI, per-game edges, and league breakdowns live at the standalone ops dashboard. This deep-dive page focuses on architecture and pipeline story.

View live season metrics

Benchmark vs Live Metrics

Deep-dive claims are split into two classes: observed live artifacts (workflow schedules, generated dashboards, cached model outputs) and benchmark targets (for example, CBB log-loss bands in planning docs). Benchmarks are treated as goals/comparators, not as claimed production performance unless tied to a dated output artifact.

Notebook Analyses

Week-2 notebook publishing is being rolled out so every key metric on this page links to full reproducible analysis.