Champion Ascendant

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.

Bars start at the coin-flip line.

Stack

PythonFlaskJavaScriptHTML and CSS pytestGitHub ActionsRailwaypandasExcel