Skip to main content
Documentation

Running a Team League Season

A team league is a season of clubs, not players. Clubs enter, you sort them into divisions, and each division plays a round robin across the season's rounds. Everything between "I want to run a season" and "round one is open with the fixtures published" lives on one page: Manage → Season.

That tab only appears on a team-league season. If you can't see it, the competition isn't set up as one.

The order matters: registration comes first

The single most important thing about setting up a team league is the order, and it isn't the order you'd guess:

  1. Create and publish the season. In the create wizard, set Competition Type to Team League. That is the whole setup — one choice. The season is created as a league of clubs, and the single Round Robin stage that divisions and rounds hang off is built for you, so the Season tab is ready the moment the competition exists. (On an older season that was built by hand, the Season tab will tell you if that Round Robin stage is missing — add it from Manage → Stages.)
  2. Open registration. Captains enter their clubs; you approve them on the Teams tab.
  3. Close registration. The field is now frozen.
  4. Author your divisions — how many you need depends on how many clubs actually turned up.
  5. Seed the clubs into those divisions.
  6. Generate the fixtures.
  7. Set your round dates and open round one.

Divisions come after registration because both of the things you'd want to decide — how many divisions there are, and who is in each — depend on the size of the field. Eighteen clubs need three divisions; thirty need five. You can't author that before you know.

The Season tab shows you where you are in that sequence at the top of the page, and every control that isn't available yet says why.

Registration

The Season tab's Registration panel shows how many clubs are approved and how many are still waiting. The waiting count links straight to the Teams tab, where you approve them.

Close registration ends new applications. It does not end your queue — you can still approve a club that already applied, right up until you generate the fixtures. So closing early to freeze the field, and then working through the applications you already have, is a perfectly normal way to run it.

You can reopen registration if you close it too early. You cannot reopen it once the fixtures exist — see below.

Divisions

A division is a tier: Legend above Hero above Bronze. Give each one a name, a colour and a position, and use the arrows to move it up or down the ladder. The order is what promotion and relegation arrows read, so it matters — the name doesn't carry it.

Behind the scenes each division is paired with a group on the season's round-robin stage. You never have to think about that: creating, renaming and deleting a division moves the pair together. It's also why the Groups tab is read-only on a team-league season — editing a group there would break the pair.

Deleting a division is refused while clubs are still in it. Move them out first.

Seeding

Once registration is closed, the Seeding panel proposes where every approved club should start, using the previous season's final tables:

  • finished in the top places → promoted a division
  • finished in the bottom places → relegated a division
  • anywhere else → stays
  • no history here → the bottom division

How many go up and down comes from the Promoted and Relegated numbers in Season settings.

Each club shows an arrow for what Apply would change, and a reason for why the proposal put it there. Change any of them with the division dropdown — the proposal is a suggestion, and nothing is written until you press Apply seeding.

Your first season will put every club in the bottom division, and that's the rule, not a bug. With no previous season to read, no club has history, and a club with no history starts at the bottom. Set the ladder you want by hand; from next season on, the proposal has real results to work from.

If you came from a previous season, the panel names it and tells you how many of your clubs played there.

Fixtures

Each division plays a single round robin: every club meets every other club once, laid out across the season's rounds, with home and away balanced.

Before you generate, the panel tells you exactly what you'll get per division — how many clubs, how many pairings, and whether anything gets cut:

Bronze has 8 clubs and needs 7 rounds. This season has 5, so 8 of 28 pairings will not be played.

That's the normal case for an oversized division, not an error. You have three options and the numbers are there so you can pick: accept it, raise the round count in Season settings, or move a club to a different division. A division with an odd number of clubs gives one club a bye each round; byes are shown on the schedule and score nothing.

Clubs under the roster minimum are named before you generate, and generation goes ahead anyway. A short roster is a thing to chase, not a thing to block a season on — the answer to a short club is substitutes, not exclusion.

Generating the fixtures closes entry

The moment a season has fixtures, no further club can be admitted — not by a captain, not by you. That's deliberate: a club joining a division whose schedule is already published would have no fixtures to play, and every other club's schedule would be wrong.

If you need to admit a late club, clear that division's fixtures first, add them, and generate again. Clearing is per division, so a division that has already started is never reshuffled because another one took a late entry. It's refused once a division's fixtures have results or boards attached.

Clearing a division's fixtures is something you can do as the competition's organizer — you don't need organization-wide permissions for it. It is refused while the season is finished, cancelled or archived: a past season's schedule is its record.

Every club's captains are notified when the schedule is published.

The round calendar

Generating the fixtures also creates the rounds, dated from the Draft phase and Play phase lengths in Season settings: round one starts when you say, and each round follows the last.

