Recreational League Scheduling: A Fixture List That Stays Right Through Every Rerun
Fixtures are placed on fields and dates under the league's scheduling policy in one Kylon room, and the whole round is rerun when a field closes, referee availability changes or a blackout date moves. Agents propose and the league scheduler approves each run.
A fall round where one closed field moves five games
A community league schedules its season in rounds. Each fixture needs a field that is open on the date, a referee crew that is free, and a date that is not on either team's blackout list. The policy sets the order: fixtures are walked from the first id to the last, each takes the earliest field and date that satisfies every rule, and anything that cannot be placed is marked unscheduled.
The fixtures live in a Notion database, the league calendar that families subscribe to is in Google Calendar, the policy, field table and round dates are in Google Drive, team managers write in by email, and the referee assignor and fields coordinator post in Slack. When a field closes after a wet week, a quick fix moves the fixtures on that field and leaves the knock-on clashes for someone to find on Saturday morning.
Who works in the room
People
League scheduler
Owns the round, approves every scheduling run and sends every reply to a team
Referee assignor
Posts referee availability and confirms crews for each date
Fields coordinator
Reports closures and permit changes for each field
Agents

MycoFixture scheduler
Walks every fixture in the round under the policy, proposes field, date and status, and keeps the league calendar in line with the fixture records

