Setting Up a Project
Adding entries
Participants are attached to a project as entries, edited under the
project's entries list. Each entry has an entry_kind — team, person,
or group — which determines which fields apply: team_id for a team
entry, person_id for an individual, or a free-text display_name for a
group entry. An entry_code is also available regardless of kind.
Which kinds are actually valid depends on the project's sport profile: the
profile's entry_model.allowed_kinds list restricts which of the three
kinds can be saved, so a profile built for an individual sport can reject
team entries (and vice versa) even though the edit form always offers all
three options.
Each entry also carries competition-level settings: seed_number,
bib_number, an included_in_standings switch (on by default), and a
lifecycle_state — active, inactive, withdrawn, or disqualified,
defaulting to active. The entries list can be searched and filtered by
lifecycle_state.
The Project Panel
The Project Panel is a per-project dashboard (reached with a project_id
in the URL — it redirects back to the projects list if none is given) that
summarizes the project's state at a glance. It shows two kinds of numbers:
override counts (how many project rules and how many project template
fields currently have a project-specific override saved) and aggregate
counts (stages, entries, officials, rounds, and matches belonging to the
project). Edit actions on the panel are only available to users with
core.edit permission on the project.
Project rules
Project rules let a single project deviate from its sport profile's
default configuration. The rules form isn't a fixed set of fields — it's
built at runtime from the sport profile's project_rule_schema, so the
available rules differ from one sport profile to another. Each rule gets
an "override enabled" checkbox alongside a value field typed to match the
rule (a switch for booleans, a number field with min/max for numeric
rules, a list for enumerated values, or text otherwise).
Leaving a rule's checkbox unchecked means the project simply inherits the sport profile's own value for that rule. Checking it and setting a value stores a project-specific override; only checked rules are persisted.
Project templates
Project templates work similarly to rules — a dynamically generated form of overridable fields, one group per template — but they resolve through an extra layer. A template field's value comes from three possible levels, in order: the template's own built-in default, then a sport-profile-level override (if the profile defines one), then a project-level override (if this project defines one). The templates screen shows both the inherited value (what the project would get without its own override) and the effective value (what actually applies) for each field, so you can see exactly what a project-level override is changing. Submitted values are validated against the template's definition before being saved.
Preflight
The preflight check reports whether a project is ready to run. It evaluates six independent areas — profile, entries, stages, schedule, officials, and results — and returns a list of checks per area, each marked as an error, warning, success, or informational note.
A project is considered ready only when there are zero errors; warnings do not block readiness. The officials area is an exception in two ways: it's only evaluated at all if the sport profile defines official-type positions, and any issue it finds is reported as a warning rather than an error, so missing officials never blocks a project from being ready.