Competios → A season
A season
One league. One table. Always right.
A league is not a long tournament — it is a commitment. Results arrive out of order, two teams finish level on points, and somebody has to know what that means. What Competios runs today is one round-robin, end to end.
| # | Team | P | W | D | L | Pts |
|---|---|---|---|---|---|---|
| 1 | NR Northside Rovers | 5 | 4 | 1 | 0 | 13 |
| 2 | HC Harbour Club | 5 | 3 | 1 | 1 | 10 |
| 3 | MW Millwood | 5 | 2 | 2 | 1 | 8 |
| 4 | EV Eastvale | 5 | 2 | 0 | 3 | 6 |
| 5 | SP St. Peters | 5 | 1 | 1 | 3 | 4 |
| 6 | BQ Bridge Quays | 5 | 0 | 1 | 4 | 1 |
A sample table. Standings are computed from completed results, in the shape the public page renders.
What the engine does now
Every line here is in the shipped organiser loop and covered by tests.
- One round-robin, generated at once. Every entrant plays every other. Byes are recorded honestly rather than invented.
- Standings that recalculate themselves. Played, wins, draws, losses and points, tie-broken head to head, then by wins. No recount, no spreadsheet.
- Immutable results with a recorded adjudication path. Void, replay or forfeit, each with a reason attached and kept beside the original result.
- Idempotency-safe retries. A score submitted twice from a bad connection is recorded once.
- Version-fenced concurrent writes. Two organisers editing at once cannot clobber each other; the stale write is rejected.
- A public page with no account. Fixtures, standings, entrants and the champion, on a link anyone can open.
- Reschedule a single match. Move one match’s time without breaking the table — completed results are what count, not the calendar.
What we are building next
None of this exists in the product today. It is written here as the roadmap it is, and the order is still open — tell us which one you need first.
- Seasons across weeks. There is no season entity yet: one competition is one self-contained format.
- Promotion and relegation. How many go up is not a setting anywhere in the product.
- Home and away. The round-robin that ships is a single complete round, not a double one.
- Playoff qualification. No format hands off into another yet, so a group stage cannot feed a knockout.
Why a season is different
The week a spreadsheet breaks.
One evening’s knockout fits on paper. A league does not — because a league has state, and state drifts the moment two people edit it.

Fixtures
The whole round generates at once, then bends when life happens.
Every entrant plays every other, generated in one go at lock time. Move a single match and the table does not care: it counts completed results, not the calendar.
A sample fixture list. Times are set by the organiser and can be changed one match at a time.
Everyone else just watches
A page your players will actually check on Sunday night.
Standings, fixtures and results on a link anyone can open — no account, no app, no login wall. This one is shipped: the public competition page requires no authentication at all.
We are not linking one from here yet. Which competition is public and populated enough to show a stranger is a call we have not made, and a link to an empty page would undo the point of this one.
The way in
Create competition
Name the event, add a tournament, set the entry offer, then publish when you are ready.
Participants register on the public event page once you publish. Prefer a hand-held first night? Email us with the date, format and likely entrant count.
Start on Competios
The create form is the organiser front door. Published events still list Register for entrants at /events.
Create competitionOpens the Competios create form on this site.
Email about organisingUse your normal email account. You are not added to a mailing list or automated sales sequence.