Config Hierarchy
Most settings in Staty live in a config object that is shared by four levels of the entity tree. When Staty needs a setting’s value for a given division, it resolves it by walking from the most specific level to the least specific and taking the first level that has a value set.
Precedence
division > league > tournament > registrationThe most-specific level with a value wins. If a division doesn’t set a field, the league’s value applies; if the league doesn’t either, the tournament’s does; and so on. A field left unset everywhere falls back to its default.
This lets you set a sensible default high up (e.g. on the tournament) and override it only where it differs (e.g. one division with a different capacity).
A value only “wins” if it is actually set. Setting a field on a division overrides the same field inherited from its league or tournament.
Common config fields
| Field | Purpose |
|---|---|
capacity | Max teams in a division (0 = unlimited). |
hasWaitlist | Allow paid overflow registrations beyond capacity. |
autoPromote | Automatically seat the next paid waitlisted team when a spot opens. |
minPlayers / maxPlayers | Roster size bounds. |
showStats | Whether stats are visible to the public. |
statDisplayMode | Public aggregate stats as per-game average or season total. |
gameStats | The stat columns tracked, keyed by sport. |
hideStandings | Hide the public division Standings tab (independent of hideSchedules). |
Registration-only exceptions
A few fields are not resolved through the hierarchy — they are read directly from the registration and should only be set there:
isTestMode— the registration’s Test Mode switch.gateByStartDate— publish a registration page publicly while keeping sign-ups locked untilstartDate(see Manage Registrations).gateByEndDate— close new sign-ups afterregistration.endDatewhile keeping the page (and existing teams) fully visible and editable (see Registration End-Date Gate).showAllRegistrationTeams— show the public “Teams by Division” roster on the registration details page.
Both date gates are interpreted and displayed in the registration’s single timeZone (an IANA name like America/Los_Angeles) — the comparison itself uses absolute instants, so it’s timezone-correct everywhere.