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
- Website
- betplanners.com ↗


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.
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
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.
Screenshots




On the phone, too
Match pages, rankings and alerts, designed to be checked on a phone.
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