Vibe Improved Watchface

Quite a few years ago now, I created my own Garmin watchface which has been used ever since. During the years of use, I have mostly been happy with it. A few minor issues has however just slightly annoyed me. These have been too insignificant for me to bring myself to actually getting into the code again, but suddenly I allowed an LLM to enter my codebase.

So vibe coding, agentic development or whatever you want to call it. This blog post is the first time I write in public about my experience of it. Obviously the models are quick at producing language, including phrasing code in even a niche programming language such as Monkey C. For these specific modifications, the ability to do high-level commanding was obviously what was required to make me take a moment to address the issues I used to have.

The issues with my watchface were two, or three. Firstly the watchface lacked a field displaying the current week number. Secondly, daylight saving time management could be better. Thirdly, there was no way of seeing which exact version of the code my watch was running.

While I personally care more about dates than week numbers, it is unavoidable to encounter the latter. Thus I instructed the coding agent to add a plain one or two digit number just under the day-of-month and weekday display. Please see the screenshot to the left for the result.

weekno buildinfo

That other screenshot, on the right, shows build information for the currently running watchface whenever the watch is set to 12h-mode. Maybe a bit hackish, but there is no intended way to interact with the user using the API version on my Garmin watch. With this being a very personal watchface, and myself very much being an individual fostered in 24h-mode culture, I'm glad there was a useless setting to hijack.

As for daylight saving time management, my old human coded implementation was knowingly simplistic. I could not be bothered with even attempting to get it correct on the actual days when timezone changed. That's clearly documented as a limitation in previously linked blog post. The LLM however was very happy to follow my instructions to update the code to make the timezone changes occur exactly when the rules define them. Tedious for a human to implement right, yet trivial to explain and validate.

Would I had made these changes if I could not have vibe coded them? No. That's likely the most interesting part of this blog post. I've had the itch for years without scratching it. Feeding instructions into the coding agent made it easy enough for it to actually happen.

I am almost impressed by opencode and similar tools. They sure seem productive, and are very much disruptive to how software development happens. Large parts of the code must however be discarded, and a lot of time needs to be spent at refining the prompts. Regardless of how great effort I spend at making myself clear, the LLM always tends to misunderstand more than any human peer I've ever exchanged code with. They definitely are LLM:s, not AI:s. As a matter of fact, my worst problem with agentic coding is that it quickly becomes draining for any introvert to chat with what appears like an overly confident incompetent idiot, who requires an unreasonable amount of micromanagement to finally get anything right. I sure hope they will appear smarter in the future.


2026-03-29 21:08:03 +0000
Thoughts and feedback may be directed at me using the channel listed on my contact page.

Previous post