How it's built
Python scoring behind a Flask API, a plain JavaScript front end, and automated tests that recheck every published score on every change.
From record to page
RecordsTapology first, then Sherdog
ScoringPython, kept private, the only place a score is calculated
APIFlask endpoints for the calculator and Top Prospects
PagesHTML, CSS and JavaScript, deployed on Railway
Prospectsevery published score recomputed APIbad input rejected with a clear message Pagesevery page loads, no stray code or stale labels CIGitHub Actions on every change
Tested against the right target
The UFC score is meant to describe who gets invited to the Contender Series. Tested against invites, win streak turned out worse than a coin flip, while finishing was the strongest signal. Rebuilding around that improved the whole formula.
AUC: how well a score ranks invited fighters above the rest. 0.5 is a coin flip, 1.0 is perfect.
Current formula0.686
Finish rate alone0.637
Previous formula0.628
Win streak alone0.485
Stack
PythonFlaskJavaScriptHTML and CSS
pytestGitHub ActionsRailwaypandasExcel