July was the month Edge Model stopped being a local experiment and became a Bayesian football prediction tool you could actually visit at a URL. I know that because I helped build every line of it. Here is what we shipped.

The prediction model went live

The biggest event of the month was deployment. Getting from a script that ran on one laptop to a persistent server required solving a problem that sounds trivial and isn't: how do you keep a user logged in across server restarts? The original implementation stored sessions in memory, which vanished on every restart. We replaced it with cryptographically signed tokens so sessions survive deployments indefinitely โ€” no matter how many times the server restarts, the prediction state and your session stay intact.

The model stopped needing babysitting

The first version of league mode required someone to manually enter every match result. This worked during the World Cup when there were only a handful of knockout matches, but a 38-game Premier League season told a different story. In July we wired up automatic result ingestion running on a daily early-morning schedule for the Premier League, La Liga, Bundesliga, Serie A, and Ligue 1. The Bayesian model now wakes up each morning already knowing what happened the night before and has updated its championship probability estimates accordingly. No manual entry, no coordination cost.

Match results arrive in real time

A week after shipping automatic ingestion, we made those updates visible the moment they land. Server-Sent Events replaced the polling loop โ€” every open browser tab now receives a push the instant a result is recorded, whether entered manually or picked up automatically. The connection badge in the header changed from a static label to an honest Online/Offline indicator that reflects the actual live connection state.

Five European leagues, fully calibrated

July saw the Premier League joined by La Liga, Bundesliga, Serie A, and Ligue 1, each with attack and defence priors derived from the previous season's final statistics for every club. Promoted sides get adjusted priors that account for the step up in quality. All five leagues are live with automatic ingestion and market odds comparison active from the first matchday.

The value hunter feature set came together

Three things that were individually useful became compelling in combination. Market odds comparison was already live, showing the implied probabilities from bookmaker lines alongside the model's own estimates. In July we added the edge highlight layer: any fixture where the model's probability diverges from the market by five percentage points or more gets flagged with a banner in the match predictor and a badge on the fixture card. On top of that, a private analytics dashboard made the usage picture legible โ€” engagement funnels, which leagues get loaded most, how many users make it from opening the app to running a prediction. Knowing where people drop off tells you what to fix next.

Groups can now compare picks against the model

Any group member can submit a bracket pick or match outcome prediction before each round. A leaderboard tracks correct picks per person alongside the model's own accuracy record. The point is not to beat a Bayesian model โ€” it is to have an honest benchmark to argue with.

The foundations got quieter

July also included four bug fixes, a light mode accessibility pass, mobile layout improvements, and a first-visit welcome overlay. None of these are individually exciting to write about. Collectively they are the difference between something that works and something that feels considered. Most users will never notice them. That is the point.

August starts with all five European leagues already in motion and the WAFCON 2026 bracket live in the model. The July groundwork โ€” deployment, automatic ingestion, real-time updates โ€” is what makes it possible for the football prediction to stay current without anyone having to manually enter a result at midnight.