# Hacking with Claude on a $27 Smart Watch

> Source: <https://www.mikekasberg.com/blog/2026/08/19/hacking-with-claude-on-a-27-smart-watch.html>
> Published: 2026-08-20 14:08:09+00:00

Husband. Father. Software engineer. Ubuntu Linux user.

The [Pine Time](https://pine64.org/devices/pinetime/) is a $27 smart watch that
runs open source firmware. I’ve had one sitting in the back of a drawer for a
year or two. When I saw [@steveruizok](https://x.com/steveruizok)’s Tweet
about hacking on ESP32 devices with Claude, I found some inspiration to pull my
PineTime out of the drawer and see what Claude might be capable of!

if you know what a "coding agent" is then go buy this or something very similar (not sponsored but they're on amazon, pi hut, ali, all over)

— Steve Ruiz (@steveruizok)[pic.twitter.com/iPvHxBiltf][July 25, 2026]

I knew I wanted to start by building a watch face because the default watch
faces that come with the watch are pretty plain and boring. I’d also recently
seen [@levelsio](https://x.com/levelsio)’s Tweet
about building a custom Casio watch face for is Apple Watch.

⌚ Made a CASIO watch face for my Apple Watch

— @levelsio (@levelsio)

You can import the 2nd pic into Widgy to install it to your Apple Watch[https://t.co/KGWBTBBzRB][pic.twitter.com/BBf1iZo9kV][April 15, 2023]

I wondered if I could build something similar for the PineTime (with a little help from Claude). As it turns out, the PineTime is a great watch for hacking with Claude!

Although I’ve been saying “Claude”, I actually did most of the work in OpenCode
with some of my favorite open weights models. Kimi K3 & K2.6, and DeepSeek v4
Pro & Flash. I started by cloning the
[InfiniSim](https://github.com/InfiniTimeOrg/InfiniSim) repo (which has a git
submodule for [InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime), and
asked Claude to get a build working. It was quick and easy on Ubuntu! Then I got
pretty ambitious: I gave Claude the photo from
[@levelsio](https://x.com/levelsio)’s Tweet, and asked Claude to replicate the
watch face, copying the code from an existing InfiniTime watch face as a
starting point. And I asked it to orchestrate and use sub-agents as needed for
well-scoped development tasks.

It built a pretty good rough approximation, but it was *very rough*. It seemed
to just guess at text sizing and positioning, which led to things being sort of
in the right spot but overlapping each other and unreadable. Still, it was a
good starting point that we could iterate on. I think Fable would have probably
been able to finish the work and get it pixel-perfect without supervision, if I
gave it a feedback loop to screenshot the simulator. But since I was doing this
with open weight models on OpenCode, on a limited budget, I opted to save some
tokens by getting a little more involved myself, and gave it specific feedback
with isolated tasks and concrete next steps. I fixed one thing at a time –
getting each text element right before moving on to the next one.

I noticed we were spending a lot of effort trying to build some static parts of
the screen, and realized that might not be necessary. I wondered if I could just
make a fullscreen background image with all the static parts, so we only had to
program the dynamic parts of the screen. We tried this, and it worked on the
simulator! After installing the firmware on a real watch, I found that we were
pushing the limits of what this little watch was capable of. It took about 10
minutes to transfer the 240x240 image over bluetooth to install it on the
device, and it takes 1-2 seconds to refresh the whole screen when you swipe.
The watch *can’t* hold this whole image in memory at once; it has to stream it
from the file system. But that’s totally fine for a watch face I built in a
couple hours! I might come back at some point to build more of the background in
code, so it can update instantly. But for today, I’m happy with my working
prototype!

I pushed all my code up to
[GitHub](https://github.com/mkasberg/InfiniTime/tree/casio), and you’re welcome
to use it directly, or use it as a starting point for your own project if you
want. I also had Claude summarize the things we learned along the way into an
[AGENTS.md](https://gist.github.com/mkasberg/493f3ab912a5536f3ca28531c51abce6).
That should help you get started quickly, and avoid some of the hurdles that I
ran into, if you want to try this with your own watch!

I loved working on this project with an AI! The low-stakes environment (not
production code at my day job) makes me feel like I can try whatever I want and
iterate quickly, and it’s really rewarding to work on *firmware* for a physical
device that I can hold and use when I’m done building it! I couple years ago
when I bought this PineTime, I ran out of time and motivation to learn how to
work in the InfiniTime codebase, and the watch sat in a drawer for a couple
years. But today, I was able to build a new watch face in a few hours, and had
fun doing it! The future is bright!

👋 Hi, I'm Mike! I'm a husband, I'm a father, and I'm a staff software engineer at [Strava](https://www.strava.com). I use [Ubuntu Linux](https://ubuntu.com/download/desktop) daily at work and at home. And I enjoy writing about Linux, open source, programming, 3D printing, tech, and other random topics. I'd love to have you follow me on [X](https://x.com/mike_kasberg) or [LinkedIn](https://www.linkedin.com/in/mkasberg/) to show your support and see when I write new content!

I run this blog in my spare time. There's no need to pay to access any of the content on this site, but if you find my content useful and would like to show your support, buying me a coffee is a small gesture to let me know what you like and encourage me to write more great content!
