Ruled Out
Football injury news across three leagues. It reads public reports, labels every claim by its source, and shows who’s out, doubtful or returning.
Beta
- Claude Code
- Claude Haiku








Why I built it
Injury news is scattered across club statements, journalists and fan accounts, in many languages. A fan can’t easily tell what’s confirmed and what’s rumour, or when a player is actually expected back.
- 3leagues: Premier League, La Liga, Bundesliga
- 58teams covered
- $0.70daily cap on AI spend
What I did
The AI reads; fixed rules decide.
One AI step: Claude Haiku pulls claims out of articles. Everything after that is rules, and unsure claims go to a short daily review.
- AI step
- Code
- A script watches about 265 news feedsClubs, journalists and leagues, in several languages, every few minutes.
- Filters keep only injury newsArticles about a known player’s injury stay; the rest is dropped.
- Claude Haiku reads the articleIt pulls out the claim: which player, what injury, how sure the source is.
- Fixed rules check the answerThey decide what the site shows. Unclear claims go to my review inbox.
- The site rebuilds every 5 minutesWith the source named on every claim.
One AI step. Everything around it is code you can test. Switch models on evidence.
A cheaper Haiku only replaced the old one after passing two runs on a 125-item hand-labelled test set.
Before Run 1 Run 2 Claims found 79.1% 86.2% 81.4% Values right 95.5% 95.9% 96.1% Wrong players 0 0 0 Cost per call $0.0041 $0.00076 $0.00083 Haiku 4.5 against Haiku 5.5 on the same labelled set. About five times cheaper, no wrong players. Show the source, not just the claim.
Every claim is labelled Official, Reported, Match data or Unverified. Conflicting reports sit side by side, and stories name their sources in the sentence.


The boards are the spec.
The first build passed its own checks but didn’t match the design. I had it rebuilt as a strict comparison: every element, within 1px, at 7 widths and in both themes. 17 boards now match within 0.22%.

Dark 
Light
More screens









![Ruled Out: Sources named in the sentence, not [1] markers](/_next/image?url=%2Fshots%2Fruled-out%2Fsheet-sources.webp&w=3840&q=75)

Drag or scroll to browseSwipe to browse
What I learned
- Claude APIClaude Haiku pulls claims from articles; a labelled test set decides any model switch.
- Cloudflare Pages and DNSA static Next.js export, redirects and email routing on Cloudflare.
- Playwright visual checksEvery page compared against the design boards, at 7 widths and in both themes.
- Background jobsA Node and SQLite engine running as a background service.