Seasonsmith

Seasonsmith guide

Seasonsmith builds a whole season, or a tournament’s pool play, from your brackets, facilities, field time and every team’s requests, and then lets you adjust it by hand. The tutorial builds a complete soccer league in about 20 minutes, with a sample facility spreadsheet to practise on.

The guide uses soccer words: field time, fields (Field 1, Field 2…), games, coaches.
  1. How it works
  2. Facility spreadsheets
  3. Team and bracket rules
  4. Errors and how to fix them
  5. Questions

How it works

A league is one season or one tournament, in one sport. You describe it once and Seasonsmith does the pairing and the timetabling. A new league starts in guided setup: eight steps (name & sport, season, brackets & pools, facilities, field time, teams, requests, review & schedule), each checked as you go, so that by the end everything a full schedule needs is in place. After that, each part has its own tab inside the league:

Season

The sport, first and last day, blackout dates, and league-wide limits like games per day and fields per game.

Brackets & pools

Age groups (10U, 12U…), how many games each team is guaranteed, and start-time limits such as “10U never after 5:30 PM”.

Facilities & field time

Your facilities and their fields (Field 1, Field 2…), the weekly field time (planned a day at a time on each facility’s Mon–Sun board, with its game spots per day, weekdays, weekend and season), and facility spreadsheets for specific dates.

Teams

Every team with its bracket, pool and club, plus the coach’s requests as rules.

Schedule

Generate the season, see problems with their fixes, move and lock games, and export for coaches.

Words used in the app

Sport
Chosen when you create a league (and changeable on Season). It sets the words: field time, fields, games, coaches.
Bracket
An age group or division. Teams only ever play teams in their own bracket.
Pool
A group inside a bracket. Teams only play teams in their own pool. Leave it blank if the bracket is one group.
Guaranteed games
How many games every team gets against its pool (5 by default). Teams don’t have to play every week.
Facility
A building or site: Riverside Soccer Complex. Add the address and a Google Maps pin so families can find it.
Fields
The named playing areas inside a facility: Field 1, Field 2… Each game is given one, and schedules say which.
Weekly field time
A start time that repeats every week at a facility, with which fields are free: “Saturdays 9:00 AM, Field 1–Field 3”. The By day planner shows one facility’s week as a board: add times to a day, copy a day to others, or clear it.
Game spots
How many games a time can hold at once, added up per day, per week or across the season. The season count skips blackouts and uses facility spreadsheets where they apply.
Facility sheet
A spreadsheet from a facility listing exact dates, times and fields. For the dates it covers, it replaces the weekly field time.
Must / Prefer
A Must rule is never broken by the scheduler. A Prefer rule is avoided, but broken if that’s the only way to fit a game.
Lock
A locked game stays put when you regenerate. Moving a game by hand locks it.

Facility spreadsheets

Facilities send their field time in different layouts. Seasonsmith reads .xlsx (Excel; Google Sheets → Download → Microsoft Excel), .csv, or cells copied from a spreadsheet and pasted into the upload box. Old .xls files need to be saved again as .xlsx or .csv first.

Layouts it understands

  • One row per time slot: Date | Start time | Fields (a number) | Location. A date written once and left blank below it carries down, and merged date cells are fine.
  • One row per field: Date | Start | Field (“Field 1”, “Field 2”). The fields at the same date and time are counted, and their names are added to the facility. A column headed “Field” or “Field #” is read this way, and the dialog says so.
  • A schedule sheet (your own league template): Date | Time | Home Team | Visiting Team, one row per field. Rows with the same date and time are added up (three 8:00 PM rows = three games at once). A row with anything under Home or Visiting (a team, “No Fields”, an event) is taken, and “Week 1”-style heading rows are skipped. Pick the “Already taken when filled in” columns in the dialog; a Day column is checked against the date.
  • Grid: dates down the side and start times across the top, or the other way round, with a number of fields in each cell.

