Gavel
The trivial fix for a messy auction draft is a countdown timer. The real fix is the same countdown for twelve coaches in two locations, one that holds when someone bids with half a second left.
The problem
My fantasy footy league runs an auction draft every year. Twelve coaches, a shared spreadsheet, and whoever’s talking loudest calling “going once, going twice” out loud. It mostly works. But the count is improvised, so it’s different in every location. Someone on Zoom hears “going twice” a beat late, or never. A coach loses a player he was about to bid on, the room stops to argue about whether the lot closed too early, and the bloke playing auctioneer is refereeing his mates while trying to bid on his own players.
The clock
A coach nominates a player and the clock takes over. Colour and a draining ring carry the state, so it reads from across the room on someone else’s laptop.
That snap-back is the whole feel of the thing. The coach who had already given up on a player gets hauled back into the fight, and a lot that looked done at nine seconds can run for another minute if two people want it badly enough. It’s the “going once, going twice” of a real auctioneer, except it’s the same for everyone.
Prototype first
The clock came before anything else. Before there was a server or a second player, there was a single-player version of one lot, with real timing and a tuning panel down the side: every window adjustable live, mid-lot, and fake rivals bidding at random so the snap-back could be felt while watching rather than only while tapping. The point wasn’t to build the product. It was to sit in front of it and decide whether the clock felt like an auctioneer or a kitchen timer, and to tune it until it did.
Nothing else from that prototype survived, by design. The clock did, unchanged.
How it hangs together
A React app served by one Cloudflare Worker, which also carries every bid to the draft room, and one small draft room per league that holds the only thing Gavel stores.
Every coach’s screen


9 seconds · $10 · Sammy leading — on every screen at once
One draft room per league
It stores one thing: the log.
Every nomination and bid, in order. No countdown, no balances.
The server and every screen run the same rules over that list to work out the clock and everyone’s cash. Same list, same rules, same answer.

The auction rules are a plain module with no dependencies that the server and every browser both run. That’s what makes the log enough: a bid with half a second left lands in the list, the list says the clock reset, and every screen agrees the moment it sees the list.
Built by describing it
Like the other projects here, Gavel was built with Claude Code: the clock’s feel, the tuning panel, the Worker and the draft room were described and iterated on in conversation rather than typed out by hand. The part that took judgement was the part no tool could do, which was sitting in front of the prototype and deciding when the clock felt right.
Where it’s at
Built for one league’s draft night. The code is private for now, but if you run an auction draft and want the clock, the email button below reaches me.