Side project · Python + Next.js · Private repo
MAPE Tournament
Eight demand-forecasting models compete on a restaurant's daily sales, judged day by day by MAPE. Built for restaurants; the same engine fits any business with daily demand.
Demo
The tournament in 21 seconds
Every day each model forecasts tomorrow's sales of every dish, and the lowest error wins the day. After 25 days, SARIMAX with weather finishes first at 33.4% MAPE, 6.6 points under the same-weekday baseline. The numbers in the video are the published run's own.
01 · Matrix
Who forecast best each day?
A table, not a chart: one row per day, one column per model, the MAPE printed in every cell and the colour only repeating it. ND is written out and never counted as zero; a failed cell and a short-history cell each have their own treatment.

02 · Local-first
Your sales never leave the browser
On /try a visitor drops a CSV and maps its columns, and the three light models run in a web worker — ported to TypeScript and held to the Python engine by a parity test. Nothing is uploaded, and error reports strip the file.

03 · Engine
Deterministic by rule
Python 3.12 with uv, ruff and pytest. No global randomness, pinned seeds, one thread: two runs on the same inputs give byte-identical results, and a model that cannot promise that does not join the roster. The engine is never deployed; the site reads published runs.

The repository is private; the site, every published run and its numbers are public and checkable.
Next
Keep your codebase verifiable. Get your mornings back.
Open to senior frontend roles and contract work, remote across Europe. A 30-minute call on your own codebase, no slides.