Let’s be honest: there is nothing quite like the feeling of moving a machine learning model off a messy local Jupyter Notebook and seeing it live, breathing, and clickable on the internet.

A few weeks ago, I decided to tackle a fun challenge: predicting the knockout stages of the upcoming 2026 FIFA World Cup. Instead of just looking at standard text readouts on my terminal, I wanted to build a complete, interactive visual experience that anyone could play with.

Here is the story of how I built the data pipeline, why I chose my model, and the cheeky trick I used to keep the app online 24/7 for free.

I wanted to keep this workspace modular and clean. Instead of one massive script that does everything, I split the workflow across four dedicated stages:

The Ingestion (01_data_alignment.ipynb): Cleaning up raw data and aligning historical match histories.