← All Projects

GameDay Analytics

Development Roadmap — Alpha

324

Total

0

Active

0

Bugs

3

Features

320

Done

99%

Progress

Development Progress

99%

Planned

4
Enhancement Medium

HRR v1.1-marcel-plus wired into prediction dispatcher

The HRR prediction pipeline now routes the new v1.1-marcel-plus model version through its dedicated orchestrator, enabling side-by-side evaluation against v1-marcel on the admin backtest page.

To Do
Feature Medium Features

NFL sport module

Add NFL support with team rosters, player stats, game schedules, and betting data.

To Do
Feature Medium Features

NBA sport module

Add NBA support with team rosters, player stats, game schedules, and betting data.

To Do
Feature Low Features

NHL sport module

Add NHL support with team rosters, player stats, game schedules, and betting data.

To Do

Completed

320
Enhancement Medium

Pull Schedule grouped by day type

The Odds API Pull Schedule panel now groups time slots into Daily, Weekday, and Weekend sections with per-group active counts.

Completed
Enhancement Medium

Projected Quota Usage dashboard for the Odds API

Live forecast of Odds API spend on the admin dashboard - projected requests per day and per 30-day cycle - that recalculates instantly as individual pulls and schedule slots are toggled on/off. Powered by actual billed-request logs rather than hardcoded estimates, and documented as a mandatory pattern for all future Odds API cron jobs.

Completed
Enhancement Medium

Per-pull Odds API kill switches

Every recurring Odds API pull (props + game odds, closing lines, ump tracker) now has its own on/off switch on the MLB admin dashboard, layered under the sport-wide master switch, so API spend can be trimmed selectively instead of all-or-nothing. Added a Pull Schedule panel for the sync time slots and taught the health monitor to treat switched-off pulls as intentionally paused. The convention is documented as mandatory for all future sports.

Completed
Enhancement Medium

Season-rollover future-proofing (2027+)

Audited every season-scoped code path so the platform rolls cleanly into 2027 and beyond: the Runs Under model retrain no longer pins its training data to 2026, park-factor lookups fall back gracefully before new-season factors are seeded, sync jobs derive the season from Central Time, and public pages keep serving the completed season through the offseason instead of going blank in January. Added a season-rollover runbook documenting the few remaining yearly manual steps.

Completed
Bug Medium

Runs Under model deadlock fix + health false-alarm cleanup

Fixed a recurring database deadlock in the Runs Under model lock job (now retries per player instead of failing the whole batch) and cleaned up System Health false alarms: baselines poisoned by one-time backfills were reset, naturally spiky tables can now opt out of the daily-volume check, and NFL launch-week noise was cleared. The health dashboard is back to zero unacknowledged warnings.

Completed
Documentation Medium

Odds API kill-switch runbook + NFL test-button gating

Documented the per-sport Odds API master switch end to end: how to gate new API callers, how health monitoring pauses with the switch, and a step-by-step onboarding checklist for future sports (NBA, NHL) and the first NFL odds sync. Also wired the NFL admin connectivity-test button to respect the NFL master switch.

Completed
Enhancement Medium

Kill-switch-aware system health monitoring

System Health freshness checks now understand master/kill switches: when a pipeline is intentionally turned off (like the MLB Odds API in the off-season), its tables show as informational paused entries instead of raising stale-data alarms, while in-season breakage still alerts on the same schedule.

Completed
Feature Medium

Odds API master kill switch

Added a sport-wide Odds API master switch to the MLB odds admin page. One toggle now stops every MLB Odds API pull — scheduled prop syncs, nightly closing lines, the umpire-tracker fallback, and manual grabs — so MLB API spend can be shut off in the off-season while other sports keep running. The same switch is seeded for NFL ahead of its first odds sync.

Completed
Enhancement Medium

NFL Prop Finder: All Props leaderboard + game-date slate

The NFL Prop Finder gains an All Props leaderboard (every prop at a standard line, ranked by hit rate, with an ALL-positions option), a game-date selector that binds results to that day's slate with matchup and kickoff times, and a Not Started filter to hide games already underway.

Completed
Feature Medium

NFL Prop Finder

New Analysis section on the NFL site with a Prop Finder: pick any season, position, prop, line, and direction to see Season / L3 / L5 hit rates for every qualifying player, with a per-game log, playoffs toggle, home/away splits, and usage filters.

Completed
Feature Medium

NFL team stats viewer (offense/defense/combined)

Added /team-stats to nfl.gamedayanalytics.net: ranked league tables with season + week filters, sortable columns, and direction-aware color grading. Backed by a new nfl_team_stats weekly pipeline (nflverse stats_team release) wired into the nightly sync.

Completed
Feature Medium

NFL player stats browser + player profile pages

Added /players (filterable, sortable, position-aware season stat table) and /player profile pages (season stats, game log, career totals) to nfl.gamedayanalytics.net, backed by the nflverse weekly stat data. Navigation centralized into a single nav include.

Completed
Feature Medium

NFL subdomain — Phase 1 infrastructure and historical data

Stood up nfl.gamedayanalytics.net: isolated NFL database, five seasons (2021-2025) of nflverse games, rosters, and weekly player stats plus the full 2026 schedule, nightly sync pipeline with validation, The Odds API integration with shared-key quota tracking, an NFL admin dashboard, and System Health monitoring integration.

Completed
Enhancement Medium

K-Model accuracy round 2: edge threshold + calibration

Analyzed 38 days of graded strikeout-model picks and found all bankroll losses concentrated in the marginal 1.0-1.25 edge band. Raised the pick threshold to 1.25, added a self-fitting post-hoc calibration layer to every nightly retrain, and sharpened the refinement report so marginal bands can no longer hide inside healthy-looking buckets.

Completed
Feature Medium

Team OVER/UNDER trends

New team-level OVER/UNDER layer: per-team OVER rate, average line vs actual runs, runs-vs-line, and home/road splits, derived from the same graded games as the umpire tracker. Dark-themed, database-only viewer with today's-slate cards that show each team's and the umpire's dominant lean and flag games where both teams and the umpire all lean the same direction, plus a sortable leaderboard and per-team game-log drill-downs.

Completed
Enhancement Medium

Umpire OVER/UNDER: richer today slate cards

Today Slate now displays game start time (CT), the assigned HPU dominant lean (under-leaning umps show their UNDER rate in red, over-leaning show OVER in green), the full O-U-P record and runs-vs-line, ordered by first pitch. Enriched at read time by joining the games table and recomputed umpire profiles; the 5-minute poll renders identical cards.

Completed
Enhancement Medium

Umpire OVER/UNDER: today HPU indicator + 5-min refresh

Surface whether each umpire is the scheduled home-plate umpire in a game today (leaderboard Today badge + detail-page banner + live Today Slate panel). Added a 5-minute seed cron that re-pulls the MLB schedule/officials so assignments stay current as they are posted, plus a read-only JSON endpoint the page polls every 5 minutes to self-update.

Completed
Feature Medium

Umpire OVER/UNDER viewer (public)

Public Umpire Analysis page (Over/Under Trends): sortable umpire leaderboard (OVER/UNDER rate, avg line vs actual runs, runs-vs-line), low-sample filtering and flagging, today-slate panel, and per-umpire game logs with last-10 streak tallies. Wired to the live ump_over_under_profiles / ump_game_results / ump_today_slate tables; help modal included.

Completed
Feature Medium

Umpire OVER/UNDER tracker for MLB game totals

New per-umpire OVER/UNDER tracker. For every MLB game it captures the home-plate umpire, the closing game total line, the final combined runs, and the OVER/UNDER/PUSH result, then maintains an auto-updating per-umpire OVER-rate profile. Backfilled 2020-present (~10.5K graded games, zero missing lines) and kept current in perpetuity by three daily jobs (seed slate -> capture closing lines -> grade + recompute). Registered with the System Health and Cron dashboards.

Completed
Feature Medium

Umpire OVER/UNDER Tracker

Per-umpire OVER/UNDER profiling for MLB game totals. Captures the home-plate umpire, closing total line, and final combined runs for every game — historical back to 2020 and perpetually forward via three daily jobs (seed, hourly line capture, grade) — and maintains an auto-updating per-umpire OVER-rate profile plus a today slate showing each game-s home-plate umpire and their OVER rate.

Completed
Feature Medium

Runs Under (Scores Zero Runs) Model

New MLB model predicting which players are most likely to score zero runs (Under 0.5 runs). Calibrated LightGBM classifier with isotonic calibration, a daily projected-then-confirmed lineup lock + grading pipeline, admin tuning/refinement pages, public slate with edge + odds filters, and a methodology page. Picks publish only after a sufficiency gate (min graded sample + Brier ceiling) is met.

Completed
Feature Medium MLB

MLB Parlay - Model Refinement report

Admin report surfacing the specific signals needed to recalibrate the league-wide H+R+RBI parlay model: calibration curve, under-55% diagnosis, OVER/UNDER realized edge, line-level edge, residuals by feature, and isotonic readiness. Read-only, table-heavy, verdict-first.

Completed
Enhancement Medium

Prop Finder rank column and summary fix

Prop Finder now shows a # rank column in results (persisting across pages and any sort) and includes the minimum plate-appearances filter in its plain-language search description.

Completed
Feature Medium

Prop Finder "Not started" filter

New checkbox on the Prop Finder that filters out games that have already started or finished, showing only upcoming games you can still bet pre-game. Works on the main finder and the All Props leaderboard.

Completed
Bug Medium

Sync resilience: MLB API retries and graceful odds-event expiry

Season-stats and game syncs now retry transient MLB Stats API failures instead of skipping a player until the next run, and the props sync treats expired Odds API events as routine skips instead of errors. System Health findings driven by these noise classes were cleared.

Completed
Bug Medium

System Health report readability fix

Error-scan findings on the System Health page now show the originating job name instead of the full error message in the object column, and the findings table got layout hardening — clamped cells with click-to-expand — so long messages can no longer break the row layout.

Completed
Enhancement Medium

System Health auto-discovery for new sport databases

The System Health monitor now discovers and registers new GameDay Analytics databases automatically on its nightly refresh — inferred sport label, error-log mapping, and a review reminder, with a deny list protecting unrelated schemas. Health alerts on the admin dashboard are now sport-prefixed so multi-sport issues are distinguishable at a glance.

Completed
Feature Medium

System Health monitoring for the admin dashboard

New database-level health monitor: nightly checks scan every registered database for recurring error-log patterns, numeric columns nearing their storage limits (the class of bug behind the June pitcher rate-stat overflow), stale tables, and data-sanity anomalies. Findings surface on a new System Health admin page and as an alert banner on the admin dashboard, with per-finding acknowledge and a registry form that adds future databases (NFL, NHL, ...) with zero code changes.

Completed
Bug Medium

Repo-prod reconciliation + pitcher rate-stat overflow fix

Fully reconciled the git repository with the production tree (150+ source files adopted, runtime artifacts gitignored) so git is the source of truth again. Fixed a season-stats sync failure where small-sample pitcher rate stats (hits/runs/walks per 9) overflowed their database columns — over 10,000 failed row updates since March 30 — by widening the columns and re-syncing all pitcher season stats.

Completed
Enhancement Medium