How cells are read

  • Dates: 3/6, Sat 3/6, March 6, 2027-03-06, real Excel dates. With no year, the year that falls in your season is used.
  • Times: 9, 9:00, 9am, 13:30, 0930, and ranges like 6-8pm (the start time is used).
  • Fields: 4, “4 fields”, “Fields 1-4” (4), “1, 2, 5” (3), or names like “Field 1”. “3 (1 held for lessons)” reads as 3: a leading number wins.
  • Closed (nothing free): a dash, x, closed, none, or a cell starting with Reserved, Unavailable, Tournament, Blocked, Maintenance, Private, Lessons, Camp, Clinic, Event, Hold or Rain. A field’s own name like “Clinic Field” still counts as a field.

What an import changes

For each facility and date in the file, the uploaded times replace that facility’s weekly field time on that date. Other dates keep the weekly pattern, and blackout dates still win. Importing again only replaces the dates in the new file, so monthly spreadsheets can be imported one after another. Games already booked into those times stay attached, on the same field where it’s still free. Remove upload on a facility’s card goes back to its weekly field time.

Team and bracket rules

Add rules to a team (Teams → Edit) or to a whole bracket. Each can be Must (never broken by the scheduler) or Prefer (avoided where possible).

RuleCoach says…
Max games in one weekend“Can’t play more than once a weekend.” → 1
Max weekend games all season“No more than 3 games on Sat/Sun.” → 3
Max games in one week“Only one game a week.” (Mon–Sun)
Max games on one weekday, all season“At most 2 Sunday games.”
Can’t play on certain days“Never on Tuesdays.”
Can only play on certain days“Weekends only.”
Unavailable dates“Spring break, Apr 10–11.”
Can’t start later than / earlier than“Nothing after 6 PM.” / “Not before 10.” Pick days to limit it to those days, and add one rule per day for different times: “8 PM on Saturdays” + “7 PM on Sundays”.
Only at / Not at certain locations“Home facility only.” / “Not at Lakeview.”
Days between games“At least 3 days apart.”
Not at the same time as other teamsShared coach or siblings. Works both ways automatically.
Not on the same day as other teamsSame, for whole days.
Other request (note only)Anything else. Kept with the team for you; the scheduler doesn’t act on it.

League-wide limits live on Season: max games per team per day, game length (starts closer together than this count as overlapping), fields used by one game, and how many of one club’s games may be on at the same time.

Errors and how to fix them

Seasonsmith always says what went wrong and what to do. Problems on the Schedule tab come with a Fix line and a button to the tab where you make the change. Messages that end in (Reference ABC123) came from the server: send that code to whoever runs the site, as it points to the exact entry in the server log.

Games that couldn’t be placed

A game is left unplaced rather than break a Must rule. For each one, Seasonsmith checks every open time in the season and lists the reasons that ruled out the most times.

MessageWhat it meansHow to fix it
Every field is already booked at that timeEvery time that otherwise fits is full.Add weekly field time, add fields to a slot, or upload more facility availability (Facilities & field time).
This time slot isn’t open to 12USlots are reserved for other brackets via “Open to”.Edit a slot and add 12U, or add slots for 12U (Facilities & field time).
10U can’t start after 5:30 PMThe bracket’s start window excludes the open times.Widen Earliest/Latest start, or add slots inside the window (Brackets & pools).
14U doesn’t play on TuesdaysThe bracket’s “Plays on” days exclude these times.Add the day, or add slots on the bracket’s days (Brackets & pools).
Lakeview Lightning 14U already plays that dayThe team’s other games use up the open days.Add more dates or slots, or raise “Max games per team per day” (Season).
Riverside Hawks 12U: At most 1 game per weekendThat team’s own rule rules the times out.Loosen the rule, switch it to Prefer, or add slots that fit it (Teams).
Oak Hill Thunder 12U: not at the same time as Oak Hill Thunder 14UTwo linked teams compete for the same times.Switch the rule to Prefer, or add slots at other times (Teams).
More than 2 Riverside games at the same timeThe club limit (set to “always”) keeps the club’s teams apart.Raise the limit or set it to “where possible” (Season).
There are no time slots in the season to put it inNo dates or slots exist.Check First/Last day, then add weekly field time or upload a facility spreadsheet.

Warnings from the last run

