Studio Italica
← All work

Case study · Sports analytics

Betplanners

A football analytics platform that turns 316,000+ matches into clear probabilities, in 7 languages.

Industry
Sports analytics · International
Our role
Design, development, hosting and maintenance
Year
2025
Betplanners homepage
01

The problem

Most football predictions are opinions. Betplanners starts from data: statistical models (Elo, Poisson and recent form) applied to every match to produce probabilities for 80+ markets and compare them with the odds.

02

What we did

Design

  • Match pages with the model’s reading
  • Team rankings and odds comparison
  • Light and dark mode, designed mobile-first

Logic

  • Elo, Poisson and form models across 316,000+ matches
  • Probabilities for 80+ markets
  • Rankings, alerts and odds comparison
  • Paid subscriptions

Infrastructure

  • Next.js 16 and React 19 with TypeScript, Tailwind 4 and Radix/shadcn components
  • 7 languages with next-intl: English, Spanish, Brazilian Portuguese, Italian, French, German and Polish
  • FastAPI with SQLAlchemy, Alembic and PostgreSQL
  • Models built with pandas, NumPy, SciPy, scikit-learn and LightGBM; scheduled jobs with APScheduler
  • Stripe subscriptions, NextAuth sign-in, Docker on Hetzner and Sentry
03

Technical decisions

Statistical models, not opinions
Elo, Poisson and recent form computed over the full match history: every probability has a method behind it.
Seven languages from the ground up
With next-intl, the interface and content are served in English, Spanish, Brazilian Portuguese, Italian, French, German and Polish.
Model training kept apart from the site
The LightGBM models are trained in a separate pipeline from the server that runs the website, so training never slows users down.
Odds collected with a headless browser
Bookmakers load their odds with JavaScript, so they aren’t in the HTML — they’re collected with Selenium instead.
04

Screenshots

Match page with probabilities
Match page. The model’s reading, 1X2 probabilities and a confidence level.
Team rankings by league
Rankings. A 360 score per league built from attack, defence, form and solidity.
Betplanners homepage in English
In English. The same platform in one of its 7 languages.
Betplanners match page on a phone

On the phone, too

Match pages, rankings and alerts, designed to be checked on a phone.

05

Outcome

The platform is live at betplanners.com and we maintain it.

automated tests, run in CI against a real PostgreSQL
7,700+
public pages in the sitemap, across 7 languages
10,000+
competitions with a season in progress
60+
predictions used to validate model calibration out of sample
500,000+

Figures checked against the code and production in November 2026.

Visit betplanners.com ↗

Stack: Next.js 16 · React 19 · TypeScript · Tailwind 4 · Radix/shadcn · next-intl · NextAuth · TanStack Query · FastAPI · SQLAlchemy · Alembic · PostgreSQL · pandas · NumPy · SciPy · scikit-learn · LightGBM · APScheduler · Selenium · Stripe · Sentry · Docker · Hetzner

Need something like this?

Tell us about it in 20 minutes and we’ll tell you how we’d build it.