Timezone standardization + shared infrastructure pass

Standardized all game-day date logic on America/Chicago via new shared helpers (PHP todayCt()/nowCt(), Python gd_lib.dates), fixing an off-by-one bug where late-evening syncs and API calls could resolve today as tomorrow. Also brought server-only config/DB files under version control and gave each parlay model its own sim-regression config knob.

Completed
Enhancement Medium

Main admin panel sidebar redesign

Applied the new left-sidebar admin chrome (grouped navigation, sticky topbar, mobile drawer) to the main gamedayanalytics.net admin panel, matching the MLB admin redesign.

Completed
Enhancement Medium

MLB admin dashboard redesign

The MLB admin panel moved its navigation to a modern fixed left sidebar with grouped sections, icons, a sticky topbar, and mobile support. All existing tools and data carried over unchanged.

Completed
Enhancement Medium

New ecosystem footer

Redesigned footer across gamedayanalytics.net and the MLB app: quick links, model/sport links, live database stats, developer credits, disclaimer, and a terminal-style system status bar.

Completed
Enhancement Medium

Prop Finder: Game Total column

The Prop Finder results table now shows each game's posted over/under run total whenever a game date is selected, in both the single-prop view and the All Props leaderboard.

Completed
Enhancement Medium

MLB Parlay HRR: History & Performance tabs

The league-wide MLB Parlay (H+R+RBI) model page now has History and Performance tabs — every past featured parlay with its legs, grades, odds, and units, plus parlay record by window, a cumulative-units chart, and league-wide leg accuracy broken down by direction, confidence, featured-vs-board, posted line, and lineup slot.

Completed
Enhancement Medium

Braves Parlay HRR: History & Performance tabs

The public Braves Parlay (H+R+RBI) model page now has History and Performance tabs — every past parlay with its legs, grades, odds, and units, plus rolled-up parlay record, a cumulative-units chart, and leg accuracy broken down by direction, confidence, parlay membership, and lineup slot.

Completed
Bug Medium

Prop Finder: Has line today for individual props

The Has line today checkbox now works for individual props, not just the All Props leaderboard — it keeps only players whose chosen sportsbook posts that market today at any line.

Completed
Feature Medium

Prop Finder: Game Total filter + game-odds sync fix

New Game total filter on the Prop Finder narrows results by the game's posted over/under run total (e.g. find Under bets in low-total games). Also fixed a regression that had stopped game-level odds (moneyline, run line, totals) from being stored since mid-May.

Completed
Feature Medium

Game Research: public History & Performance tabs

Game Research picks are now graded automatically against final box scores, with public History (filterable pick-by-pick results) and Performance (win rate by window, confidence, direction, prop, side, and day) tabs.

Completed
Enhancement Medium

Game Research: Season/L5/L10 hit rates on pick cards

Each research pick card now shows the player's Season, last-5, and last-10 hit rates against the exact line and direction of the pick.

Completed
Bug Medium

Prop Finder: odds limiter and sportsbook honored on All Props leaderboard

The All Props leaderboard now applies the Min/Max odds filter and anchors its Line and Odds columns to the selected sportsbook instead of always using best-available.

Completed
Enhancement Medium

Prop Finder: Has line today now requires exact line match

On the All Props leaderboard, the Has line today filter now keeps only combos where a sportsbook posts the exact standard bet line — alternate-line fallbacks (e.g. bet 0.5 but only 1.5 posted) are hidden.

Completed
Enhancement Medium

Prop Finder: direction filter on All Props leaderboard

The All Props leaderboard gained a Direction select (Both / Over only / Under only) so the board can be limited to a single bet direction.

Completed
Enhancement Medium

Prop Finder: All Props leaderboard slate context

The All Props leaderboard now shows each player's game today (opponent and Central Time start), the best-available posted line and odds for every prop combo, a sortable Odds column, and a Has line today filter to cut the board to props books are actually offering.

Completed
Enhancement Medium

Prop Finder: IP and GS on Opposing SP card

The Prop Finder detail card's Opposing SP panel now includes the starter's season innings pitched and games started alongside ERA, WHIP, and rate stats.

Completed
Enhancement Medium

Prop Finder All Props: cleanup

Refined the All Props leaderboard — batter boards now show position players only (no pitchers), the Home Runs prop is excluded (its "under 0.5" rate is trivially high for everyone), and pagination is now a compact windowed pager instead of listing every page.

Completed
Task Medium

Prop Finder test suite back to green

Updated the Prop Finder verification script so its scout-note assertions match the current, clearer note wording — the test suite passes cleanly again.

Completed
Feature Medium

Prop Finder: All Props leaderboard

New "All Props" mode in Prop Finder ranks every prop for batters or pitchers — both over and under at standard lines — into one sortable hit-rate leaderboard. Filter by minimum Season/L5/L10 hit rate to find the highest-hitting props across the league, and click any row for that combo's game log.

Completed
Enhancement Medium

Prop Finder: bullpen-status filters

Prop Finder now has Well-rested BP and Overworked BP checkboxes (batter side, with a game date) to filter for batters facing a well-rested or overworked opposing bullpen, using the same workload definition as the player detail card.

Completed
Feature Medium

Prop Finder: game log in detail card

The player detail popout in Prop Finder now has a Game Log view — a game-by-game breakdown of the prop vs your line with L5 / L10 / season tabs, per-window hit rate, and hit/miss/push marks, plus a link back to the notes.

Completed
Enhancement Medium

Game Research: angle player list follows selected game

In the research editor, the player dropdown for an angle now repopulates to the two teams in the selected game whenever you change the game, instead of keeping a stale list. Players like recent call-ups now appear correctly.

Completed
Enhancement Medium

Player Stats: filter by Min PA

The Player Stats page now filters by minimum plate appearances instead of minimum games played, and the filter control is properly aligned with the rest of the filter bar.

Completed
Bug Medium

Prop Finder: detail card respects selected sportsbook

The player detail / notes popout now shows the line for the sportsbook you picked in the filters instead of always defaulting to the best-available book. Falls back to best-available (clearly labeled) only when your book has not posted the prop.

Completed
Bug Medium

Prop Finder: exact-line filter

The "Has line" checkbox is now an "Exact line" toggle — it shows only props your chosen sportsbook posts at the exact line you searched, hiding alternate-line fallbacks (e.g. searching a 0.5 line no longer surfaces 1.5 rows).

Completed
Enhancement Medium

MLB Parlay H+R+RBI: grade at each player's real line

The league-wide H+R+RBI parlay model now evaluates every hitter against their own sportsbook line (0.5 / 1.5 / 2.5 / …) instead of a fixed 1.5. Confidence, pick direction, and grading all use the player's posted line, and performance stats were reset to start fresh under the new logic.

Completed
Feature Medium

League-wide MLB H+R+RBI Parlay model

Expanded the parlay concept league-wide: confidence-ranked H+R+RBI legs across all 30 teams, rolling per-game locks, and an on-demand best-bettable parlay (one leg per game) drawn only from games not yet started. Includes public page, admin panel, poller+grading crons, and a daily featured-parlay record.

Completed
Feature Medium

Braves H+R+RBI Parlay model

A parlay-optimized sibling of the Braves H+R+RBI model: ranks legs by probability of the correct direction (not edge) and auto-builds the best 3-leg parlay. Includes public Models page, admin panel (today/history/performance), poller+grading crons, and shared simulation engine.

Completed
Feature Medium

Public Braves H+R+RBI predictions page

Added a public page under Models for the Atlanta Braves Hits+Runs+RBIs model: todayx27s locked picks (projection, over/under probabilities, line, recommendation) plus an all-time win/loss record and ROI summary.

Completed
Feature Medium

Braves H+R+RBI prediction model (v1)

New isolated Monte Carlo model that predicts each Atlanta Braves starter combined Hits+Runs+RBIs via a sequential base-out simulation. Predictions freeze the instant the official lineup posts, with de-vigged book lines, edge and over/under recommendations. Includes a lineup poller, grading, and an admin panel (today view, history, performance with W/L and ROI, live config tuning).

Completed
Feature Medium

Public Game Research system

Admin-authored, public-facing MLB game research with per-pick live enrichment: official-lineup status, opponent defensive rank for the prop, opposing-pitcher line, and player form. Draft/publish workflow, date feed + archive, mobile-first, help modal.

Completed
Feature Medium

On-demand Odds Grab

Added an admin Grab Odds Now command that forces an immediate background odds pull (bypassing the schedule), with a live-updating status panel and quota safeguards.

Completed
Feature Medium

Website-wide API data dashboard

Added a cross-league API Data page to the admin showing Odds API quota, last-pull status, 30-day request volume, and props inventory per sport, plus a dashboard quota glance. Scales automatically as new leagues come online.

Completed
Enhancement Medium

Prop Finder lineup + matchup upgrades

Added an official-lineup filter, projected-spot display in the Lineup column with faster game-day lineup syncing, and opponent-matchup highlighting that flags the softest defensive matchups for each prop.

Completed
Feature Medium

Manual cron runs + earlier lineup sync

Added on-demand Run now buttons for every scheduled job on the admin Cron dashboard, audited the cron registry, moved MLB official-lineup sync to a 10 AM CT start with 5-minute game-day cadence, and fixed the transparent run-history popup.

Completed
Bug Medium

Fix breakdown table alignment on model performance pages

Fixed the Breakdowns tables on the Strikeout and Recorded Outs performance pages where the Units column was clipped at the card edge. Numeric columns now size to content and stay right-aligned within the card.

Completed
Documentation Medium

Recorded Outs model methodology page

Added an admin methodology reference for the Recorded Outs pitcher model (with a public JSON mirror), and rewrote the public help to explain why a pick can differ from the projected outs and how to use the model.

Completed
Enhancement Medium

Strikeout Buy Down Line filter

Filter the strikeout slate by the buy-down (one line down) line value, complementing the buy-down odds filter.

Completed
Enhancement Medium

Strikeout Buy Down odds filter

Filter the strikeout prediction slate by the buy-down-one-line Over odds, alongside the existing side, line, and odds filters.

Completed
Feature Medium

K-Model buy-down-one-line odds

Strikeout prediction cards now display the Over odds for one line below the official line, giving a quick look at the safer alternate-line play.

Completed
Enhancement Medium

Recorded Outs model — Performance page

Added a Performance tab to the Recorded Outs model (/models/outs/performance): 7-day / 30-day / all-time records with units and ROI, a cumulative-units chart, projection accuracy (how close projected outs land to actual), and breakdowns by edge, side, line range, home/away, and park, plus loss diagnostics.

Completed
Feature Medium

New MLB model: Pitcher Recorded Outs

Launched a brand-new, fully isolated prop model that projects how many outs each starting pitcher will record and compares it to the sportsbook line. It blends a pitcher's season and last-5-start averages, then adjusts for pitch efficiency vs. the opposing lineup, lineup difficulty (Statcast), the team manager's hook tendency, and park factors, producing Over/Under picks with a probability edge. Includes a public slate + results page at /models/outs, an admin tuning panel, and isolated nightly/hourly/freeze/grading crons.

Completed
Task Medium

Auto-renewing SSL for freaklabs subdomains

