A full-stack web app to manage a summer rounders tournament.
The backend is written in Python using Flask and Jinja2 templating, and the frontend uses a small amount of htmx. The database is SQLite, and the SQLAlchemy Python library is used to interface with it.
Requires Python >= 3.11.
- Install the project using the
pyproject.tomlfile. I highly recommend using uv for this. - Create a
.envfile to define needed environment variables in the formatENV_VAR=....SECRET_KEY-- generate according to the flask documentationADMIN_PASSWORD_HASH-- generate usingwerkzeug.security.generate_password_hash, docs here
- Run with a WSGI server (e.g. gunicorn) or debug with
flask --app rounders:app run --debug.
-
GET/: The homepage -
GET/rules/: Rules of the game -
GET/teams/: Get a list of all teams -
*
GET/teams/create/: Get the form to create a team -
*
GET/teams/<int:id>/: Get a single team -
*
GET/teams/<int:id>/edit/: Get the form to edit a team -
*
POST/teams/: Create a team -
*
POST/teams/<int:id>/edit/: Edit a team -
*
POST/teams/<int:id>/delete/: Delete a team -
GET/matches/: Get all matches -
*
GET/matches/create/: Get the form to create a match -
*
GET/matches/<int:id>/edit/: Get the form to edit a match -
*
POST/matches/: Create a match -
*
POST/matches/<int:id>/edit/: Edit a match -
*
POST/matches/<int:id>/delete/: Delete a match -
GET/photos/: Get a view of all the posted photos -
*
POST/photos/: Create a photo entry -
*
POST/photos/<int:id>/delete/: Delete a photo entry
* Requires authentication as the administrator