From Idea to Wrist: Building a Watch Face in About an Hour

Abstract dark illustration of a round watch face with glowing orange numerals, a partial progress ring, and faint measurement grid lines

This came from a post I saw on X. Somebody wanted a different watch face for their Garmin, sat down with Claude, and had one working in short order. I had thought about doing that for a long time. Like most new things, I was hesitant, because it meant stepping out of my comfort zone.

It turned out to be easy with the help of AI. After about an hour of fiddling with it, I had a working watch face. I almost wish I had jumped on it earlier in the week, because I bought a watch face a few days ago and was very disappointed with it.

The face is Ridgeline: big time, a ring that fills toward my step goal, heart rate, steps, battery.

Ridgeline watch face running in the Garmin simulator

Getting Started Was the Part I Dreaded

Writing for a watch is its own little world. There is a language I had never used, a set of tools I did not have installed, and a way of getting the finished thing onto the watch that I had never done. That stack of unfamiliar steps is exactly what had kept me from trying.

The agent handled all of it. It set up the project, wrote the first version, and when it turned out my machine had none of the Garmin tools on it, it did not start installing things by hand. It wrote up what was missing as an issue against the repo where I keep my machine setup, so the next laptop I set up gets the same tools automatically. I liked that. It fixed today's problem in a way that also fixes it next time.

The Number It Made Up

Here is the part I want other people to know about.

To show me the design quickly, the agent built a little web version of the face. Useful - I could try a change and see it right away. But to draw it, it needed to know how big the watch's built-in fonts are, and that is not something the documentation tells you. So it guessed.

The guess was off by a lot. Which meant the mockup I was looking at, and feeling pretty good about, was not what my watch was actually going to show. The big bold numbers I thought I had picked had never once appeared on the watch. Worse, the agent then suggested a fix built on top of its own bad guess, which would have made things worse in a new way.

What fixed it was dull and obvious in hindsight: stop guessing, run the thing, and have it print the real sizes. Once we had real numbers, the layout stopped being a debate about taste. Some of what I wanted simply did not fit, and the numbers said so plainly. The seconds had to move somewhere else entirely, and the labels had to shift because a round screen quietly eats your corners.

To its credit, once it had real numbers the agent worked out the consequences before touching anything, instead of repeating its earlier suggestion.

Small Things Worth Catching

Two more turned up right at the end, when I went to put the code up publicly.

The project still had a leftover placeholder identifier from the template it started as. Harmless for something you install on your own watch, a problem if you ever want to publish it properly, and easier to change before anyone else installs it.

And every commit in the project had been made under a fake email address, because of a stray setting in the project folder. Caught it seconds before pushing. Trivial to fix while it was still private, genuinely annoying afterward. An assistant that checks who it is committing as before a publish step is doing unglamorous work that pays for itself.

What I Took Away

I had put this off for a long time because it looked like a whole new world to learn. It was, and the agent carried almost all of that for me. Idea to working face on my wrist, in about an hour, on a Sunday.

It was fast and it was genuinely good at the parts I did not know. It also handed me a confident number it had no way to know. The correction came from outside the conversation, from running the thing on real hardware instead of trusting the picture on the screen.

That is roughly the deal, and I will take it. Just check the confident answers against the real thing before you build on top of them.

Take It, or Build Your Own

Ridgeline is public and open source. If you want to install it, change it, or send a fix or an idea my way, please do. Issues and pull requests are welcome.

But honestly, the better takeaway is the one I started with. If you have been staring at your own watch thinking the face you want does not exist, go build it. You do not need to know the language or the tools. If you end up with your own face instead of mine, that is a good outcome as far as I am concerned.

Comments

Popular posts from this blog

CockroachDB performance characteristics with YCSB(A) benchmark

Digsby is bringing out a Linux and Mac client very soon

Running CockroachDB with Docker Compose and Minio, Part 2