The itch I needed to scratch

I’ve been playing padel for a couple of years, and something started to annoy me: the tournament apps I tried were either riddled with ads, locked behind paywalls, or bloated with unnecessary features.
I just wanted to have a simple way to organize local tournaments, especially Americano-style tournaments we love playing with our group.
So like any Web developer, I said: “Fine. I’ll build my own.”

Enter RegiaPadel.com 🎾💻

The philosophy: Keep It Simple Stupid (KISS)

I designed RegiaPadel.com around a few strict principles:

  • No frameworks: Pure vanilla JavaScript.
  • No build step: Just open index.html and go.
  • Ultra-fast and offline-capable: Using localStorage for persistence.
  • No tracking, no ads, no nonsense.
  • Single-page application (SPA) with old-school simplicity.
  • SOLID principles + TDD practices.

This wasn’t just about building an app. It was a test of how lean and powerful a modern browser-based project can be.

Core features

Here’s what RegiaPadel is planned to do:

  • Create and manage Americano padel tournaments
  • Automatic match scheduling and court assignment
  • Track scores and display real-time leaderboard
  • Semi-finals generation once group play is complete
  • Data persistence with localStorage
  • Responsive design for mobile/tablet/desktop
  • Dark mode + Accessibility
  • Export/import tournaments as JSON
  • Load as a fully static site. No backend!

Almost all features are completed now, but I plan to add more in the future based on your feedback.

My favorite hacker-friendly features

🏟️ Balanced match distribution

The biggest algorithmic challenge was ensuring balanced match distribution across courts, minimizing repeat matches, and making sure everyone played fairly.

🕒 Persistent countdown drawer

A persistent countdown drawer was implemented at the top of the page, providing users with a clear and constant view of the time remaining on each round.

Persistent countdown drawer

⏳ Score picker & countdown timer

This might sound trivial but designing an intuitive score picker with touch-friendly controls and an accurate countdown timer for match play added a level of polish I’m proud of.

Score picker

If none of the pre-defined scores fit your needs, you can always add a custom score.

Custom score

📦 File structure (KISS style)

Here’s how the project is structured:

├── index.html
├── src/
│   ├── js/
│   │   ├── models/
│   │   ├── services/
│   │   ├── utils/
│   │   ├── components/
│   │   └── app.js
│   ├── css/
│   └── templates/
├── public/
│   └── assets/
└── tests/

No bundlers, no Webpack, no Vite. Just a plain python -m http.server is enough to serve and develop the app.

How to run it locally

If you want to explore it:

python -m http.server
# or
npx http-server

Then open http://localhost:8000

Tech stack

  • Vanilla JS (ES modules)
  • localStorage for persistence
  • HTML/CSS with no frameworks
  • JSDoc for lightweight type annotations + documentation
  • Manual testing + automated TDD unit tests

What I learned

The experience taught me:

  • Modern browsers are incredibly capable if you don’t overload them.
  • Sometimes less is much more.
  • By stripping down frameworks, I delivered an app that loads instantly and works offline.

Future ideas

I may consider open-sourcing RegiaPadel at some point.
There’s also room for:

  • A Progressive Web App (PWA) upgrade
  • A public tournament sharing feature
  • More granular scoring rules per country/clubs

Closing thoughts

I built RegiaPadel.com because I needed it.
But I hope it inspires others to rethink whether they truly need to reach for a framework or backend when building small utility apps.
The browser is the ultimate runtime, and with just JavaScript + localStorage, you can deliver powerful apps at scale.

👉 Visit RegiaPadel.com

If you want to build something similar or want me to expand on any part of the journey, let me know on X or drop me a message!