StackXo

Blog

Why the clock reads itself

The tournament clock on the wall tells you everything about the field and nothing about you. That gap is the whole reason this exists.

July 19, 2026

Walk into any tournament room and look up. The board has the level, the blinds, the average stack, how many players are left, where the money starts. It’s a lot of information, and none of it’s about you.

The numbers you actually make decisions on are the ones that combine the board with your own stack. Seventy-one big blinds. An M of twenty-eight. Two and a bit times the average. Four hundred players to the money. Nobody does that arithmetic in their head reliably, at the end of hour six, on the turn.

So the app has to know two things: what is on the board, and what you’ve in front of you. The second one only you can supply. The first one is sitting there on a screen ten feet away, and asking you to type it in is how tracking becomes a chore and how a chore becomes something you stop doing.

That’s why the camera exists. Not because reading a photo is impressive, but because typing at a poker table is the thing that kills the record.

The rule we would not break

There’s one line in the design notes that every other decision hangs off:

The model reads what is written on the board. Anything derived from it’s worked out afterwards by ordinary code, not by the model.

Anything derived is calculated by ordinary code afterwards, deterministically, where we can look at it. The model is a pair of eyes, not a poker player.

The clearest example is starting stack. A tournament clock shows the average stack, and on level one before any rebuys the average is the starting stack, so we use it. On level five with rebuys running, the average tells you nothing about what people started with, so the field is left blank for you to fill in.

That blank field is the point. Guessing correctly nine times out of ten sounds fine until the tenth one quietly poisons a bankroll graph you’re going to trust for a year.

The model we were wrong about

The first evaluation, back in June, tested two models and concluded that the smaller one wasn’t good enough. It invented fields that weren’t on the board and got its own name wrong. Reasonable conclusion, written down, moved on.

Two weeks later we ran a proper batch. Nineteen real clock photos from nine different rooms, including a couple with the board half hidden behind a pillar, one where two clocks overlap in frame, and one deliberately awful low-light shot. All resized and compressed exactly the way the app does it, because testing on clean originals tells you nothing about a phone at a poker table.

The bigger model got every required field right, but misread three pieces of text, including the buy-in on the worst photo, turning a ten thousand dollar event into something else.

The smaller model, the one we had written off, made zero mistakes. It was also three times faster and cheaper.

The judgement had not been wrong when it was made. It had just gone stale in a two weeks, and we only found out because we tested it again instead of trusting the note.

The crop frame we removed twice

An early version put a crop frame in front of you before sending the photo. It seemed obviously right: trim the clutter, help the model out.

We removed it, then put it back because of a specific worry about people getting stuck in the crop screen with no way out, then removed it again once we watched it on an actual phone and found that the escape route we were worried about doesn’t look the same on every handset anyway.

The lesson we wrote down wasn’t about crop frames. It was: don’t decide what is on someone else's screen based on what is on yours.

It also turned out not to matter. The nineteen-photo test and the structure sheet test both ran on uncropped originals, and the accuracy was there without any help from us.

The default we did not set

Level length isn’t always printed on the board. The obvious fix is a sensible default. Thirty minutes, say.

We didn’t, for three reasons.

Level lengths run anywhere from fifteen to sixty minutes depending on the room and the event, so thirty is a value that’s confidently wrong most of the time. Using the time remaining instead is also wrong, but it’s visibly wrong, which means you fix it. And once you fix it, the app remembers, so you’re asked at most once.

The principle underneath, again from the notes: we don’t invent time we don’t know. A clock that stops and says so is more useful than one that keeps counting down to a number somebody made up.

The structure sheet

Scanning the printed structure sheet wasn’t on any roadmap. It came from playing a tournament with our own app open and wanting the thing that wasn’t there.

It turned out to change more than expected. Once the app knows the whole ladder, the clock can move itself along instead of waiting to be told, breaks handle themselves, and if you lock your phone for two hours it can work out where the tournament must be by now rather than picking up where it left off. It also taught the app what an ante is, which the clock display had never actually told us.

Two scans of the same structure never fight. Later pages are added to earlier ones, so a long structure is just a few photos in a row and one save at the end. The word "rescan" disappeared from the interface entirely, which is usually the sign that a design finally landed.

And if you never scan a structure sheet, nothing is worse than it was. That was the condition for building it.

What it comes to

None of that was cleverness. Each one was a place we could have guessed and chose to leave blank instead.

The camera isn’t there to be a feature. It’s there so that the record exists at all, and a record you can’t trust isn’t worth the trouble of making.