Skip to content

Leagues & rules config

Meet behavior — seeding, lane assignment, scoring tables, age groups, max-events caps — isn’t hardcoded. It’s league configuration that cascades down to templates and meets.

League → Template → Meet. The league holds the default rule set; a template can refine it; an individual meet can override per-meet settings. A meet resolves its effective rules from this chain, and the app can show which level a given value came from.

  • Age groups and the age rule (e.g. age as of June 15 of the season).
  • Event catalog and event programs — the events, order, and age groups the meet wizard offers as league programs (and that you can materialize into stored templates).
  • Per-meet-type seeding & lane policy — team lanes for league (dual/tri) meets, championship circle-seeding, time-trial straight seeding, tie-break choice, and lane-assignment recipes (including 4+-team fields). A meet itself carries a category (league / invitational / championship / time trials); whether a league meet runs as a dual or tri is derived from its team count, and the config sections here are keyed by those types.
  • Scoring tables — separate tables for dual/tri vs. championship, with a per-meet override available on any meet’s Details tab.
  • Max events caps.

Admins edit the rulebook from the league admin screens — either the guided setup wizard or the section-by-section editor — and can export/import the whole config as JSON or YAML (handy for publishing a league’s rules for other clubs to import). Saves are conflict-checked (two admins can’t silently overwrite each other) and recorded in the audit log. Each meet takes a frozen snapshot of the rulebook at creation, so mid-season rule edits never change a meet that already exists — new meets inherit the current league defaults.

For the end-to-end path from an empty instance to a scheduled season, see League setup from scratch.