Build Story · MMA stats experiment · EN
OctagonStats: an MMA data experiment
An independent archive of three decades of MMA results, with a win-probability model that logs its picks. Formerly UFC Stats Archive.

In one look
The problem
MMA results are spread across many sites, one promotion at a time. And a prediction means little if nobody checks it against what happened.
What we built
OctagonStats puts three decades of results from UFC, Bellator, ONE, PFL, KSW and Rizin in one archive: fighters, events, rankings, champions, bonuses and scorecards. A win-probability model sits on top. The site says it logs every pick and grades it against the closing betting line, with no tipster fees and no sportsbook affiliate. Its data comes from public sources the site names.
Where it is now
An experiment, live and free to browse. The home page says the live model record appears once at least 20 picks are graded, and until then it shows a paper-trade backtest. The site calls the model decision support, not betting advice, and says it is often wrong. Restyled in September and given a security pass in October, which is the last commit. An independent project, not affiliated with or endorsed by the UFC.
What this would have cost in 2024
About $15k and 5–7 weeks
2024 team: 3 people: data engineer, full-stack developer, designer. Built here by one founder working with AI in 1 week.
| Piece | 2024 hours |
|---|---|
| Data collection: scrapers, backfills and scheduled jobs for several sources | ~93 |
| Archive app: fighter, event and promotion pages, rankings, champions, bonuses, scorecards, search, accounts and favourites | ~137 |
| 30+ analytics pages and the Elo win-probability model with graded picks | ~105 |
| Weekly email digest, data-integrity tools, share images and the arena restyle | ~53 |
| Total (PERT) | ~388 |
Method: PERT (O+4M+P)/6 per piece; low = O × $25, likely = PERT × $37.5, high = P × $50 (Accelerance 2024 Eastern-Europe band). These are estimates of what a team would have needed in 2024, not invoices.
How it was built
From first commit to current build in 1 week
- First day: the archive
Fighter pages, rankings, champions, bonuses, weigh-ins, search, and accounts with favourites, built on a public UFC results dataset plus scraping jobs for more sources.
131 commits in one day · 2,424 bonus entries - Beyond the UFC
Fights from other promotions were scraped into the same archive, and every fight row was linked to a fighter, so one fighter page can show a career across promotions.
5 of 7 outside promotions scraped in a day - The model and the analytics
A win-probability page, an upset detector, closing-line tracking and a weekly email digest, with the analytics section growing page by page.
352 commits in one day - Picks built to be graded against the closing line
Model picks with probabilities, a Methodology page that writes the Elo equations out, a Manifesto page, a live-card page and a data-integrity dashboard. All promotions were re-scraped.
350 commits in one day · 1,020 in seven days
Who did what
The founder decided
- No tipster subscription and no sportsbook affiliate: the site states both.
- Every pick is graded against the closing line, and the live record waits for 20 graded picks.
- A plain Elo rating, with its equations written out on the Methodology page.
AI built and checked
- The app, built in Lovable from Ilian's prompts: 1,046 of the repo's 1,049 commits are the Lovable agent's.
- The scraping jobs, set up with Firecrawl, and the Elo model were built the same way.
Stack
Want something like this for your team?
From one call to something live. The same method is in the Claude Operator Pack.
From the founder
You might also like
Shares TanStack Start · React

Shares React · TanStack Start

Shares React · Supabase