I built when2scrim because I was tired of chasing my university Overwatch teammates for their availability. People wouldn’t fill it out, so I’d message them on Discord, wait for replies, and follow up again before I could schedule a scrim.
I liked when2meet’s availability grid. Seeing everyone’s free time together made it easier to find a slot for practice. But the grid only helped once people had filled it out. Getting them to do that was still my job, every week.
So I built automated reminders into when2scrim. The platform sent the reminders for me. They worked: people filled out their availability without me having to keep asking, and I could get on with scheduling our scrims.
What’s in Cadence now
As of last year, I renamed the project to Cadence. It has grown to cover more of the scheduling process, including availability requests, lineups, and attendance confirmations.
There are two separate questions to answer. First, when could someone play? Then, once a session has a time and a lineup, are they coming? Cadence tracks availability requests separately from responses to a specific session.
The daily digest includes pending availability requests alongside today’s events and upcoming events. A scheduled Convex job assembles that information for users who have the digest enabled. Each pending request links back to its event, so the reminder gives the player somewhere to respond.
Following up on a lineup
Once staff confirm a session, assigned players can confirm or decline their place. A decline notifies staff that the lineup needs attention.
Cadence also schedules an attendance reminder. When it runs, it selects players whose response is still pending. Someone who has already answered doesn’t need the same follow-up.
Those reminders include the session name, opponent when there is one, time, and a link to respond. The session page shows the player their local time. The delivery code creates an in-app notification and schedules a push notification; session announcements can also go to a configured Discord channel.
When the schedule changes
A confirmation needs to belong to the schedule the player actually saw. If a session moves, an earlier yes shouldn’t silently count as agreement to the new time.
Cadence gives sessions a revision number. Schedule changes reset confirmations, and the reminder job checks that its revision still matches the session. It also checks that the session is confirmed, hasn’t started, and hasn’t been cancelled. An old scheduled job can therefore run without sending an outdated reminder.
The repository has tests for those cases: changing the schedule resets responses, reminders from an older revision are skipped, and cancelled sessions don’t send attendance reminders.
I still have to choose a time and deal with players who can’t make it. Automating the follow-up meant I could do that with their responses in front of me, instead of spending the week asking for them.