Clocktower ST
A Storyteller's control panel for Blood on the Clocktower, it runs setup, night order, and voting so you can keep your head at the table instead of in a rulebook.
Storytelling Blood on the Clocktower is the fun part; the bookkeeping is not. You're tracking who's alive, whose ability fired, who still has a ghost vote, what order the night wakes in, and which nomination is on the floor, all while reading the room and keeping a straight face. Lose the thread and the game stalls. The usual answer is a paper grimoire and a good memory, and both of those crack under a full table.
Clocktower ST takes the ledger off your hands. It walks you through the game phase by phase, holds the state you'd otherwise be juggling in your head, and surfaces the right reminder at the right moment, so the only thing you're actually deciding is what makes a good story. If you make a wrong call, you step it back rather than reconstructing the board from memory.
What it holds
- 72 roles across the three base scripts: Trouble Brewing's 22, and 25 each for Sects & Violets and Bad Moon Rising, with each role's team, ability text and night-order numbers. 47 of the 72 wake at least once, and the night engine has a purpose-built panel for every one of those 47 rather than a generic prompt.
- Setup that refuses an illegal table: the composition table runs 5 to 15 players and the app will not start a game until the dealt roles match it exactly. Roles that change the count are applied as deltas against the townsfolk, so a Baron adds two Outsiders and removes two Townsfolk, a Fang Gu or Godfather one, a Vigormortis minus one. A Drunk cannot be dealt without also choosing the Townsfolk role it thinks it is, and at night the Drunk wakes at that cover role's position, labelled to remind you to lie.
- Two night orders, built per game: first night and every night after are separate sequences, assembled from only the roles actually in play, with the dead dropped out. Trouble Brewing runs nine steps on the first night and nine after; Sects & Violets and Bad Moon Rising open shorter and run fifteen thereafter.
- Reminder tokens on the seats: 37 roles carry their own tokens, 51 in all, plus eight generic ones and a free-text field for whatever your table needs. Tokens are grouped by the roles in play first, with the full catalogue a tap away.
- A day phase that does the arithmetic: one nomination per nominator and one per nominee, a live tally against a threshold recomputed from the living count, and a Devil's Advocate check on execution. An executed player stays alive to vote that day and dies at dusk. Ticking a dead player onto a nomination spends their ghost vote and unticking gives it back.
- Everything is logged: the opening roster and every assignment, each night step with what you recorded, poisonings and protections and the kills they did or did not stop, nominations with the names of who voted, executions, Slayer shots, Virgin and Witch triggers, and an end-of-game summary down to the ghost votes spent.
- Undo, honestly described: the store keeps the last twenty-one whole-game snapshots, taken at phase transitions and executions. It steps a bad call back without rebuilding the board from memory, but it is not a general undo of every grimoire edit, and it does not survive a refresh. The game itself does: seating, roles, statuses, timers and the log are written to local storage on every change.
Custom scripts
A fourth script slot takes your own. It reads the JSON that the official
script tool at script.bloodontheclocktower.com exports, matching role IDs loosely enough that
fortuneteller and fortune_teller both land, and it accepts homebrew
entries alongside official IDs. Roles can also be written by hand in the app or toggled in from
the 72-role pool, and a finished ruleset can be named, saved, exported to a file or pasted
between devices. Travellers and Fabled are not supported and are skipped on import with a
warning.
Built with
React 19 · TypeScript · Vite · Tailwind v4. State is a hand-rolled useGameStore hook over useState, not a state library. Nothing in the source makes a network request except a cookieless visit counter, and it ships as a static GitHub Pages build: no account, no server, nothing to install. It is phone-first and only phone-first, a fixed bottom tab bar with iPhone safe-area padding and exactly one responsive breakpoint in the whole tree, because a Storyteller is holding a phone, not sitting at a desk.
Known limits 5 to 15 players, which rules out the Traveller games that go past 15. The execution threshold is a strict majority rather than the official half-or-more, so an even number of living players needs one more vote here than at the table.