Season setup
Set the rules once. Everything downstream — pairings, venues, game times — follows from here.
Tap to include or exclude an age group. This is the single source of truth for the season — the importer reads these. The number of Saturdays equals the target games below.
A goal, not a guarantee (teams may fall short in small divisions). Configurable.
Configurable. Blank = same as target. Extra weeks give teams byes and the scheduler room to resolve conflicts.
Teams below this are ineligible for the playoffs.
Age groups with this many teams or fewer play a balanced round-robin only (no cross-division games).
Align sub-org bye weeks
Prefer scheduling all teams in a sub-org (e.g. Stars) on the same Saturdays, so a club travels together.
Align cluster bye weeks
Prefer scheduling same-name cluster orgs (3+ teams) on the same Saturdays.
Association venue pooling
When a team's primary venue is full or unavailable, allow home games at other venues in the same association (excludes shared venues).
Southern AZ (Tucson) travel logic
Apply travel-aware scheduling for Southern AZ: away-game cap and distance-based opponent priority. Turn off once Tucson runs its own scheduling.
Referee minimum · games per venue-day
Each venue hosting on a Saturday runs at least this many games so one ref crew works consecutive slots. Set to 1 to disable.
Upload a CSV or Excel file to populate every organization. Import replaces existing org data.
Drop your teams file here to get started
or click to browse — CSV, Excel (.xlsx, .xls) — replaces all current org data
Saves everything configured before generating — imported teams, season settings, active ages, venues and field availability, blackouts, and DNP pairs. The generated schedule is not included; it has its own version history.
Shared with your co-coordinator. The buttons above are local to this browser;
these read and write one shared copy in Firestore, so you both start from the same roster, venues, availability
and constraints. Saving replaces the shared copy — it is not merged — so the panel shows who
saved it last and warns if someone has saved since you loaded.
Uses the Firebase credentials from ⚙ Configure on the Schedule tab.
Associations
Each tile represents an association. Click ✎ Edit to update name, venues, team counts, and sub-orgs. Or import from CSV to populate everything at once.
Blackout dates
Block specific Saturdays for teams or venues, and reserve matchups for the playoffs.
No team blackout dates added.
Blocking a venue prevents any home games being scheduled there on those Saturdays — all fields, all time slots.
No venue blackout dates added.
Pick two teams in the same division — they will never be scheduled against each other (reserve the matchup for the playoffs).
No DNP pairs added.
Pick two teams in the same division — the scheduler adds this matchup to the pool and places it before everything else. Unlike Do Not Play this is a strong preference, not a guarantee: a pairing can still miss if both teams' calendars are full. It is also added on top of the games already generated, so it can put those two teams one game above the target. The report below tells you which ones landed.
No Must Play pairs added.
Schedule
Generated game schedule — filter by division, week, or venue group.
Push confirmed schedule directly to Firebase. Requires admin credentials.
Save named snapshots to Firebase for comparison and rollback. One version is the live schedule; the rest are frozen snapshots.
Click "Refresh list" to load saved versions from Firebase.
Generate a schedule to see results.
Postseason eligibility
Teams need a minimum of 5 games to qualify.
Generate a schedule first.
Co-location quality
When an association's home games land at the same venue on a Saturday, one referee crew can work the whole day and families make a single trip. This shows how well each association's home games clustered — higher is better. Tap a week to see that Saturday's games.
Generate a schedule first.
Association schedule
Full schedule for each association — all teams, all weeks.
Generate a schedule, then select an organization above.
Field assignment
Pass 2 — assign venues, fields, and time slots to every scheduled game. Review the grid, adjust if needed, then commit.
ℹ Generate a schedule first, then click Run field assignment to assign venues and time slots.
Unplaced games
Games the algorithm could not place. Open Field assignment — the same cards appear in a rail above the grid, ready to drag onto any open slot.
Generate a schedule first.
Field availability
Configure venues and their fields. Use the Saturday grid to block specific time slots at any venue.
AZPW game locations
Click ✎ Edit on any tile to configure venue names, fields, address, and coordinates.