Back to Portfolio

Sports Edge

A production sports modeling pipeline with BigQuery as source-of-truth, Supabase serving, and documented outputs across NBA, NFL, MLB, PGA, and CBB workflows.

PythonBigQueryGCPNext.jsLightGBMSupabase
Loading model edges…

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

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.

Live Results

The first Week-2 result path is live: graded games and latest model predictions are joined from Supabase to compute ATS record and flat-unit ROI.

Loading NBA ATS results...

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.