Small app to keep track of Padel matches
Padel Tracker is a small app to keep track of Padel matches and allow analysis of the progresses of a group of friends over time.
It provides player rankings using an Elo-based system and maintains a history of matches, teams and individual performances.
The application is hosted on Streamlit Community Cloud and can be used on web browser or mobile
➡ https://poulpe-padel-tracker.streamlit.app
- Player and Team Management: Add, update, and check player and team statistics.
- Match History: Record match results (date, teams, scores)
- Elo Ranking System: Calculate player rankings dynamically based on match results with a bonus system vs won games difference. Every single point counts !
- League Management: Ability to group players within a league, to follow/compare only your mates (player can also belong to several leagues)
- Data Persistence: Uses a PostgreSQL database hosted on Supabase. Can also be used in
local
mode to avoid any need of hosting database online. - 8000 Interactive UI: Built with Streamlit, providing an intuitive and responsive interface in a web browser.
- Visualization: Charts and tables for ranking history and match statistics.
- Multilingual Support: English, French and Español
- User management: User authentification using OIDC provider
- Backend: SQLModel (SQLAlchemy + Pydantic)
- Frontend: Streamlit with modular pages and navigation
- Database: PostgreSQL (Hosted on Supabase)
- Database migrations: Managed with Alembic
- Logging: Logs are stored in Supabase for tracking application events
- User authentification: Through the OpenID Connect (OIDC) provider Auth0, supporting email/password and Google account. OIDC is supported by Streamlit from
v1.42
.
- Loggings
- Overall stuff
- UI
- Basic Streamlit tuto
- General layout
- Graphs
- Export data as .csv ?
- Users
- Manage users (authentification, access...)
- User auth / login/logout in UI
- Database
- Deletes
- Migrations
- Get 'data' online
- Analytics
- Best teammate
- Best rival
- nb_games per Match
- Other stats (V/D ratio)
- Like select player, it shows these analytics
- Leagues
- Allow several league
- League description ?
- Manage league ? (i.e: league admin to add/remove players, rename league)
- Tests
- Not the funniest part, but, eh...
- Feedback
- "Report bug" form
Database migration = models changed, how to reflect it on current database "automatically"
Migrations has been configured with Alembic
- Init
alembic revision --autogenerate -m "first revision"
alembic upgrade head
- Anything has been changed to models
alembic revision --autogenerate -m "added new_field to Player"
alembic upgrade head
To run the application locally, you need to set up environment variables in a .env file for secret management. Below is the required structure:
# Run parameters
log_level_console=INFO
db_mode=local # "local" or "cloud"
run_mode=test # "test" or "prod"
# Cloud database related (not needed if you just run locally)
user=my_database_user
password=my_database_password
host=my_database_host
port=my_database_port
dbname=my_dbname
supabase_api_url=my_api_url
supabase_api_key=my_api_key
If you set db_mode
to local
, it will just create/read/update a local database in data/
folder, so you don't need to have a database if you want to only do locally.
Note: secret management for the streamlit hosted app is done via the dedicated
streamlit secret management method.
The app is looking in priority if any .env
file is defined,
otherwise it falls back to checking if an .streamlit/secrets.toml
file is there.
- Clone the repository
- Make sure
uv
is installed on your setup - In a terminal, go to folder and run the project via typing this command:
(it will install project automatically if not already installed)
uv run padel-tracker
Note: this actually runs the following command inside a venv:
streamlit run src/padel-tracker/ui/streamlit_app.py
© 2025 Padel Tracker