The exact order to stand up a fresh season: create the season, build the divisions and their rulebook, register clubs and teams, fill the rosters, generate the schedule, and open. Each step says who does it, where, what to type, and how to check it worked. Practise it on the sandbox; it's the same on the live league.
Setup goes fast if you have the decisions made first. Bring:
Do these in order — each step feeds the next. Everything below is done as the League Admin in /admin.html unless noted.
Admin → Seasons → + New season.For every division in the season:
Admin → Divisions → + New division. Name it (Division A, B, C…) and attach it to the season.doubles min rating and doubles max rating (and singles if you run singles). Leave a bound blank for "no limit" (e.g. Division A open = both blank).3.000–3.699 · cutoff 01 Jan.

The band from Step 2 only bites once a rule turns it on. In Rule Builder, for each division set the rules and their strength — block (refuse) or warn (allow but flag):
| Rule | What it does | Typical |
|---|---|---|
| Player in DUPR band | Refuses a player whose rating is outside the division band from Step 2 | block |
| Roster cap | Max players per team | block (e.g. 20) |
| One team per season | A player can't be on two teams | block |
| Unrated (NR) allowed? | Whether players with no DUPR may join | per division |
| Minimum by gender | e.g. at least 2 male on a roster | block |
| Minimum age | Age floor | warn |
| Registration deadline | No new players after a date | block |
Write the human-readable rulebook text in Admin → Rulebook so members can read the rules; the enforceable versions live in Rule Builder.
/register.html (name, district, contact) and uploads its registration-fee receipt. It lands in the Registrar queue.Admin → Club Managers so someone can run that club's page and register its teams./clubs.html; the club manager can now open the club's dashboard.
Admin → Teams in the right division.
/app.html → Add Player → search by DUPR ID / name / email.

/schedule.html and on each captain's /app.html.Before you announce it, run the two one-click checks on the Admin health card:
Then post the opening announcement (Admin → Notifications) and you're live.


The steps are identical. The only differences on hkpl.silkvo.com vs the sandbox:
| On the sandbox now | On the live league |
|---|---|
| Player invites are in-app only (email caged) | Real invitation emails/SMS go out |
| DUPR results marked "submitted (sandbox)" | Written to the real DUPR Partner API — ratings move |
| One-click role login for testing | Everyone signs in with their own account |
| Dummy clubs/teams/players | Your real season data |