MessageWhat it meansHow to fix it
X gets 4 of 5 games: … has an odd totalTeams × games in a pool is odd, so one game can’t be paired.Add or remove a team, or give one team one game more or fewer.
X gets 6 of 8 games: the rest of … has only 6 to giveEvery game needs an opponent from the same pool, and X wants more games than the rest of its pool plays in total.Add a team to the pool, or give X fewer games (Teams).
X is the only team in 10U · Pool BA pool of one has nobody to play.Move the team to another pool, or add a team to its pool (Teams).
X isn’t in an age bracketIts bracket was deleted.Edit the team and choose a bracket.
There are no open time slots in the seasonSeason dates or slots are missing.Set the season dates and add weekly field time.

Flags on placed games

MessageWhat it meansHow to fix it
Breaks: …A Must rule is broken, usually after a hand move or after rules or facilities changed.Press Move: the list shows times that fit every rule. Or regenerate.
Misses preference: …A Prefer rule couldn’t be kept.Usually fine. Move the game if it matters.
Breaks: Field 2 has two games at onceTwo games hold the same field. Seasonsmith never does this itself, and sorts it out on the next change to a facility or its times, so it only shows in a schedule saved by an earlier version or restored from an old backup.Use “Change field” in the Move dialog, or regenerate.
Misses preference: No field assigned: every field is booked at that timeA field was removed from the facility or the slot, or “Fields used by one game” went up, and no free field is left at that time. (Where one is free, the game moves to it by itself.)Add a field to that slot, lower “Fields used by one game”, or move the game to a time with a free field (Facilities & field time).
Misses preference: Field 3 isn’t listed as free at that timeThe field was taken out of that slot or that date’s uploaded availability.Move the game to a free field, or regenerate.
Breaks: The facility’s spreadsheet has no field time thenA newer facility spreadsheet doesn’t include this time (or marks it closed).Move the game, or upload a corrected file.
Breaks: Its location was deletedThe facility was removed.Move the game or regenerate.
Breaks: One of these teams has been deletedThe team no longer exists (usually in a restored backup or an old saved schedule).Regenerate to drop the game, or add the team back (Teams).
Misses preference: This time is no longer in the weekly slots…Its weekly slot was changed or removed.Move it to a current time.

Facility spreadsheet messages

MessageWhat it meansHow to fix it
This doesn’t look like an Excel (.xlsx) file.The file isn’t a real .xlsx (renamed, or another format).Open it in Excel or Google Sheets and save/download as .xlsx or .csv.
That file isn’t a readable .xlsx spreadsheet.The file is damaged (often a download cut short) or wasn’t saved by a spreadsheet app.Save it again from Excel or Google Sheets, or upload a .csv.
That’s the old .xls format.Excel 97–2003 files can’t be read.File → Save As → Excel Workbook (.xlsx) or CSV.
Nothing could be read with these settings.The layout or columns were guessed wrong.Change Layout, Heading row and the column choices; the preview updates.
Row 12: Couldn’t read the date “…”That cell isn’t a date (often a note or a typo).Usually ignore it, or fix the cell and upload again.
Row 12: Couldn’t read how many are free: “…”The fields cell has no number and isn’t a closed word or a field name.Fix the cell, or check the column choice.
Row 12: Nothing listed as freeThe fields cell is empty on a row that has a date and time.Fill it in, or ignore the row.
Reading each row as one fieldThe fields column holds names, so fields at the same time are counted.If it’s really a number of fields, change “Each row is”.
N repeated date/time rows: the last one winsThe same date and time appears more than once.Check the preview. For separate fields per row, choose “One field” under “Each row is”.
Says Sun, but Sat, Oct 31, 2026 is a Saturday. Used the date.The Day column disagrees with the date on that row.Fix the row in the spreadsheet, or move that time on the Facilities tab after importing.
N rows were left out as already takenSomething is written under a column marked “Already taken when filled in” (a team name, “No Courts”, an event).If those rows are really free, un-pick that column in the dialog.
N of these fall outside the season datesDates before the first or after the last day.They’re kept but unused; widen the season to use them.

Saving

