Watchmaker: Building a Mechanical Watch Out of Code
A mechanical watch is a strange little machine. There’s no battery and no chip, just a coiled spring, a handful of wheels and a balance swinging back and forth a few times a second, and somehow it keeps time to within seconds a day. Most of us will never open one. I wanted a game where you could.
Watchmaker (Saatçi in Turkish) is a slow repair puzzle. A stopped watch arrives on your bench. You open it, take it apart in the right order, clean it, find the part that broke, fit a spare, put everything back, oil it, wind it and regulate it. There’s no timer, no lives and no way to lose. The worst thing that happens is a part refuses to move.

A watch that actually runs
This was the rule I cared about most: it had to be a real movement, not a picture of one.
Every part is generated in code, measured in millimetres on the plan of the movement. The wheels have proper tooth profiles, and wheels that mesh share the same tooth pitch. The gear ratios are the real ones, so the escapement ticks at 18,000 beats an hour (five ticks a second, a very traditional rate) and every wheel turns at the speed it would in a real watch. When you finally wind it and it starts, the seconds hand is right because the maths is right, not because I told it where to point.
The finishing is where I got a bit carried away. The bridges have Geneva stripes, and the stripes carry on from one bridge to the next, the way they look when they’re cut in one pass over the assembled movement. The edges are bevelled and polished (anglage), the plate has perlage, the screws are heat-blued and the jewels are red. None of it changes the gameplay. All of it changes how it feels to lean in with the loupe.
Order matters
Behind each watch is a dependency graph: every part knows what sits on top of it. You can only lift a part once everything above it is gone. Try it in the wrong order and the part won’t come out, and whatever is in the way flashes for a moment. That one rule does most of the teaching. You learn how a watch is put together just by not being allowed to take it apart wrong.
First you let the mainspring down so nothing jumps when the bridges come off. Then come the screws (you turn them with your finger), the bridges and the wheels, picked up with tweezers and laid out in a tray in the order they came out. The first watch takes 25 steps to strip.
Cleaning, diagnosis and the spare parts drawer
Dirty parts carry a layer of dust, old oil and rust that you rub off with a brush. Really bad ones go into the cleaning bath. It’s the most relaxing part of the game and probably the most pointless, and I’m keeping it.
Then you find the fault with the loupe. Every watch has its own: a broken tooth on the third wheel, a snapped mainspring, a bent balance staff, oil that has dried into varnish, a worn rotor bearing, and on the chronograph, more than one.

The spare parts drawer is where it becomes a real puzzle. There are several wheels that look almost the same, each with its tooth count, diameter and pinion written on its card. Pick one with the wrong number of teeth and the game tells you it has to match the broken one. Pick the wrong diameter and it tells you the wheel won’t mesh with its neighbour. It’s a small thing, but it’s exactly how it works on a real bench.
Putting it back and making it keep time
Reassembly goes in reverse. A wheel near its spot snaps into place, but only if its teeth actually catch the neighbour’s pinion. The jewels get a drop of oil each. Hold too briefly and you’re told to hold a little longer. Hold too long and the oil spills over and you wipe it off and try again.
Then you wind it, the balance starts swinging and you hear the first tick. That first tick is what the whole level builds up to.

Last comes the timegrapher. A real watchmaker puts the movement on a machine that listens to the ticks and draws a line: if it slopes up the watch is gaining, if it slopes down it’s losing. In the game you drag the index lever on the balance cock until the line runs flat and the reading drops to zero seconds a day. Then the watch turns over and shows you its dial, running.
Six watches
Each watch adds a new piece of mechanism:
- Pocket watch: the basic gear train, from barrel to balance.
- Military wristwatch: the keyless works, the crown, the winding and setting wheels.
- Dress watch: the motion works under the dial, then the dial and hands.
- Calendar watch: a date disc and the jumper that snaps it forward.
- Automatic: a rotor that winds the watch as your wrist moves.
- Chronograph: column wheel, chronograph wheel and clutch, and more than one fault.

What testing changed
Playing it on different phones turned up a few things I wouldn’t have caught on a desktop browser:
- On narrow phones the watch looked dark in the menu, so the lighting now adapts to the shape of the screen.
- During regulation the camera got so close on phones that it hid the very lever you need. It now keeps the lever in view.
- The goal text was hard to read over bright metal. It has a shadow now.
- The chronograph has a white dial, and the hands nearly disappeared on it, so they’re dark.
- Going between the menu and a watch used to reload the page. It’s instant now, and the back button works the way you’d expect.
How it’s made
Three.js and Vite, plain JavaScript, no framework, with the HTML interface on top of the 3D scene. Lighting comes from an environment map, so brass and steel reflect something, and the quality steps down on slower phones. The sounds are synthesized: the watch’s own tick-tock, metal clicks, a bell for success and a quiet workshop room underneath. Capacitor wraps the same code for Android and iOS. The only outside assets are two openly licensed fonts.
No ads, no purchases, no account, and it works offline.
Watchmaker is on Google Play, and you can try it in your browser too. If you have a real mechanical watch on your wrist right now, it’s doing everything this game describes, several times a second. I think about that a lot more since making this.