Issued individual auto-renewing certificates for 7 freaklabs.dev subdomains (arcraiders, bills, cruise, news, skins, starcitizen, status) so they no longer depend on the manual wildcard. A few redirect-only subdomains remain on the wildcard pending a separate fix.

Completed
Bug Medium

Fix expired SSL certificate + restore auto-renewal

Renewed the expired SSL certificate for the MLB site and repaired the automatic-renewal pipeline (re-enabled the renewal timer and added a deploy step so renewed certificates are installed where the web server actually serves them). Site is secure again and will renew itself going forward.

Completed
Feature Medium

K-Model: How the Model Works admin page

Added an admin-only How the Model Works page to the K-Model dashboard with separate plain-language and technical explanations of the strikeout model. The public strikeout page help now shows a simplified, consumer-friendly description instead of model internals.

Completed
Enhancement Medium

Move Bet Labs starter-PA benchmark beside Min PA

Relocated the current-season starter plate-appearance baseline inline next to the Min PA filter for easier calibration.

Completed
Enhancement Medium

Pin Bet Labs starter-PA benchmark to current season

The starter plate-appearance baseline on Bet Labs is now always computed for the current season (older seasons were too sparse to be useful), with the season shown in the label.

Completed
Bug Medium

Fix hardcoded MLB season on home page

The landing page hero showed a stale "MLB 2025 Season Live"; it now derives the year dynamically so it stays current each season.

Completed
Feature Medium

Admin Notes screenshot attachments

Added image upload to the Admin Notes system — attach screenshots to notes or comments via picker, drag-and-drop, or clipboard paste, with gallery thumbnails and delete. Internal admin tooling.

Completed
Feature Medium

Bet Labs league-average PA benchmark for starters

Surfaced the average total plate appearances of everyday starters for the active season and filter set on the Bet Labs player results, helping users calibrate the Min PA qualifier.

Completed
Bug Medium

Fix Bet Labs results table alignment

Corrected misaligned numeric column headers on the Bet Labs player results table by right-aligning them to match their values.

Completed
Enhancement Medium

K-Model Line History chronological order

Reordered the strikeouts model Line History popup so the opening line is on top and the latest line at the bottom for natural top-to-bottom reading.

Completed
Enhancement Medium

Simplified Models navigation

Removed the Strikeouts History and Performance links from the Models dropdown menu.

Completed
Feature Medium

K-Model Refinement Report

Admin diagnostic surface for refining the strikeout model: live-vs-CV accuracy, calibration buckets, performance splits, loss diagnostics, CLV, and RF feature importance.

Completed
Enhancement Medium

Strikeout model: line-movement indicator

The Strikeout Predictions page now shows an always-visible marker next to each line — up, down, or no-change versus the opening line — so you can tell at a glance how the market has moved.

Completed
Feature Medium

Strikeout model: prediction-accuracy breakdowns

Added prediction-accuracy breakdowns to the Strikeout model. History shows, per day, how often the model landed within 1, 2, 3 (or 4+) strikeouts of the actual result — both overall and on the correct side of the line. Performance shows the same metrics all-time.

Completed
Enhancement Medium

Bet Labs Players: Batter/Pitcher toggle, multi-opponent systems, PA qualifier

Bet Labs Players now has an explicit Batter/Pitcher selector that reshapes the page around your choice. Save filters as a system across multiple opponents (e.g. Olson vs NYM/WSH/LAA) and alerts will surface whenever your player faces any of them. Batter qualifier floor is now Plate Appearances; pitcher qualifier is Games Started. Results table realigned with clearer column semantics (H/G + PA for batters, H/GS for pitchers).

Completed
Bug Medium

Fix API Quota dashboard chart

Updated Odds API monthly quota constant to match the current 5M plan so the API Quota admin dashboard chart and burn-rate projections show accurate numbers instead of red-flagged daily bars.

Completed
Enhancement Medium

Cron Dashboard: Odds API + bug-cleanup visibility

Cron registry initial seed missed two active gamedayanalytics crons (sync_odds_api_props.php every 30 min, and the bug_rate_limit cleanup inline mysql daily). Added them so the dashboard covers all active scheduled jobs. Also enriched all descriptions to call out which external API each cron pulls from.

Completed
Feature Medium

Admin Notes / To-Do System

Added /admin/notes — a task tracker for logging ideas, bugs, and features. Each note has a type (Bug/Feature/Enhancement/Task/Documentation), a status (Planning → Ready → In Progress → In Review → Pushed → Completed), a sport, and a section. Lets Claude pick up work from a queue and post progress comments back. Locked behind the admin login. Notes become edit-locked once status passes Ready, so the brief is frozen while work is underway.

Completed
Feature Medium

Admin Cron Dashboard

New /admin/crons page lists every scheduled job across MLB and future subdomains, with last-run time and status pills rolled up from each sport sync_log. Registry-driven — adding a cron requires updating cron_jobs (documented in CLAUDE.md).

Completed
Enhancement Medium

K-Model: Round 1 feature-set activated

Activated the 26-feature Round 1 model after side-by-side review. Improved RMSE by 2 percent and MAE by 1.4 percent vs the prior 18-feature baseline. R-squared rose 25 percent.

Completed
Feature Medium

K-Model Round 1: 10 new features + early-hook diagnostics

Added velocity, umpire, swstr, pitches-per-PA, putaway, and platoon-aware lineup features (model now has 26 inputs, up from 18). New round-1 training improved RMSE by 2 percent. Shipped early-hook tracking: losses where the pitcher was pulled before reaching projected volume despite a strong K pace are flagged and surfaced in a rate-adjusted view and loss-diagnostics breakdown. Real W-L and units are unchanged everywhere.

Completed
Enhancement Medium

K-Model: card odds, filters, hit rates, model accuracy

Strikeout prediction cards now show Over/Under odds with the picked side highlighted, L5/L10/Season hit-rate strip vs closing line, per-pitcher model accuracy (W-L-P, MAE, units). Added a filter bar (side, line range, odds range) plus three new sort options (accuracy, under L10, over L10). Filter values persist across visits.

Completed
Enhancement Medium

K-Model: predicted-lineups integration with source tag

Strikeout model now uses predicted_lineups for early predictions and falls back to team L30 only when neither confirmed nor projected is available. Each card shows a color-coded tag (Confirmed / Projected / Team avg only) so the lineup signal driving the prediction is visible at a glance. Source flag is persisted to k_model_starters and recomputed on every 10-min repoll.

Completed
Feature Medium

K-Model: line history snapshots + move indicator + popup

New k_model_line_snapshots table captures Hard Rock Bet line and odds every time they change for a today-starter. The card shows a small green/red delta vs the opening line; clicking the line opens a modal with every snapshot for that pitcher (line, both sides odds, CT timestamp). Going forward, lines accumulate every 10 minutes via the repoll cron.

Completed
Enhancement Medium

K-Model: sort dropdown + WIN/LOSS/PUSH/VOID result badges

Added six sort options to the strikeout slate (game time, edge, predicted Ks, pitcher A-Z, result). For graded picks, the Final badge is replaced with a bold WIN / LOSS / PUSH / VOID badge color-coded green/red/grey so wins and losses are scannable at a glance.

Completed
Feature Medium

K-Model: detailed methodology page

New /models/strikeouts/methodology page documenting how the model produces predictions, picks, and graded results. Includes live model state (active version, training window, RF hyperparameters, 5-fold CV metrics overall and per fold), full feature inventory with descriptions, lineup priority cascade, daily pipeline phases (T-24h seed, 10-min repoll, T-30 lock, 15-min reconciler, 3 AM retrain), edge formula and pick selection logic, live settings table, grading rules with units math, and an honest list of v1 limitations.

Completed
Bug Medium

K-Model: fix line click triggering both popups

Clicking the line on a strikeout card was opening both the line-history modal and the pitcher matchup modal because the card-level click listener caught the bubble after the line handler ran. Added stopPropagation in the line handler.

Completed
Bug Medium

K-Model: fix slate stuck on Loading...

The strikeout slate page was rendering Loading... indefinitely because the line-history modal markup was emitted after the inline script, so document.getElementById of the modal close button returned null, threw, and aborted the script before load() could fire. Moved the modal markup above the script block.

Completed
Bug Medium

Removed stale pitcher props from dashboard

Player props from sportsbooks would accumulate in the database when a book swapped its projected starter mid-day (e.g. an early-morning guess gets replaced once the actual starter is announced). Pitchers who were no longer on the slate could still appear as cards on the dashboard with their hit-rate history. The sync now drops orphaned prop rows per (game, market, sportsbook) on every run, and a one-time cleanup removed ~3,700 stale rows from today and future games.

Completed
Feature Medium

K-Model Phase 5: admin panel

Three new admin pages: settings editor with versioned save and full change history, model versions list with one-click activation and manual retrain button, manual ops table for voiding picks, scratching pitchers, and force-unlocking starters. Strikeout model module is now feature-complete.

Completed
Feature Medium

K-Model Phase 4: public pages live

Three pages under /models/strikeouts: today slate (cards with predicted Ks, current line, edge, recommendation, status badge), filterable pick history with win/loss summary, performance dashboard with cumulative units and breakdowns.

Completed
Feature Medium

K-Model Phase 3: daily pipeline live

Five cron jobs running automatically: T-24h slate seed (9 PM CT), 10-min lineup poll and re-prediction, every-minute T-30 lock with Hard Rock Bet line pull and pick creation, every-15-min post-game reconciliation with full units math (win/loss/push/void), and nightly retrain at 3 AM CT. Auth via credentials.conf so cron runs as gamedayanalytics user; kill switch is fail-closed.

Completed
Feature Medium

K-Model Phase 2: strikeout prediction model trained

Random Forest regressor trained on 1,568 historical starter rows. RMSE 2.27 / MAE 1.81 in 5-fold time-series cross-validation. 17 features (pitcher form, statcast metrics, opponent lineup K%, environment). Active model registered as v1.0-baseline. Prediction CLI ready for daily pipeline integration. Also retires HRR/HR/U15 legacy systems no longer in use.

Completed
Feature Medium

K-Model Phase 1: foundation

Standalone strikeout-prediction module skeleton: 8 isolated DB tables, Python package with healthcheck, PHP placeholders, cron skeleton with kill switch, and verified isolation from existing model projects. No user-facing changes yet.

Completed
Feature Medium

Bet Labs Teams: First 5 Innings mode

Added a Game Phase toggle to /bet-labs/teams that surfaces teams W-L-T records computed from runs through the bottom of the 5th inning. F5 is a straight-up market (no totals, no run-line, no moneyline filter in F5 mode), graded on linescore data sourced from MLB Stats API. Detail modal shows F5 results side-by-side with full-game outcomes so users can spot teams that lead early but blow late (or vice versa). Saved systems persist phase and surface an F5 badge.

Completed
Feature Medium

K Correlation Analysis Dashboard

New admin dashboard at /admin/k-correlation that identifies which statistics most strongly predict starting pitcher strikeouts. Pulls Statcast pitch data plus MLB box-score info, computes pitcher rolling form, opponent splits vs handedness, park K-factors, weather, and umpire tendencies, then runs univariate correlations (Pearson/Spearman/mutual info/univariate R²) and three models (Linear, Random Forest, LightGBM) with 5-fold time-series CV. Refreshes nightly via cron; admin can also trigger an analysis on demand (rate-limited to once per 15 min).