MessageWhat it meansHow to fix it
Saved / Saved in this browserAll changes are stored (in your account, or only in this browser if the site isn’t connected to its database).Nothing.
Unsaved changes… / Saving…A save is about to happen or is under way.Wait a moment before closing the page.
Not saved: changed elsewhereThe league was saved from another tab or device after you opened it. Nothing is overwritten silently.Choose “Load their version (drop mine)” or “Keep mine (replace theirs)”. “Download my version” keeps a copy first.
Not saved yet: You’ve been signed out…Your sign-in expired.Sign in again in another tab; your changes stay on screen and retry.
Not saved yet: The server is busy or restarting (error 503)A temporary server problem.Nothing; it retries every few seconds. Download a backup if it lasts.
Couldn’t save … (Reference ABC123)A server error.It retries. Every change is also kept in this browser; send the reference code if it lasts.
This league is too large to save.Over the size limit (thousands of teams).Split the season into two leagues.
Saved in this browser only (yellow banner)The site isn’t connected to its database. The banner lists the missing settings.Whoever runs the site adds them in Vercel. Meanwhile, download backups.
Couldn’t reach the database just now… (Reference …)The database is down, paused, or over its usage limit.Reload later. Use Backup copies in this browser → Download backup to keep working.

Sign-in

Some sign-in errors appear on Google’s own page, before Seasonsmith is involved. The site owner fixes those in Google Cloud Console (APIs & Services → Credentials / OAuth consent screen) and Vercel’s Environment Variables, then redeploys.

MessageWhat it meansHow to fix it
Google: Error 401: invalid_client (“The OAuth client was not found”)AUTH_GOOGLE_ID in Vercel isn’t the Client ID of the Google OAuth client.Copy the Client ID from Google Cloud → Credentials into AUTH_GOOGLE_ID, and that client’s secret into AUTH_GOOGLE_SECRET, then redeploy.
Google: Error 400: redirect_uri_mismatchThe site’s address isn’t an authorised redirect URI.Add https://<your site>/api/auth/callback/google under Authorized redirect URIs.
Google: Access blocked / app has not completed verification / access_deniedThe account isn’t a test user while the app is in Testing.Google Auth Platform → Audience → Test users: add the account (or publish the app).
Seasonsmith: AccessDeniedGoogle or the app refused the account.Same as above: add the account as a test user.
Seasonsmith: ConfigurationA server setting is wrong (Google ID/secret, AUTH_SECRET) or the database couldn’t save the account.Check the four settings in Vercel, redeploy, try again.
Seasonsmith: OAuthCallback / CallbackThe sign-in round trip didn’t complete (often cancelled or timed out).Try again.

Error pages

MessageWhat it meansHow to fix it
Not foundThe address is wrong, the league was deleted, or it belongs to a different Google account.Go to Your leagues; check which account you’re signed in with.
Couldn’t load this league (Reference …)The database didn’t answer.Reload later; download a backup copy from the home page meanwhile.
Something went wrongThe page crashed in the browser.Press Try again. If it repeats, send the message and Reference shown at the bottom.

Questions

Which sports does it support?
Tennis, Pickleball, Hockey, Soccer, Basketball, Volleyball, Baseball, Softball, Lacrosse, Football, Other sport. The sport only changes the words; everything works the same.
Can I schedule a tournament?
Yes: set the season to the tournament’s dates and each team’s guaranteed games to the pool-play count. Brackets and pools work the same way.
Do teams have to play every week?
No. Seasonsmith only guarantees each team its number of games, spread across the season instead of bunched together.
Do I have to name the fields?
No. Without names, a time slot just says how many games fit at once. Names let every game say which field it’s on.
Can two age groups have different schedules?
Yes. Give a bracket “Plays on” days or a start window, or restrict a slot with “Open to”.
What if everything is at one facility?
Add one facility. Multiple facilities are optional.
Who can see my leagues?
Only the Google account that created them. Each account has its own leagues. See Privacy.
How do I set up another division or season with the same rules?
To add a bracket that plays by the same rules (12U Girls beside 12U Boys), press Duplicate on the bracket's card on Brackets & pools: the copy keeps its games, start times, days, rules and the slots open to it, with no teams, and opens so you can rename it. To copy a whole league, use Season → Duplicate league: same sport, season, brackets, facilities and field time, with or without its teams, and no schedule.
Can I keep working if the site is down?
Every change to a league is also saved in your browser. The home page lists these copies with Download backup, and a backup file opens in any copy of Seasonsmith, including one run on your own computer.
Does regenerating undo my hand changes?
No: games you moved (or locked) stay put, on the same field. Only unlocked games in the chosen brackets are rebuilt.