AdaSchedule desk
Checks the coordinator's draft against the fixture records and drafts one reply per team thread from the same records
Scheduling for the league happens in one Kylon room, mostly in the evenings when the volunteers are free. Anything about where and when a fixture plays goes to Myco, the room's default agent. Ada owns the draft check and the replies to teams, and reads from the same Notion records Myco writes, so a reply never quotes a figure the records do not hold. After each approved rerun, Myco mentions Ada with the fixtures that changed, and Ada checks them against any open team threads.
The round, rerun by rerun
Each rerun walks the whole round again under the policy's rerun clause, with every earlier notice still in force. Nothing reaches Notion, the calendar or a team until the league scheduler approves.
- Agent works
- Person decides
- Arrives or gets recorded
flowchart TD
walk["<b>Myco</b> places each fixture on the<br>earliest valid field and date"]
approve["<b>League scheduler</b> approves before<br>Notion and the calendar change"]
closure([The fields coordinator<br>reports a closed field])
draft["<b>Ada</b> checks the coordinator's draft<br>fixture by fixture"]
rerun1["<b>Myco</b> reruns the full round<br>with the closed field removed"]
dates["<b>Fields coordinator</b> confirms dates,<br><b>league scheduler</b> approves"]
referee([The referee assignor posts<br>new availability])
rerun2["<b>Myco</b> reruns the full round with<br>the closure still in force"]
blackout([Blackout dates are swapped])
crews["<b>Referee assignor</b> confirms,<br><b>league scheduler</b> approves"]
rerun3["<b>Myco</b> reruns it with the swapped<br>dates and both notices in force"]
run["<b>League scheduler</b> approves the run"]
replies["<b>Ada</b> drafts one reply per team<br>for the scheduler to send"]
close["<b>Myco</b> reads fixtures per field and<br>the unscheduled list"]
post["<b>League scheduler</b> posts the final round"]
walk --> approve --> draft
closure --> rerun1
draft --> rerun1
rerun1 --> dates --> rerun2
referee --> rerun2
blackout --> rerun3
rerun2 --> crews --> rerun3
rerun3 --> run --> replies & close
replies & close --> post
class walk,draft,rerun1,rerun2,rerun3,replies,close agent
class approve,dates,crews,run,post person
class closure,referee,blackout event
classDef agent fill:#FFFFFF,stroke:#DCD3C8,color:#1B1712
classDef person fill:#EEF0E3,stroke:#6E7447,color:#1B1712
classDef event fill:#F4ECDD,stroke:#F4ECDD,color:#564C42| Stage | What happens | Who acts | Who decides |
|---|---|---|---|
| First walk | Every fixture is placed on the earliest valid field and date, or marked unscheduled | Myco, from the field table and round dates | The scheduler approves before Notion and the calendar change |
| Draft check | The coordinator's draft is checked fixture by fixture, including scheduled fixtures missing from it | Ada | The scheduler sends corrections to the coordinator |
| Field closure | The full round is rerun with the closed field removed | Myco | The fields coordinator confirms dates and the scheduler approves |
| Referee batch | The full round is rerun with the new availability and the closure still in force | Myco | The referee assignor confirms and the scheduler approves |
| Blackout swap | The full round is rerun with the swapped dates and both earlier notices in force | Myco | The scheduler approves |
| Team questions | Each team that asked gets one reply with its fixture's field and date from current records | Ada | The scheduler sends each reply |
| Close-out | Fixtures per field and the unscheduled list are read from current records | Myco | The scheduler posts the final round |
Why every notice reruns the whole round
A closed field does not only move its own fixtures. Each moved fixture takes a slot a later fixture would have used, and that fixture moves in turn. Rerunning the full walk in id order, with every notice still in force, is how the result matches what the policy would have produced from the start. Myco reports each rerun as the list of fixtures whose field, date or status changed, and nothing else.
The calendar follows the same discipline. When a fixture moves, its old event is deleted and a new one created once the scheduler approves the run, so families never see two times for one game. A fixture that becomes unscheduled loses its event and gets nothing in its place until a later run finds it a slot.
What the checks catch
- A rerun that drops an earlier notice and reopens a field that is still closed
- A clash that appears two fixtures later, after a moved fixture takes another one's slot
- A calendar showing a fixture twice, or still showing one that is now unscheduled
- A scheduled fixture missing from the coordinator's draft entirely
- A second reply on a team thread that already has its answer
What stays with people
- Approving every run before Notion and the calendar change
- Sending replies to team managers, which Ada drafts
- Deciding with the fields coordinator whether a closure is for a weekend or the rest of the round
- Posting the final round to the league
Integrations in this workflow
Kylon is not league management software and it does not replace the registration tool a league may use. The volunteers keep their records, calendar and inboxes, and the room holds the coordination that used to live in long email chains.
- Notion holds every fixture with its field, date and status
- Google Calendar is the league calendar families subscribe to, changed only after an approved run
- Google Drive keeps the scheduling policy, the field table, the round dates and the coordinator's draft
- Gmail is where team managers ask about fixtures, answered through drafts a person sends
- Slack is where the referee assignor and fields coordinator post their notices
Where to start
Start with one round. Connect the Notion fixtures database and the league calendar, and write one rule into the room guidelines: every notice triggers a full rerun with all earlier notices still in force, and the league scheduler approves the result before families see it.
“A closure that moves one game moves the next one too, and the rerun finds it before Saturday.”
Set it up with your agent
Open a new Room, add your agent and paste this prompt. It connects the tools, builds the App with you and asks for your rules one step at a time, and nothing goes out until a person approves it.
Set up our recreational league scheduling desk in this Room. Take it one step at a time and wait for my OK before you move on. 1. Connect Gmail, Google Calendar, Google Drive, Notion and Slack. Tell me which ones still need connecting. 2. Ask me who works this desk: the league scheduler, the referee assignor and the fields coordinator. Help me invite them to this Room. 3. Build a Fixtures App with Fixture, Field, Date and Status columns, one record per fixture. Pull the current fixtures from our Notion database. 4. Walk every fixture against the field table, round dates and referee availability in Google Drive and Slack. Propose a field, date and status for each, and show me any that land unscheduled. 5. Check the coordinator's draft in Google Drive fixture by fixture. Flag any scheduled fixture missing from it, and draft one reply per open team thread in Gmail from the current records only. 6. Hold every reply and every write to Notion and Google Calendar until the league scheduler approves each run and sends each reply personally. 7. Write into this Room's guideline: every notice triggers a full rerun with all earlier notices still in force, and the league scheduler approves before Notion, the calendar or any team thread changes. 8. After one clean round, offer to turn the full rerun walk into an Automation. Before you start, ask me for our rules one at a time.
Your first company harness. Where humans and agents run your business together.
More Use Cases
View allFestival Volunteer Shifts: A Three-Day Station Roster That Keeps Up With Changes
A three-day food festival's volunteer roster is built from Calendly sign-ups, kept in Airtable and mirrored on the shift calendar in one Kylon room. Agents keep the records in step and the volunteer coordinator approves every change before volunteers hear about it.
Food Bank Distribution: Donated Lots Reach Partner Agencies Before They Expire
Donated lots are allocated to partner agencies under the distribution policy in one Kylon room, then reallocated when a truck goes down, a lot fails inspection or an agency gains space. Agents propose each move and the warehouse manager approves it.





