Features included:
- Multiple divisions
- Seeded teams (seed=1 strongest)
- Automatic balanced pool generation using snake seeding
- Pool standings with 2/1/0 scoring (win/draw/loss) and common tiebreakers
- Qualification to knockout from pool standings (top N per pool)
- Knockout reseeding carried from pool performance (points → PD → For → original seed)
- Automatic seeded knockout Round 1 generation (byes supported)
- Controller login (setup tournament/divisions/teams/pitches/matches)
- Recorder login (enter results) + recorder queue shows team names
- Public schedule with filters (division, pool vs knockout, pool filter)
- Public standings page
- Pitch map upload (image)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
export FLASK_APP=run.py # Windows PowerShell: $env:FLASK_APP="run.py"
# initialise DB + create default tournament
flask init-db
# set your controller/recorder passwords (recommended)
python seed_passwords.py --controller-pass "YourStrongPassword" --recorder-pass "AnotherStrongPassword"
flask runOpen: http://127.0.0.1:5000
flask init-db creates users if missing:
- controller / change-this
- recorder / change-this
You can change these via:
python seed_passwords.py ...(preferred)- Controller dashboard → Users (change password)
Scoring:
- Win = 2
- Draw = 1
- Loss = 0
Tiebreakers:
- points
- head-to-head points (among tied teams)
- head-to-head points differential (among tied teams)
- overall points differential (PD)
- overall points-for
- original seed (lower is stronger)
- team name
- Datetimes are stored as naive local times for simplicity.
- Knockout generation currently generates Round 1 only.