Completed
Feature Medium

U1.5 live tracking, history + state summary infrastructure

Shipped the tracking layer for the U1.5 betting model: append-only u15_bet_history ledger with denormalized batter/team metadata; u15_daily_performance per-strategy aggregates with running bankroll/peak/drawdown; u15_model_versions and u15_filter_versions registries. Nightly reconciliation job settles outcomes and computes CLV vs prop_history closing odds. Updated apply_filter_strategy.py to capture live bet-time odds from player_props (so CLV becomes meaningful going forward). Generated /reports/u15_state_summary.html (Claude handoff doc, refreshes nightly) plus /reports/weekly/index.html for Sunday weekly reports. Added /admin/u15 live monitoring dashboard. Operational README at python/u15_model/README.md.

Completed
Feature Medium

U1.5 edge-zone filter strategy + failure-mode analysis

Narrowed the U1.5 LightGBM model to its profitable edge zone via a hard filter (market 0.50-0.55 bucket, model edge >= 3pp, lineup spot not in 2/6/7, confirmed lineup). Test-window backfill: filter delivers +12.17 percent ROI on 223 bets (63.2 percent win rate) vs unfiltered -1.77 percent on 864 bets. Added u15_bets_recommended + u15_bets_shadow tables and a daily cron to track filter ROI vs unfiltered ROI out-of-sample. Investigated the 0.55-0.60 bucket -6.39 percent ROI failure mode: it is a juice problem (avg odds -164, breakeven 62.1 percent, model win rate 58.2 percent). Combo rule (exclude spots 2/6/7 + weak SP era>4.5) recovers a 202-bet subset at +5.33 percent ROI; documented as a v2 candidate. One-page analysis at /reports/u15_055_060_failure_mode.html.

Completed
Feature Medium

U1.5 TB LightGBM prediction model v1

Trained a calibrated LightGBM model for Under 1.5 Total Bases predictions. Pipeline includes data cleaning, feature engineering (interactions, composite z-scores, percentile ranks, expected-PA proxy), 50-trial Optuna hyperparameter tuning, isotonic calibration, market-importance guard, 5-fold time-series CV, betting backtest with quarter-Kelly bankroll simulation, daily inference cron, and a 9-section shareable HTML report.

Completed
Bug Medium

EDA: Fix invalid JSON from constant feature correlations

The U1.5 TB EDA summary.json was emitting bare NaN tokens (invalid per RFC 8259) for the u15_line_posted feature. Added a NaN guard in the pointbiserialr path and allow_nan=False on json.dumps to catch future leaks at write time.

Completed
Feature Medium

U1.5 TB EDA dataset + report

Built a per-batter-per-game 2026 dataset and a shareable HTML EDA report covering base rates, feature correlations, decile analysis, hitter archetype clusters, and market efficiency. Foundation for the data-driven v2 Under-1.5-TB model.

Completed
Enhancement Medium

Under 1.5 TB: 30-min intraday prediction cadence

The Under 1.5 Total Bases model now runs every 30 minutes from 8 AM to 8 PM CT, picking up lineup confirmations and odds movement throughout the day instead of just twice. The public page always reflects the most recent evaluation.

Completed
Feature Medium

Under 1.5 Total Bases prediction model

New model that predicts batters likely to go Under 1.5 Total Bases. Hybrid architecture: six-step filter pipeline (lineup spot, contact quality, pitcher matchup, venue, divergence display, odds floor) plus a seven-component confidence score (luck regression, contact quality, pitcher quality, GB inducer, pitch-mix exploitation, lineup spot, venue). Admin pages tune every threshold and weight; nightly cron predicts and grades; backtest page tracks hit rate, Brier score, ROI, and reliability over time.

Completed
Enhancement Medium

Prop Finder: multi-select player teams

The Player team filter on the Prop Finder now supports selecting multiple teams at once, matching the existing Opp teams picker. Bookmarked links to single-team searches keep working.

Completed
Feature Medium

Bet Labs Teams: odds-aware filters

Added Over/Under direction, moneyline favorite/underdog, and run-line -1.5/+1.5 filters to Bet Labs Teams. Backed by a new game_odds_closing store; backfilled 513 games of 2026 closing odds from the Odds API. Saved systems with these filters match against tonight"s posted odds.

Completed
Enhancement Medium

Prop Finder: sticky table headers

Prop Finder results table headers now stick to the top of the viewport when scrolling, so column labels remain visible through long result lists.

Completed
Bug Medium

Prop Finder: filter panel no longer sticky

Removed the sticky positioning on the Prop Finder filter panel so it scrolls off-screen normally, freeing the full viewport for results.

Completed
Feature Medium

Prop Finder: Player-team filter

Added a Player team dropdown that restricts Prop Finder results to a single team's players. Works on both sides; independent of the Game date and the existing Opp teams picker.

Completed
Feature Medium

Prop Finder: Has line filter

Added a Has line checkbox on Prop Finder so users can hide players whose chosen sportsbook has not posted the prop today.

Completed
Enhancement Medium

Prop Finder: clarify opposing-team count labels

Renames the opposing-team count from "hits overs allowed" to "Batter-games over 0.4 hits" (or "SP starts" for pitcher props) so it does not read as total hits allowed. Notes now phrase it as "Across 45 games, opposing batters went over 0.4 hits 290 times vs the Phillies" u2014 the count tracks batter-game prop overs, not total stat units.

Completed
Enhancement Medium

Prop Finder: opponent teams in summary sentence

The live filter summary sentence now reflects the Opp teams picker. Pick 1u20133 teams and you see e.g. "u2026playing the Philadelphia Philliesu2026" or "u2026playing the Phillies or Yankeesu2026" in the sentence; 4+ teams collapse to "playing 1 of N selected teams".

Completed
Feature Medium

Prop Finder: venue filter + odds in summary sentence

Adds a new Venue filter section to Prop Finder so you can narrow results to players whose today game is at a ballpark matching stat thresholds u2014 HR/game, Hits/game, Runs/game, TB/game (from final games this season) plus admin-curated Hit/HR/Run park factors. Backed by a new nightly-refreshed venue_season_stats table. Also: the live filter summary sentence now includes min/max odds when set.

Completed
Feature Medium

Prop Finder: plain-language filter summary

Prop Finder now shows a live one-sentence description of the active filters next to the Search button (e.g. "Batters with xBA u2265 .300 vs starting pitchers with WHIP u2265 1.20 going over .5 hits 80% of the time in their L10 games."). Updates as you adjust the form so you can read your search like a sentence before running it.

Completed
Bug Medium

Bet Labs save modal: player capture fix + help text refresh

Fixed the Players page save modal to include a required player dropdown populated from the results table, ensuring saved systems capture the correct player_mlb_id. Updated stale help modal text on both Players and Teams pages.

Completed
Feature Medium

Bet Labs / Saved & Alerts

Sub-project 3 of 3 in the Bet Labs suite. Admin can save any filter combination from /bet-labs/players or /bet-labs/teams as a named system. /bet-labs/saved (public) lists every active saved system and surfaces each one's matches against today's and tomorrow's game slate. In-memory matcher with no caching. Single-owner model: admin writes, public reads.

Completed
Feature Medium

Bet Labs / Teams — team W/L + game-total O/U filter

Sub-project 2 of the Bet Labs suite. /bet-labs/teams shows per-team Win/Loss records and game-total Over/Under records side-by-side, filtered by season window (Full / L5 / L10 / L20), team, opponent, venue, opposing-pitcher hand, day/night, a user-supplied total line, and a min-games floor. Row-click opens a per-game breakdown modal. Total Line is user-supplied; closing-line history is deferred to a possible 2B.

Completed
Enhancement Medium

Bet Labs: local_hour_ct sync patch

Game sync now records the local Central Time hour for each game, enabling time-of-day breakdowns in the Bet Labs team performance pages.

Completed
Feature Medium

Bet Labs / Players — dynamic player-prop filter

New top-level Bet Labs suite. Sub-project 1 ships /bet-labs/players: pick a season, prop, line, and direction and optionally constrain by player, opponent, venue, and pitcher hand. Returns one filtered hit rate per qualifying player with a per-game detail modal.

Completed
Bug Medium

Fix Team Stats team-column alignment

Team logos now render inline with the team abbreviation on the new /team-stats page, and the duplicate badge that previously appeared next to ATH/AZ/CWS (teams without locally cached logos) is gone.

Completed
Feature Medium

Team Stats Leaderboard

New /team-stats page listing season batting and pitching stats for every MLB team. Includes sortable columns, rank badges, and tab-based switching between Batting and Pitching views. Accessible from the Stats nav dropdown.

Completed
Enhancement Medium

Team Stats: Track Total Runs Allowed

The team season stats sync now captures total runs allowed (pitching_r) from the MLB Stats API, enabling leaderboard sorting by runs allowed vs. earned runs only.

Completed
Bug Medium

Restore player profile photos on /player/{id}

Player detail pages now load headshots from the MLB CDN instead of a stale local /img/players/{id}.png cache that keyed on a different ID system, so the placeholder no longer shows for every player.

Completed
Enhancement Medium

Prop Finder: surface book-specific lines

Prop Finder now shows a Line column with the line your chosen sportsbook is actually posting per player. When you filter for a line your book does not offer (e.g. Hits 0.5 at Hard Rock Bet for a top hitter), the row still appears with that book’s actual line shown in red so you can tell at a glance which players the book hasn’t lined at your number.

Completed
Feature Medium

Odds API: 30-minute prop sync windows

Added 30-minute Odds API prop sync windows — Mon-Fri 1PM-9PM CT and Sat-Sun 10AM-7PM CT. Each 30-min slot is independently toggleable from the admin Odds API page. Cron architecture refactored to a single */30 entry gated by the existing schedule table, so adding/removing slots no longer requires crontab edits.

Completed
Enhancement Medium

Dashboard min-games filter now scales with season

Dashboard batter prop cards now default Min G to (team games played - 15) so the filter loosens as the season progresses. Pitcher prop default unchanged.

Completed
Enhancement Medium

Prop Finder LINEUP column shows today official batting order

The LINEUP column on Prop Finder now displays where the batter is hitting in todays confirmed starting lineup (1st through 9th) instead of a season average. Updates every 10 minutes as teams post their cards, falling back to a dash when the lineup isnt out yet.

Completed
Feature Medium

Official lineups now refresh every 10 min from MLB Stats API

Starting lineups for todays games update every 10 minutes from 3pm CT through 10:50pm CT, pulled directly from MLB. Replaces the deprecated Ball Dont Lie feed. Confirmed lineups now feed Prop Finder, HRR systems, and pitcher matchup pages instead of falling through to predicted orders.

Completed
Bug Medium

Fix HR Predictions edge calculation

Fixed bug where all HR Matchup predictions had null edge values because the odds-attach query filtered by a specific sportsbook (DraftKings) that had no batter_home_runs props. Added best-available book fallback: prefers configured default book (case-insensitive), falls back to best-priced row from any available book. Also corrected case mismatch in hr_default_book app setting.

Completed
Feature Medium

HR Matchup model (v1-arsenal) — implementation complete

