Skip to content

← Work

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.

v0.4.0 · Oct 2026Python engine + Next.js siteEnglish and Spanish

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.
Video poster · the final leaderboard · MP4 1080p · controls, no autoplay · WebVTT EN + ES

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.
Screenshot · the home page's matrix, light · 640 wide @2x

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.
Screenshot · /try with a CSV mapped and the light models' results

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.
Screenshot · a published run's page: versions, seed and hashes

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.