Problem
Probabilities every night for six leagues, flowing unattended to a live site.
The site reads the prediction table directly, so a pipeline that fails silently is a user-facing outage nobody notices.
Six European leagues. It ingests fixtures, expected-goals and odds data, builds rating and form features, and runs a gradient-boosted match-winner model nightly in a scheduler container. Its probabilities feed sharps.gg/soccer. Every scheduled run writes an audit row; a watchdog, plain-language alerts and an external dead-man check cover silent failure. Live since 2026.
Probabilities every night for six leagues, flowing unattended to a live site.
The site reads the prediction table directly, so a pipeline that fails silently is a user-facing outage nobody notices.
One scheduler container whose every run leaves a row, with three layers watching for silence.
Fixtures, expected-goals and odds data are ingested nightly; rating and form features feed a gradient-boosted match-winner model. Every scheduled run writes an audit row; a watchdog reads the rows, alerts are written in plain language, and an external dead-man check fires if the scheduler itself goes quiet.
15,728 picks graded in public at a 52.8% hit rate, matching the 52.8% average stated probability.
Lifetime, as of 2026-10-25, on sharps.gg. Trailing 30 days as read on 2026-10-29: 54.8% on 188 picks.