New standalone home-run prediction model that overlays each starting pitcher's pitch arsenal on every opposing hitter's per-pitch-type Barrel% and xwOBA. Marcel-style baseline x matchup x park-HR-factor formula with fully interpretable Primary Driver text. Daily predictions + per-game live grading 15 min after final. Surfaces at /systems/hr-matchup. Public page kept gated until a 5-7 day soak completes.

Completed
Feature Medium

HR Matchup Model — Admin Backtest Page

Added admin backtest page at /admin/models/hr/backtest showing windowed performance metrics (7d/30d/season), edge-bucket breakdown, reliability calibration diagram, and on-demand evaluator re-run.

Completed
Feature Medium

HR Matchup public page

Added the /hr-matchup page with hero leaderboard (top edges), full sortable slate table, past-date grading, and a help modal covering the model's Power Blend, arsenal matchup, and park factor logic.

Completed
Feature Medium

HR Model: Park Factors Editor

Admin page for editing per-venue HR park factors used by the HR Matchup model. Inline per-row editor with season selector; hit and run factors are read-only.

Completed
Feature Medium

HR Matchup Model — Admin Weights Editor

Added /admin/models/hr/weights page for editing HR Matchup model config: league means, component weights, matchup caps, regression constants, and lineup-spot projected PAs (with JSON validation). Includes model activation switching and CSRF-protected PRG form handling.

Completed
Feature Medium

HR Matchup: Live evaluator + rolling performance metrics

Added live grading pipeline that runs every 10 minutes (12 PM – 2 AM CT). After a game goes Final, hr_actuals rows are written within 15 minutes. Rolling Brier score, log-loss, and edge-bucket breakdowns are recomputed for 7-day, 30-day, and season windows after each grading pass.

Completed
Feature Medium

HR Matchup Model: predict.py pipeline

Implemented the end-to-end HR matchup prediction pipeline (Task 16). For today's slate of MLB games, the script loads pitcher arsenals, batter vs pitch-type splits, park factors, and lineup spots, computes per-batter HR probabilities, attaches devigged prop odds, and writes to hr_predictions. Includes 2 E2E unit tests locking the fixture outputs.

Completed
Feature Medium

HR Matchup: admin sync page

Added an admin sync page at /admin/models/hr/sync with kill-switch toggles for nightly sync, predict, and evaluate pipelines; a data status panel showing latest snapshot dates and row counts; and a manual run button that triggers the sync script in the background.

Completed
Bug Medium

Fix batter barrel% per pitch type in HR matchup sync

