A lightweight padel tournament app. Supports Americano (rotating partners, point-based) and Mexicano (pairings adapt by standings).
- Americano — round-robin rotation, configurable points per game, live leaderboard
- Mexicano — dynamic pairings based on standings, no bench players
- Join by 4-character session code, no account required
- Real-time score updates via SSE (with a polling fallback for buffering proxies)
- Push notifications when a tournament starts (PWA)
- User accounts with career stats split by game mode
- Backend — Go, SQLite (via
mattn/go-sqlite3), deployed on Fly.io (Stockholm region) - Frontend — SvelteKit 5, Tailwind CSS, Bun
- Auth — JWT, bcrypt password hashing
.
├── cmd/server/ # Entrypoint
├── internal/
│ ├── api/ # HTTP handlers and router
│ ├── domain/ # Shared types
│ ├── gamemode/ # Game mode services (americano, mexicano)
│ ├── store/ # SQLite queries
│ └── ui/ # Embedded SvelteKit build
└── web/ # SvelteKit frontend
└── src/
├── lib/
│ ├── api/ # API client
│ ├── components/
│ └── i18n/ # English + Norwegian
└── routes/
# Terminal 1 — backend (serves API on :8080)
make dev/api
# Terminal 2 — frontend (proxies API, serves on :5173)
make dev/webmake build # builds frontend then compiles Go binary to bin/openpadelfly deployThe database is persisted on a Fly volume at /data/openpadel.db.
make db/reset # clear all game data (keeps user accounts)
make test # run Go tests
make fmt # format Go + frontend