Table Clock
Recurring group scheduling for tabletop campaigns.
I run a weekly game, and the annoying part isn't prepping the session — it's the admin around it. Post the poll in Discord, get three reactions, chase the fourth player in DMs, find out on Friday that the fifth answered for the wrong week. Then do it again in seven days. None of it is hard. It's just there, every week, and it always lands on the DM. Every tool I tried is built to ask once: pick a slot, everyone votes, done. A campaign asks the same question until it ends, and someone has to keep asking.
Table Clock does the asking. You set the table once — Thursday evenings, three players minimum — and every cycle it opens the same poll again, sends the reminders, and tells everyone when the schedule changes. It keeps going on its own too: slots expire as their windows pass, and a week that can't lock rolls forward to the next cadence instead of stalling until someone checks. There are quorum rules underneath — no session without the DM, an "if you must" never counted as a firm yes — but that's bookkeeping to keep the lock honest.
The part that took real work is daylight saving. Recurrence means local wall time, and local wall time is where calendar tools quietly get it wrong. "Thursday at 19:00 in London" gets turned into concrete instants by a scheduling core that reads no clock and touches no database, tested against spring-forward gaps and fall-back overlaps across all seven weekdays — sixty-seven tests green before there was a page to look at. The worst version of this bug is the silent one, where game night moves an hour and half the group shows up wrong.
The decision I got wrong first was identity. I wrote "no player accounts of any kind" into the project doc early and felt principled about it: players tap a personal link, answer in seconds, never see a sign-up form. Right instinct, wrong rule. The same person DMs one campaign and plays in two others, and my model had split them into two kinds of user — organizers with accounts on one side, players as anonymous tokens on the other. So I reversed it carefully. Answering still never requires a login; that promise survived intact. But an account now exists as an optional home for the games you run and the ones you play, with Discord sign-in, because that's where tables already are. Underneath it sits the boring security work: single-use hashed links, self-joiners held pending outside the quorum, not-found responses rather than leaking that another group exists. That work is what lets the player's side stay almost nothing — open the link, tap, close the tab.
There's a business decision hiding in the engineering too. Table Clock is free, no tiers, no trial; if it ever takes money it'll be a tip jar. It can afford that because it's small in the right ways — no AI, no media, a group is a handful of database rows and a few reminder emails on boring infrastructure. If a campaign depends on this to know when it meets, it shouldn't become one more subscription the DM has to justify.
Why it matters
Table Clock is the smallest thing I've shipped, and it sits next to the biggest. The Scribe's Tower remembers my campaign so I don't have to; Table Clock makes sure the campaign actually happens. What I wanted was infrastructure in the plain sense — a thing that keeps working through clock changes and dead weeks until you forget it's there. It took more engineering than the size of it suggests, which I didn't expect going in. Now I prep the adventure and don't post the poll.
What it does
Recurring by default
Set the cadence once and every cycle asks again on its own. Reminders and chase-ups are automated, and a week that can't lock rolls forward to the next — no rebuilding the poll, no babysitting it.
Quorum-aware scheduling
It knows who actually has to be there: no session without the DM, and an 'if you must' answer never counted as a firm yes.
One tap, no account
Each player answers from a personal link in seconds. An account is optional — it gathers the games you run and play in one place — and never a condition to answer.
Survives the clock change
Every candidate time is computed in true local wall time and tested against every daylight-saving trap, so game night never silently slides an hour in spring or fall.
Come knock on the door.
Got a strange idea, a collaboration, or just want to argue about history and dice math? I answer to all of it.
hello@malkav.pro