Supplemented the batter-vs-pitch statcast sync to populate barrel_pct and avg_exit_velocity per pitch type. The pitch-arsenal-stats endpoint does not expose these metrics, so a second statcast_search endpoint is fetched using a BIP-only filter (hfAB=in-play events) which keeps each pitch type under the 25K row cap. Barrel detection uses launch_speed_angle==6 (Savant's barrel category). Fill rate is now 99.9%% across all pitch types.

Completed
Feature Medium

HR Matchup: Batter-vs-Pitch Savant Sync

Nightly sync of Baseball Savant pitch-arsenal-stats (batter view) into statcast_batter_vs_pitch. Captures per-batter xwOBA, wOBA, BA, SLG, hard-hit %, and whiff % vs each pitch type — feeds the upcoming HR matchup scoring model.

Completed
Feature Medium

Pitcher arsenal sync (HR model Task 5)

Nightly sync of Savant pitch-arsenal-stats into statcast_pitcher_arsenal. Fetches per-pitch-type usage, wOBA, xwOBA, whiff%, put-away% from the pitch-arsenal-stats leaderboard and supplements with avg velocity and spin rate from the spin-direction-pitches endpoint.

Completed
Feature Medium

HR Matchup Model — Schema Migration

Added schema for HR Matchup model v1-arsenal: per-pitch-type sync tables (pitcher arsenal, batter vs pitch type), model registry, predictions/actuals/performance tables, HR park factor extension, app settings, and systems registry row.

Completed
Feature Medium

Prop Finder: game time + sportsbook & odds filter

The Prop Finder GAME column now shows each game start time inline (CT). A new sportsbook selector defaults to Hard Rock Bet (with a Best available option) and pairs with optional Min/Max odds inputs to filter results by price. A sortable ODDS column displays the chosen book's price for your direction, falling back to best available across active books when needed.

Completed
Feature Medium

Prop Finder: live odds in results

Attached real-time sportsbook odds to Prop Finder results — players now show book, line, over/under odds, and direction-relevant odds. Supports sorting by odds and filtering by min/max range. Falls back gracefully to best-available book when the chosen book has no line posted.

Completed
Feature Medium

Prop Finder: sportsbook and odds validator

Extended the Prop Finder filter validator to accept a sportsbook selector, min/max American odds bounds, and book_odds as a sort column. Foundation for odds-aware filtering in subsequent pipeline stages.

Completed
Feature Medium

Prop Finder — opp-team filter, vs-opp column, detail modal, scout notes

Multi-select opposing-team filter, per-row "vs Opp %" hit-rate column, click-to-open detail card with today's line, opposing-SP stats and Statcast, opposing-team qualifying-overs aggregate at the user's chosen line, plain-language scout notes (player rank, opp-team rank, opp recent trend, bullpen workload), date selector replacing has-game-today checkbox, per-prop default line and direction, help-button restyle, and an 8 PM CT cron so tomorrow's predicted lineups are ready in the evening.

Completed
Enhancement Medium

Prop Finder: Min hit-rate % filters

Added three optional minimum-hit-rate filters (Min Season %, Min L5 %, Min L10 %) to the Prop Finder, letting users narrow results to players whose hit rate in any window meets a floor.

Completed
Feature Medium

Prop Finder

New /prop-finder page lets users compose batter or pitcher prop searches with optional lineup, performance, and pitcher-matchup filters. Returns Season / L5 / L10 hit rates side-by-side against a user-chosen line.

Completed
Bug Medium

Game Preview modal fix

Fixed: clicking a pitcher on /game-preview was opening the wrong modal (K%/career-vs-pitcher view from /pitching-matchups) instead of the intended HRR Over% / Runs Under% view. Caused by a global click handler in app.js matching the same .matchup-pitcher class.

Completed
Feature Medium

Game Preview Page

New /game-preview page with today's MLB schedule, both starting pitchers, and season Statcast pills (xERA, xwOBA, HardHit%, Barrel%, Whiff%) per pitcher. Click a pitcher to see opposing batters' HRR Over% and Runs Under% trends.

Completed
Bug Medium

Stadium Stats: vs-handedness sample-size guard + orphan file cleanup

vs-handedness HR rate now requires at least 25 AB before showing as a percentage — prevents misleading 0% values from tiny samples. Also removed orphan venue-stats.php files from prod that predated the stadium-stats work.

Completed
Feature Medium

Stadium Stats research page

New /stadium-stats page combines park factors, home/road team splits with L5/L10 totals, and top HR hitters per lineup with Statcast power metrics + vs-handedness HR rate. Designed for HR-hunting research without being a pick-generation system. Two views: today's slate sorted by HR park-friendliness, and a sortable browse view of all 30 ballparks.

Completed
Task Medium

Stadium Stats: help modal content

Filled in all 7 help modal sections for the Stadium Stats page and registered the page in the admin help-content tracker. Sections cover: page purpose, park factors, home/road splits, L5/L10 totals, top hitters table, vs-handedness caveat, and All Stadiums browse view.

Completed
Feature Medium

Stadium Stats: All-Stadiums view with sortable table

Added the All Stadiums browse tab on the Stadium Stats page. Displays all 30 parks in a sortable table (HR factor, Run factor, Hit factor, alphabetical by name/city/roof, or by whether a game is scheduled today). Clicking any row expands it inline showing the home team HR rate at that park and the top 5 HR hitters who have played there this season.

Completed
Feature Medium

Stadium Stats: Today View Cards

The Stadium Stats page now renders full interactive game cards for today's slate — park factor chips with color coding (green/yellow/red), pitching matchup row with hand/ERA/WHIP/HR9, home/road team splits with L5/L10 totals, and a top-hitters mini-table with Statcast power metrics and vs-handedness HR rates.

Completed
Feature Medium

Stadium Stats page skeleton

Added the /stadium-stats page with tab toggle (Today / All Stadiums), date picker, help modal placeholder, and URL-persisted view state. Wired to the /api/stadium-stats.php API; card and table rendering ship in follow-up tasks.

Completed
Feature Medium

Stadium Stats: All-Stadiums Browse + Venue Detail API

Added the all-stadiums browse view and lazy venue-detail expansion to the stadium-stats API. Returns all 30 parks ranked by HR park factor with todays game labels; clicking a park loads home-team HR rate and top 5 HR hitters at that venue this season.

Completed
Bug Medium

Stadium Stats API: TBD-time + season fallback fixes

API endpoint now handles games with TBD start times (renders 'TBD' instead of stray ' CT') and falls back to latestStatsSeason() when the requested date is in a year with no batter stats yet.

Completed
Feature Medium

Stadium Stats API — Today View

New API endpoint (/api/stadium-stats.php) powering the Stadium Stats page. Today view returns all games for a given date sorted by HR park factor descending, with per-game venue metadata, park factor ranks, starting pitcher cards, and team panels including home/road splits, L5/L10 totals, and top-5 hitters enriched with statcast data and vs-handedness HR rates.

Completed
Task Medium

Stadium Stats: Venue metadata lookup

Added a static PHP lookup file mapping MLB venue IDs to city and roof type (open/retractable/fixed). Used by the upcoming Stadium Stats page to display venue context and filter by weather exposure.

Completed
Feature Medium

Wire handedness splits refresh into nightly cron

Added refresh_batter_handedness_splits.php to cron_daily.sh so batter vs LHP/RHP split stats update automatically each morning. Dry-run verified: 1833 rows refreshed in 335ms.

Completed
Enhancement Medium

Roll back HRR model to v1-marcel + create v1.2 experiment

Diagnosed v1.1-marcel-plus as strictly worse than v1-marcel on Brier (0.2499 vs 0.2428), log-loss (0.6930 vs 0.6784), and edge-bucket hit rate (44.0% vs 45.1% on >=5% edge). Highest-edge picks were anti-signal: 30.8% win rate on Over picks with 10%+ edge. Rolled active model back to v1-marcel and created v1.2-recent-soft experiment config (w_recent 0.30 -> 0.10, w_park_hr 0 -> 0.5) for parallel A/B comparison. Backfilled today slate predictions for both models and updated predict.py dispatch to recognize v1.2-* configs.

Completed
Bug Medium

Dashboard odds-range filter respects Over/Under toggle

Fixed a bug where the Min/Max Odds filter on the dashboard could let through props whose visible side fell outside the bounds (e.g., a -195 favorite showing under a -180 cap). The filter now correctly applies to the displayed Over or Under odds when a toggle is active.

Completed
Feature Medium

vs-Starting-Pitcher hit rate on dashboard prop cards

Each MLB prop card now shows a season hit-rate against today's line restricted to prior games against the opposing starter (for batters) or opposing team (for pitchers). Lazy-loads after card render so initial page time is unaffected.

Completed
Enhancement Medium

Player Props Stats: nav entry, L5/L10 rates, favorite odds

Added a Player Props Stats link to the Prop Analysis nav dropdown. Each per-market detail card now shows the favorite-side American odds beneath Today's Line, plus L5 and L10 over/under hit rates against today's line.

Completed
Feature Medium

Player Props Stats: Favorite Price + L5/L10 rate rows

Added Favorite Price (best American odds for the prop) and L5/L10 over/under hit-rate rows to each market detail card on the Player Props Stats page.

Completed
Feature Medium

Site-wide bug reporting system

Added a passcode-gated bug report widget to the navbar of every GameDay Analytics property. Reports flow into a central admin dashboard with status workflow, admin notes, and screenshot uploads. Passcode is editable from the admin without redeploying.

Completed
Enhancement Medium

Statcast leaderboard polish

Added Baseball Savant–style hover tooltips to every Statcast column header (mobile-friendly tap-to-show). Pitcher tab now filters to starters via Games Started and drops batter-flavored columns (PA, HR, BA, SLG) plus Chase%, CSW%, Zone%. Batter tab drops maxEV, Chase%, Pull%, GB%, LD%, FB%; the previously blank H/HR/AB now populate from season totals. Table layout tightened to fit on desktop without horizontal scroll.

Completed
Feature Medium

Cold Pitchers system

New /cold-pitchers page surfacing today's starters whose Statcast profile (xERA, xwOBA, Hard-Hit %, Barrel %, Whiff %) marks them as getting destroyed. Includes batter-trend modal showing opposing-lineup HRR Over% and Runs Under% across L5/L10/Season, admin-tunable thresholds, and history tracking with postgame ER grading.

Completed
Bug Medium

Dashboard: widen toolbar number inputs

Widened the Min Odds, Max Odds, Min L5%, and Min L10% inputs in the dashboard toolbar so 3-4 digit values like -180 are no longer truncated.

Completed
Feature Medium

Dashboard L5/L10 hit-rate filters

Added Min L5% and Min L10% inputs to the dashboard toolbar so users can filter the prop card grid to players whose recent hit rate meets a chosen floor. The filter follows the active Over/Under toggle so it compares the same percentage the card displays.

Completed
Enhancement Medium

Players page: compact games-today checkbox

Replaced the bulky All Players / With Game Today segmented control on /players with a small Games today checkbox so the filter bar fits without wrapping.

Completed
Enhancement Medium

Players page enhancements

Added today's game info beside player names (vs/@ opponent + time, or Off), a With-Game-Today filter toggle, dynamic min-games-played filter (defaults to season max GP - 10), and three new sortable columns: Avg Runs/Game, HRR Over/Under %, and Run Over/Under %.

Completed
Bug Medium

Fix Statcast contact-quality column NULL gap

Routed season-window Statcast sync through Savants custom-leaderboard endpoint so contact-quality metrics (barrel_pct, hard_hit_pct, whiff_pct, k_pct, sweet_spot_pct) populate alongside expected stats. Unblocks HRR Monger and any future system using these columns.

Completed
Feature Medium

HRR Monger system

Statcast-driven HRR 1.5+ overs system with hard-gated qualifiers, weighted Monger Score, rolling 7-game predicted lineup table, and per-metric tuning analytics.

Completed
Bug Medium

Restored separate Player Stats and Pitcher Stats pages

Player Stats returned to position-players-only with H+R+RBI and HRR/GP columns; Pitcher Stats now lists starting pitchers with an Outs/GS column.

Completed
Feature Medium

HRR model v1.1-marcel-plus: recent-form blending

Model upgrade that blends a batters last-10-games rate (Marcel-shrunk, 21-day cap, min 5 games) into the season-rate estimate. Addresses boom-bust misses where season rates ignored a players recent cold/hot streaks (e.g. Christian Walker picked at 49% model-over despite going cold in his last ten games). Default 30 percent weight to recent form; all five knobs editable via the admin Models page. v1-marcel retained as rollback baseline.

Completed
Feature Medium

HRR backtest/performance admin page

New /admin/models/hrr/backtest page presenting stored model performance (Brier, log-loss, RMSE, MAE across 7d/30d/season windows), edge-bucket hit rates, reliability diagrams, and over/under side breakdown, with side-by-side model comparison and a manual Re-run evaluate trigger.

Completed
Feature Medium

Public HRR Predictions page

Ship /hrr-predictions — hero grid of todays top HRR edges with expandable PMF charts, Model Inputs panel, and Recent Form panel; filterable full-slate table; past-date browsing with graded outlines; per-user sportsbook selection with automatic best-line fallback. Also adds a new Models admin section mirroring the Systems pattern: /admin/models landing page with per-model config cards, shared HRR settings (park factors, public-page settings), and diagnostic. Legacy HRR admin routes kept as aliases.

Completed
Feature Medium

HRR predictive model v1 (Marcel + matchup + park)

Upgraded HRR pipeline from a league-mean stub to a real predictive model: Marcel-shrunk batter hit/run/RBI rates, multiplicative pitcher-matchup (xwOBA-against) and park-factor adjustments, numpy Monte Carlo producing full PMF + devigged edge. New admin editors for park factors and model weights; model-switching via is_active flip preserves historical predictions for comparison.

Completed
Task Medium

HRR prediction pipeline infrastructure (Project 2A)

Python pipeline scaffold + HRR schema + stub predictions + post-game grading + admin debug view. Foundation for the HRR predictive model; no user-visible features yet. Real model lands in Project 2B.

Completed
Feature Medium

Statcast data pipeline

Nightly sync of Baseball Savant Statcast expected-stats leaderboards (batter + pitcher) into the MLB database. New public browse page at /statcast with filterable, sortable leaderboards, player photos, snapshot-date time-travel, and CSV export. New admin dashboard at /admin/statcast for enable/disable, per-leaderboard toggles, manual sync, and backfill. Scope: Project 1 ships season-to-date snapshots only — rolling windows (last 7/15/30 days) deferred to Project 2 since Baseball Savants CSV endpoints don honor date ranges.

Completed
Enhancement Medium

Player Props Stats team filter

Added a Team dropdown to the Player Props Stats page so you can narrow the table to one MLB team at a time. Default view still shows every player.

Completed
Feature Medium

Auto Parlay: market+side exclusions

Added an Exclusions picker to the Auto Parlay toolbar so users can remove specific market+side combinations (e.g. exclude Over Runs while keeping Under Runs eligible) from the candidate pool.

Completed
Feature Medium

Auto Parlay: time period filter

Added Start Time / End Time inputs to the Auto Parlay toolbar so users can narrow parlay candidates to a specific CT window (e.g. early-afternoon slate only).

Completed
Feature Medium

Pitcher matchup modal with expanded H2H stats

Clicking a pitcher card on the Pitching Matchups page now opens a modal with the opposing lineup and each batter's head-to-head stats vs. that pitcher. Columns expanded from PA/K/K%/AVG/OPS to PA, AB, H, HR, BB, K, K%, AVG, OBP, SLG, OPS across Career, Season, L10, and L5 views. Added a contextual help modal and fixed the pitcher-detail page that was blank for pitchers with assigned umpires.

Completed
Bug Medium

Fix pitcher detail page and matchup card photos

Fixed a fatal database error on pitcher profile pages (incorrect umpire JOIN columns), corrected pitcher card photos to use the standard MLB CDN endpoint, and confirmed help modal styling matches site standards.

Completed
Feature Medium

Bet history upload & analytics

New /admin/bets page accepts Hard Rock Bet CSV exports and shows net P/L, ROI, parlay record, and leg-level hit rates by market, player, team, and price range. Uploads are idempotent — re-importing the same CSV updates statuses without duplicating rows.

Completed
Feature Medium

Player Props Stats: sportsbook filter

Added a sportsbook selector to the Player Props Stats page. Default Best Available keeps the existing behavior (best over odds across all active books); picking a specific book shows only that book's lines.

Completed
Enhancement Medium

Player Props Stats: full roster + pagination

Reworked the Player Props Stats page to show every active batter and starting pitcher this season, with matchup and prop info appearing only when the player has a game on the selected date. Added pagination and server-side sort to keep load times fast as the player universe grew from ~130 to 600+.

Completed
Feature Medium

Player Props Stats: matchup display

Added today's opponent and game start time to each player row on the Player Props Stats page so you can see matchup context without leaving the table.

Completed
Bug Medium

Fix silent failures false positives on admin dashboard

Silent Failures panel now cross-references prop_history and backfill runs — dates with closing line data from backfills no longer show as failures

Completed
Feature Medium

Research Section: Venue Stats

Added a new Research navigation dropdown with a Venue Stats page showing aggregated batting and pitching stats by MLB ballpark with sortable columns and totals/per-game toggle

Completed
Feature Medium

Research Section: Player Props Stats

Added a Player Props Stats page showing player season stats alongside their prop lines for any date, with historical and today-line hit rate calculations

Completed
Enhancement Medium

Top Unders Odds Filter

Added min/max under odds range filter to the Top Unders page. Props outside the configured odds range are excluded from results.

Completed
Feature Medium

Historical Batting Order Tracking

Added a pre-computed table tracking each player's most frequent batting order position per season. Integrated into No Run Score and Under .5 Runs systems so they no longer depend on lineup cards being published.

Completed
Enhancement Medium

Under .5 Runs: 6th Criterion (Batting Order)

Added historical batting order position as a 6th qualifying check to the Under .5 Runs system. Players must most frequently bat in the 6th spot or lower to qualify, filtering out top-of-the-order hitters who are more likely to score.

Completed
Enhancement Medium

No Run Score: historical batting order mode

Replaced the live lineups table lookup with historical mode batting order position from player_batting_order_history for the lineup position factor. Improves scoring stability before game-day lineups are confirmed.

Completed
Feature Medium

Batting Order History Tracking

Created player_batting_order_history table to store the mode batting order position per player per season. Backfilled 2026 season data from existing game stats (433 player records). Added batting_order_min config param to the Under .5 Runs system.

Completed
Enhancement Medium

Add Filtered Out count to admin system preview

Admin system detail pages now show a Filtered Out stat in the Live Preview summary, matching the metric shown on public system pages for easier comparison.

Completed
Feature Medium

VS Team hit rate and CL% season on dashboard

Added VS Team hit rate (performance against today's prop line in games vs the opponent) and full-season closing-line percentage to prop cards on the MLB dashboard.

Completed
Enhancement Medium

Team Season Stats via MLB Stats API

Rewrote team season stats sync script to use MLB Stats API instead of deprecated BDL API. Includes team batting, pitching, and fielding stats synced daily.

Completed
Feature Medium

Under .5 Runs System

New evaluation system that identifies players likely to go under 0.5 runs scored by combining team offensive weakness (bottom N in runs scored), opponent pitching strength (top N in ERA), individual run drought indicators, and sportsbook odds filtering. Includes admin-configurable parameters and team rankings display.

Completed
Feature Medium

Team Season Stats Table & Sync

Created team_season_stats table and rewrote sync script to use MLB Stats API instead of deprecated BDL API. Populates hitting, pitching, and fielding stats for all 30 teams.

Completed
Enhancement Medium

Add 5 AM CT prop sync slot

Added early morning prop sync so player props are available before the first pitch.

Completed
Bug Medium

Fix closing lines sync

Fixed timestamp format issue causing closing lines to fail since April 12. Backfilled missing data.

Completed
Feature Medium

Prop Sync Schedule Manager

Admin-controlled prop sync schedule with per-slot toggles. Added 5:30 PM and 7:00 PM CT sync windows for better pre-game line coverage. Six total daily sync runs, each controllable from the Odds API admin page.

Completed
Feature Medium

Odds API Quota Dashboard

Added real-time API quota tracking with burn rate projections, daily usage chart, and per-sync-job breakdown. Fixed broken admin page that was showing empty status data.

Completed
Enhancement Medium

Add check info tooltips and NRS history scorecard

Added info tooltips to each check in the Failed Check Impact table across all history pages. Applied the new scorecard design to No Run Score history with backfilled prediction data.

Completed
Enhancement Medium

Redesign Check Effectiveness on history pages

Replaced the confusing Check Effectiveness table on HRR Overs and Unders history pages with a Failed Check Impact scorecard. Now clearly shows which checks matter most by tracking hit rate when each check is the one that fails on near-miss predictions.

Completed
Bug Medium

Fix prediction locking for HRR systems

Fixed a bug where HRR Overs and HRR Unders predictions were never being locked due to a missing function dependency in the sync script. Backfilled historical predictions so history pages now show tracked results.

Completed
Feature Medium

No Run Scored Probability Model

New scoring system that calculates probability of a player not scoring a run using 12 weighted factors (OBP, lineup position, opposing starter, platoon, park factor, etc.). Compares model probability against sportsbook odds to detect value betting opportunities. Includes admin configuration, prediction tracking, and history page.

Completed
Feature Medium

Game Schedule & Breakdown

Added date-navigable schedule page and rebuilt game detail as a player-first prop breakdown with closing-line history, top-performer/top-under badges, and collapsible box score sections.

Completed
Enhancement Medium

Pipeline Health Monitor

Admin dashboard now shows prop history gaps and silent sync failures, so missing data is immediately visible.

Completed
Bug Medium

Fix Historical Odds API Endpoint

Fixed a bug where the closing lines sync was calling the live events API instead of the historical events API, causing games from past dates to not match. Backfilled March 26-29 prop history data.

Completed
Enhancement Medium

Top Performers Uses Historical Closing Lines

Top Performers now compares players against their actual historical closing lines from sportsbooks instead of applying today's line retroactively. Also shows a secondary vs-today's-line badge per prop.

Completed
Feature Medium

Top Unders Page

New page that surfaces players with high under hit rates using historical closing lines from sportsbooks. Compares against actual past prop lines and today's line. Admin-configurable thresholds and market toggles.

Completed
Bug Medium

Fixed odds range filter on dashboard

Fixed a bug where props with odds outside the configured Min/Max Odds filter range could still appear on the dashboard. Each side (over/under) is now checked independently against the filter.

Completed
Enhancement Medium

Help modal for Heavy Home Favorites

Added a help icon to the Heavy Home Favorites page explaining the bridge system, all five checks, the moneyline override feature, and how to read qualifying vs near miss results.

Completed
Enhancement Medium

Help modal for Parlay Builder

Added a help icon to the Parlay Builder page explaining how to build a parlay, what each field means, how to read results, and the difference from Auto Parlay.

Completed
Enhancement Medium

Help content tracking system

Added a help_content table to track when each page's help modal was last updated. Admin dashboard now shows help content age with color-coded freshness indicators. CLAUDE.md documents the help modal pattern for consistent implementation.

Completed
Enhancement Medium

Help modal for Prop Analyzer

Added a help icon to the Prop Hit Rate Analyzer page explaining filters, column meanings, and usage tips.

Completed
Enhancement Medium

Help modal for Team Top Performers

Added a help icon to the Team Top Performers page showing current settings, enabled markets with directions, and how to use the page.

Completed
Enhancement Medium

Help modal for Top Performers

Added a help icon to the Top Performers page that shows current settings (min hit rate, min games), which markets are enabled and their direction, and how to read the results.

Completed
Enhancement Medium

Help modals for HRR Overs and HRR Unders

Added help icons to HRR Overs and HRR Unders pages that open a modal explaining how the system works, what each check means, and how to read the results.

Completed
Enhancement Medium

Auto Parlay uses actual closing lines

Auto Parlay now backtests against real closing prop lines from prop_history instead of applying today's line retroactively. Hit rates now reflect whether the player actually beat the line that was set for each game.

Completed
Enhancement Medium

Exclude correlated parlays from Auto Parlay

Auto Parlay now ensures the same player cannot appear in multiple legs of the same parlay, preventing correlated parlays that sportsbooks penalize with reduced payouts.

Completed
Bug Medium

Fix HRR prediction history check effectiveness

Fixed check effectiveness tables showing all zeros due to MariaDB JSON_VALUE boolean comparison. Added full-criteria vs near-miss badges to daily breakdown. Adjusted HRR Unders min-games offset for early season.

Completed
Enhancement Medium

Game matchup info on Auto Parlay

Auto Parlay cards now show each players game matchup and start time

Completed
Enhancement Medium

Min/Max Odds Filter on Auto Parlay

Added Min Odds and Max Odds filter fields to the Auto Parlay page, filtering out props whose odds for the chosen direction fall outside the range

Completed
Feature Medium

Auto Parlay Builder

New page that automatically discovers and ranks the best parlay combinations from todays props based on historical hit rates. Includes admin settings for per-leg hit rate threshold and per-market minimum lines.

Completed
Feature Medium

Sportsbook filter on Top Performers

Added a sportsbook dropdown to the Top Performers page, allowing users to filter results by a specific sportsbook

Completed
Bug Medium

Fix game times on system pages

Fixed game times on HRR Overs, HRR Unders, Hits Over, and Home Favorites pages that were displaying UTC times instead of Central Time

Completed
Feature Medium

Min/Max Line Filters on Dashboard

Added Min Line and Max Line filter fields to the MLB dashboard toolbar, allowing users to filter props by line value range

Completed
Feature Medium

HRR Unders System

New evaluation system for H+R+RBI prop under opportunities. Identifies batters in unfavorable offensive situations using 7 checks: under hit rate, bottom-of-lineup batting order, low pitcher WHIP, low team implied runs, venue filtering, platoon disadvantage, and min games played. Includes admin configuration, prediction tracking, and history page.

Completed
Enhancement Medium

Smart Min Games Default for HRR Overs

Min games parameter now auto-calculates from max team games played this season plus a configurable offset. Applied in admin dashboard, public API, and prediction lock script.

Completed
Feature Medium

System Prediction Tracking

Added prediction tracking infrastructure — locks HRR Overs predictions ~1hr before games, grades postgame, and provides history page with accuracy breakdown by confidence level and individual check effectiveness

Completed
Feature Medium

System Prediction Lock Script

Added a cron sync script that snapshots qualifying and near-miss HRR Overs predictions approximately 1 hour before each game, storing locked predictions in system_predictions for grading and hit-rate tracking.

Completed
Enhancement Medium

Renamed HRR Advantage to HRR Overs

Renamed the H+R+RBI Advantage system to HRR Overs for clarity — updated all file names, URLs, routes, DB slug, and navigation links

Completed
Feature Medium

Smart Min Games & Odds Range Filter

Dashboard now auto-calculates minimum games based on season progress and market type. Added odds range filter to control which prop lines are displayed. All defaults are configurable from the admin panel.

Completed
Enhancement Medium

Hard Rock Bet Sportsbook

Added us2 region to The Odds API integration to include Hard Rock Bet odds in player prop displays.

Completed
Enhancement Medium

Sportsbook Auto-Discovery in Odds Sync

Odds API sync script now auto-discovers and upserts sportsbooks encountered during each run into odds_api_sportsbooks, mirroring the existing market auto-discovery pattern.

Completed
Enhancement Medium

Sportsbook Filtering for Prop APIs

Added active-sportsbook filtering to all five prop API endpoints so disabling a sportsbook in the admin panel immediately removes it from all prop results across the site.

Completed
Feature Medium

Sportsbook Toggle API

Added POST /api/odds-api-sportsbook-toggle endpoint to enable or disable individual sportsbooks, controlling which books are included in odds API responses.

Completed
Feature Medium

Sportsbook Management Table

Added odds_api_sportsbooks reference table to control which sportsbooks appear in front-end props displays. Seeded from existing sportsbook data in player_props.

Completed
Bug Medium

Fix admin gear icon visibility

Changed admin gear icon color from white to black for visibility on light navbar

Completed
Bug Medium

Fix Under toggle hit rate calculation

Under toggle on the dashboard now properly recalculates hit rates instead of only switching displayed odds

Completed
Feature Medium

Hits+Runs+RBIs OVER System

New evaluation system that identifies batters with high Hits+Runs+RBIs prop hit rates in favorable matchup conditions including batting order, opposing pitcher WHIP, team implied runs, venue, and platoon advantage. Includes Over/Under toggle and admin dashboard with configurable venue toggles for all 30 MLB parks.

Completed
Bug Medium

Fix stale team assignments in Prop Analyzer

Fixed player team assignments showing previous season teams instead of current rosters on the Prop Analyzer page

Completed
Bug Medium

Fixed player photos on Top Performers pages

Player headshots now display correctly on Top Performers and Team Top Performers pages using the MLB CDN.

Completed
Feature Medium

Team Top Performers page

Added a team-filtered Top Performers page where users can select a team and see which players are hitting prop lines at the highest rates.

Completed
Enhancement Medium

Admin-Selectable Prop Markets

Top Performers prop markets are now configurable from the admin dashboard. Each market can be set to Over, Under, or Off with a visual toggle. Removed irrelevant props like stolen bases, singles, and doubles by default.

Completed
Feature Medium

Top Performers Page

New page under Prop Analysis that surfaces players hitting their prop lines at a high rate. Shows player cards with position badges, game info, and all qualifying prop lines with hit rates. Admin-configurable thresholds.

Completed
Feature Medium

Parlay Builder

Multi-leg parlay analyzer that lets you build 2-6 player prop combinations and see historical hit rates, matching days, and near misses across the season.

Completed
Feature Medium

Hits Over System

Added a team game stats aggregation pipeline and Hits Over evaluation system. Users enter a hits threshold and direction (over/under) to find teams whose rolling batting average vs opponent pitching suggests they will hit over or under that number.

Completed
Feature Medium

Systems Overview Page

Added a systems overview page that lists all evaluation systems with today qualifying game highlights and per-system stats

Completed
Bug Medium

Fix duplicate prop market labels

Disambiguated Strikeouts and Walks labels so pitcher and batter versions are clearly distinguished in dropdowns.

Completed
Feature Medium

Min Games filter on dashboard

Added a configurable minimum games filter to the dashboard prop cards view. Defaults to 3 games to filter out small-sample noise early in the season.

Completed
Enhancement Medium

Improved hit rate sorting and sample size indicators

Dashboard prop cards now tiebreak by total games when hit rates match, and L5/L10 labels show game count for small samples to reduce misleading 100% displays early in the season.

Completed
Bug Medium

Convert all times to Central Time

Switched entire site from Eastern Time to Central Time (America/Chicago). Added formatGameTime() helper for consistent UTC-to-CT conversion. Fixed broken game times on dashboard that displayed as year values (e.g. 2014:05 PM).

Completed
Bug Medium

Fix prop sync cron job

Resolved silent cron failure where the props sync script could not write to a missing log directory. Created /var/log/gamedayanalytics and fixed file ownership for the sync scripts.

Completed
Feature Medium

Admin Systems Dashboard

Added configurable Systems section to MLB Admin with live preview for Heavy Home Favorites system parameters (moneyline range, starter tiers, bullpen LOB%, reliever risk mode, sweep detection).

Completed
Bug Medium

Fix dashboard photos, props loading, and market dropdown

Fixed player photos to use MLB CDN, corrected market type mapping for props queries, and added fallback market list for the dropdown.

Completed
Bug Medium

Fix daily props API column references

Fixed broken daily-props API that referenced non-existent table columns, preventing the props dashboard from loading.

Completed
Feature Medium

MLB Admin Dashboard with authentication

Created a standalone admin dashboard for MLB-specific tools with password authentication, sync monitoring, and data overview. Admin pages are now protected behind login.

Completed
Enhancement Medium

Collapsible closing line history per game

Grouped closing line history by game date with collapsible accordion UI showing matchup and O/U summary per game.

Completed
Bug Medium

Fix prop history grading pipeline

Fixed column name mismatches and missing table reference in the prop grading script that prevented closing line history from showing results beyond March 30.

Completed
Bug Medium

Bridge Builder timezone fix

Game times on Bridge Builder page now display in Central Time (America/Chicago) instead of Eastern

Completed
Feature Medium

Bridge Builder & Pitcher Evaluations

Added admin dashboard for manual pitcher tier/reliever role assignments and Bridge Builder page that filters today's MLB slate for qualifying heavy-favorite home bets using a 5-point validation system

Completed
Bug Medium

Fix missing early-season game data

Backfilled Opening Day game stats and updated cron scripts to use rolling date windows, preventing data gaps at season start.

Completed
Feature Medium

Player detail page rewritten for live schema

Rewrote player-detail.php and player-stats API to use the actual server DB schema: batters/pitchers tables, correct game_pk/game_date column names, base_on_balls/strike_outs/pitches_thrown in game stats, avg/obp/slg/ops in season stats. Added Closing Line History section with O/U trend dots from prop_history table.

Completed
Feature Medium

Closing Line Hit Rate Analyzer

Built a hit rate analyzer that grades player props against historical closing lines (15 min before first pitch). Captures consensus lines from The Odds API Historical endpoint, grades against actual stats, and surfaces CL10 hit rates with O/U trend indicators on dashboard cards.

Completed
Feature Medium

The Odds API Integration

Replaced Ball Don't Lie with The Odds API for live player prop lines. Built a 4-layer name matching engine (alias, exact, normalized, fuzzy), admin dashboard for market management and unmatched player resolution, and automated sync schedule at 6 AM and 1 PM ET.

Completed
Bug Medium

Pitcher matchup expansion with K% analysis

Fixed pitcher-matchup API to work with new MLB Stats API schema. Click any pitcher on the matchup page to see the opposing lineup with K% breakdown: Season, L5, L10 plate appearances, and Career vs that specific pitcher.

Completed
Feature Medium

Full sync infrastructure with cron automation

Built complete data pipeline: game stats (373K+ lines), lineups (235K), umpires (122), standings, and injuries — all synced from MLB Stats API with rate limiting, retry logic, and comprehensive sync logging. Automated via cron: 6 AM daily, every 10 min during games, 1:30 AM postgame sweep.

Completed
Feature Medium

Admin data audit dashboard

Added ESPN-style leaderboard validation page to admin dashboard. Shows batting leaders (AVG, HR, RBI, OPS, Hits, SB) and pitching leaders (W, ERA, SV, K, WHIP, K/9) for quick comparison against ESPN. Includes database health checks, season breakdown, and sync activity log.

Completed
Feature Medium

Per-Game Player Stats (Game Lines)

Added player_game_stats table storing individual game batting and pitching lines for every player in every game. Enables L5, L10, and over/under calculations for prop analysis.

Completed
Feature Medium

Game Lineups Sync

Lineup data with batting order and positions synced from MLB boxscores for every game.

Completed
Feature Medium

Umpire Tracking

Umpire registry and per-game assignments synced from MLB boxscores. Home plate umpire impacts scoring environment.

Completed
Feature Medium

MLB Standings Sync

Full standings data from MLB Stats API including splits (home/away, day/night, L10, extra-inning, one-run games).

Completed
Feature Medium

Injury Tracking (IL Status)

Current injured list status synced from team depth chart rosters. Rebuilt fresh each sync run.

Completed
Enhancement Medium

Automated Cron Sync Schedule

Three cron jobs: daily pre-game sync (6 AM ET), live score updates every 10 min with instant stats on game completion, final postgame sweep (1:30 AM ET).

Completed
Feature Medium

Historical Game Stats Backfill (2020-2025)

Backfilling per-game player stats, lineups, and umpires for all regular season games from 2020 to 2025 (~14,000+ games).

Completed
Enhancement Medium

Migrate to Official MLB Stats API

Replaced Ball Don't Lie API with the official MLB Stats API for all game schedules, pitcher stats, and batter stats. New database schema uses MLB personIds and game_pk as primary keys for direct API compatibility.

Completed
Enhancement Medium

Prop analyzer shows all qualifying players

The Prop Hit Rate Analyzer now returns all players meeting the games and hit rate thresholds, not just those with a prop listed today. Players without a game today show a dash in the Game column.

Completed
Enhancement Medium

Add game column to Prop Hit Rate Analyzer

The prop analyzer now shows each player's today's matchup (opponent and game time) in a dedicated Game column. Hidden on mobile for readability.

Completed
Enhancement Medium

Hide completed games from dashboard

Completed games and their props are now filtered out of the daily props dashboard, keeping focus on upcoming and in-progress games.

Completed
Bug Medium

Fix duplicate game tabs on dashboard

Fixed an issue where game tabs on the daily props dashboard were repeated multiple times due to a database join producing duplicate rows.

Completed
Bug Medium

Fix lineup sync is_probable_pitcher error

Fixed a data type mismatch in the lineup sync where empty string values from the API caused database insert errors for the is_probable_pitcher field.

Completed
Enhancement Medium

Incremental Post-Game Sync

Player stats, prop results, and lineups now process within ~10 minutes of a game ending instead of waiting until 1:30 AM. Play-by-play and Statcast data still sync overnight.

Completed
Bug Medium

Filter Spring Training from Game Log

Player profile game log now excludes spring training games, showing only regular season data.

Completed
Feature Medium

Full BDL API Data Mirror

Complete mirror of all 19 BDL MLB API endpoints into local database. Includes Statcast pitch-by-pitch data, play-by-play, standings, lineups, player splits, injuries, and batter-vs-pitcher matchups. Comprehensive logging with verbose/debug/dry-run modes. Nightly automated sync with historical backfill for 2022-2025.

Completed
Feature Medium

Pitching Matchups Page

New page showing today's starting pitchers grouped by game with expandable head-to-head matchup panels showing opposing lineup strikeout rates via the MLB Stats API.

Completed
Enhancement Medium

Navigation Restructure

Reorganized MLB site navigation into grouped dropdowns: Stats, Prop Analysis, and Umpire Analysis. Cleaner layout with desktop hover and mobile accordion behavior.

Completed
Feature Medium

Prop Hit Rate Analyzer

New cross-player discovery tool that finds players with consistent hit rates against their current prop lines. Includes all 16 MLB player prop types, over/under direction filtering, configurable thresholds, and sortable results with L5/L10 trend data.

Completed
Feature Medium

Umpire game preview per-season hit rates

Added per-season O/U hit rate breakdown on the Umpire Game Preview page for both umpire vs line and pitcher combo data. Fixed betting odds sync to correctly map BDL API field names. Also fixed game stats sync pagination bug and NULL season values.

Completed
Bug Medium

Fix props hit rate display

Renamed Accuracy to Hit Rate on props cards and fixed hit rate data showing N/A by falling back to the most recent season with game stats data when the current season has no completed games yet.

Completed
Feature Medium

Prop Card Dashboard

Redesigned the MLB home page with a card-based player props view featuring prop type selector, game filters, sportsbook filter, sort options, and hit rate trending metrics.

Completed
Feature Medium

Umpire Game Preview Page

Date-selectable page showing home plate umpire O/U hit rates with threshold grids and starting pitcher combo analysis for daily MLB games.

Completed
Bug Medium

Fix Stale LIVE Badges on Dashboard

Added a safeguard to prevent games from showing a LIVE badge if they started more than 6 hours ago. This handles cases where the API is slow to update game status from in_progress to final.

Completed
Enhancement Medium

Team Logos on Dashboard Game Cards

Updated the Today's Games section on the dashboard to display team logos instead of plain text abbreviations. Logos are sourced from ESPN CDN.

Completed
Feature Medium

Add Season Selector to Umpires Listing

Added season filter checkboxes to the Umpires listing page, allowing users to filter umpire stats by specific seasons. The umpire filter API now accepts season parameters for targeted analysis.

Completed
Bug Medium

Filter Spring Training from Umpire Stats

Fixed umpire stats pages and cache to exclude spring training games. All umpire queries (listing, detail, analysis, filter API, and stats cache) now only include regular season games, matching industry-standard sources like OddShark.

Completed
Feature Medium

Umpire Analysis tool page

New Umpire Analysis page for analyzing home plate umpire tendencies with custom over/under thresholds. Supports Total Runs, Strikeouts, Walks, Home Runs, and Hits stat types with season filtering, hit rate summary cards, common threshold grid, and full game history table.

Completed
Enhancement Medium

Game time display on dashboard

Scheduled games now show their start time (ET) instead of just a generic Scheduled badge. Game times are synced from the BDL API and displayed on the dashboard, games today page, and game detail pages.

Completed
Feature Medium

Umpire Filtering & Custom O/U Line Analysis

Added interactive filters to the Umpires page — set minimum HP games, enter a custom O/U line threshold, and toggle between Over and Under to see hit rates. Includes sortable columns and historical vs. actual betting line tracking.

Completed
Enhancement High UI/UX

Complete visual overhaul — Hardball theme

Redesigned the entire site with the Hardball theme: dark header/footer with warm body sections, rust-red accent color, Space Grotesk display font, JetBrains Mono for stats, sharp 2px corners, and square player photos. Applied across the landing page, MLB app, and admin dashboard.

Completed
Feature High Features

MLB player stats dashboard

Full player profiles with season stats, game logs, batting and pitching leaderboards, and headshot photos from MLB Stats API.

Completed
Feature High Features

Betting props and odds tracking

Automated sync of player props and game betting odds with historical result tracking and hit-rate analysis.

Completed
Feature Medium Admin

Admin dashboard with sync controls

Admin panel with manual sync triggers, data audit tools, season backfill, and changelog management.

Completed
Feature High Backend

Automated data sync pipelines

Cron-based sync for teams, players, games, season stats, game stats, props, odds, and prop results with real-time live score updates.

Completed