Skip to main content
Documentation

Scheduling & Availability

For competitions where matches aren't all played at a fixed time, Tabletop League helps players and organizers agree on when each match happens. Set the scheduling model per competition under Settings.

Scheduling modes

| Mode | Who sets the time | | ------------- | ------------------------------------------------------------------------------------------------------------------- | | Organizer | You assign each match's start time (via Match Settings on the Matches tab). The default. | | Peer | Players arrange their own matches by proposing times to each other; you stay out of the loop unless a match stalls. |

How peer scheduling works

In peer mode, either player on a match can propose a time (with an optional short message), or open a time poll with several candidate times for a group vote. The opponent (and, for a poll, anyone else who votes) gets a notification.

Single time proposals

  • Accept sets the match's start time and moves it to Scheduled.
  • Decline clears the proposal so someone can suggest another time.

Time polls

A time poll lists 2–5 candidate times; players (and, on Discord, anyone in the channel) vote for the ones that work. How a poll resolves:

  • Both match participants vote for the same time — it's accepted automatically. The rest of the vote count is advisory context, not a requirement.
  • No mutual pick — whichever time has the most votes becomes the leading candidate, and the non-proposing player explicitly accepts or declines it (a tie lets them pick any of the tied leaders).
  • No votes at all — the poll expires once its voting window closes.
  • You (the organizer) can accept any candidate on an open poll at any time, overriding the vote — useful when players have settled on a time outside the app.

Opening a poll supersedes the proposer's own pending single proposals, and only one poll can be open per match at a time — creating a new one while your own is still open replaces it; while the opponent's is open, you're asked to wait. Accepting any proposal or poll (by either mechanism) supersedes every other open negotiation on that match. Once a poll's voting window (or, after a leader emerges, its acceptance window) passes, it expires and either player can start a fresh one.

On Discord

If your community uses the Tabletop League Discord bot, /poll-time opens the same poll as a native Discord poll — players vote right in the channel, and the bot reports the outcome back to the platform automatically. /poll-time auto skips typing candidate times entirely; the bot pulls suggested times from both players' saved availability (see below) and opens the poll with those. Command reference lives in the bot's own docs; the voting/acceptance rules above are identical regardless of which side (web or Discord) a poll was opened from.

Availability

Players can share when they're generally free, so opponents (and the poll auto-suggest / auto-candidates features) propose sensible times instead of guessing. Availability is advisory — it informs proposals but doesn't auto-schedule anything.

Availability windows are interpreted in each player's own profile timezone (set under Settings → Profile). A player who hasn't set one is treated as UTC for these comparisons — worth flagging to players in different timezones if their suggested times look off.

Finding matches that need attention

On the Matches tab, two preset filters surface scheduling gaps:

  • Unscheduled — matches with no agreed time that aren't yet complete.
  • Passed incomplete — matches whose scheduled time is in the past but which still aren't done.

When players go quiet on scheduling, you can chase them with a bulk nudge — the Nudge players → Nudge unscheduled matches action targets exactly the unscheduled set (scoped to your active stage/round filter). For a round whose deadline has passed, the Resolution Queue is the place to resolve stragglers deliberately.

Scheduling deadlines (auto-consequences for unscheduled matches at a cutoff) aren't built yet — today, scheduling enforcement is manual via nudges and the resolution queue.