Those dates are a starting point, and the rows are the truth from then on. Real seasons don't run on a uniform grid — rounds flex around holidays and events, and a season will happily have an 11-day round, a 13-day round and a two-week gap over New Year. So every round's window is editable, one at a time, on the Season tab. Changing the phase lengths afterwards does not move a round that already exists.

When you move a round by a fortnight and want everything after it to follow, tick Shift every later round by the same amount rather than retyping four dates.

Moving a round after the schedule is out

If the round already has fixtures, its captains have already been told when it runs. So the save asks first, with the real numbers:

This moves the round window for 6 fixtures. 12 captains will be notified.

Confirming saves the change and re-sends the schedule to exactly those captains. Cancelling changes nothing. Times in those notifications are written in the season's timezone — if the season doesn't have one set, they're written in UTC, so set it when you create the season.

Rounds open themselves at their start time. You can also open one early with Open now.

Withdrawing a club

If a club folds mid-season, withdraw it from the Clubs in this season list. Two things happen, and both are the point:

  • every fixture it has not yet played is awarded to its opponent as a walkover, and the standings are rebuilt;
  • results it has already played stand — the clubs that beat them keep those wins.

The second half is why withdrawal isn't the same as deleting the club: clubs that already earned a result against them shouldn't be punished for a team that left later. The affected opponents' captains are notified.

Season settings

| Setting | Default | What it does | | ---------------------------- | --------- | ------------------------------------------------------------------------------------------------------ | | Rounds | 5 | fixture rounds in the season. Locks once fixtures exist — the published schedule was built from it | | Clubs per division | 6 | the seeding proposal's target. Advisory: the bottom division absorbs the remainder | | Draft phase | 3 days | round opens → lineups due. A default for the date generator | | Play phase | 8 days | lineups → results due. Same | | Promoted / Relegated | 2 / 2 | drives next season's proposal, and the zones on the public standings | | Points | 2 / 1 / 0 | win / draw / loss, read every time the standings are rebuilt | | Minimum roster | 7 | warns on the Teams tab and before generation. Never blocks | | Minimum per board | 2 | same | | Board wins to take a fixture | 4 | used when fixtures start completing |

Promoted and Relegated also light up the promotion and relegation zones on the public standings table, so spectators can see who is going up and down.

The round loop

Once a round opens, each club's captain submits a sealed lineup — six places, 1a to 3b — on the fixture's own page. Neither club sees the other's until both are in; then both open together. That is the whole point: a lineup you can see before you commit yours is not a lineup, it is a counter-pick.

Lineups are due a fixed number of hours after the round opens (Season settings → lineup window, 24 hours by default). The deadline is worked out from the round's start date, so if you move a round, the deadline moves with it — and the notification captains get about the move tells them the new one.

If a deadline passes with a lineup missing, nothing is filled in for them. The fixture is flagged and appears in your Pending lineups section. You enter or approve the late lineup yourself, with a reason, and the pair opens then. A late lineup entered this way skips the board-matrix and roster checks on purpose — emergency substitutes are often outside both — and records whether it would have passed.

Closing a round is yours, not a timer's. Close it when you have the results you are going to get; the console tells you how many fixtures are still unfinished but never stops you. Closing marks the round complete, refreshes the standings, and runs the ban engine.

Bans

Bans are public. Spectators see them, captains plan drafts around them, and every one of them carries a reason.

| Source | Who writes it | What it means | | ---------------- | ------------- | ------------------------------------------------- | | Permanent | You | out of the pool for the whole season | | Captain vote | You | the captains voted it out; you record the outcome | | Organizer | You | any other call you need to make | | Performance | The engine | a fighter won enough games in the closing round | | Most played | The engine | one of the most-played maps of the closing round |

The engine owns the last two and replaces them wholesale each time a round closes. You can still shorten, lengthen or delete one — that is the override, and it is deliberate. What you cannot do is convert a hand-written ban into an engine one or the reverse: the database refuses it, because the next recompute would eat the hand-written row. Delete and re-add instead.

Recompute re-runs the engine for an already-closed round, which is what you want after a late result lands. If the new list differs from one an already-open round is running on, the affected fixtures are flagged into Ban review rather than being rewritten under the captains — a draft may already have been planned around the old list.

What isn't here yet

  • Create next season from this one is on the Season tab but not built. When it lands it will copy your divisions and their order — not the clubs' entries, because captains re-enter each season — and this season's final table is what next season's promotions and relegations are proposed from.
  • Board-level results and the draft record are a later release. Lineups, bans and the round loop are live; what each board actually played is still reported through the ordinary match flow.