building-a-custom.md

Building a Custom Android Widget

Welcome back, nobody!

So I've been at it again. This time I went fully off the rails and somehow ended up building a custom android app. Classic Callum. 🙃

It started innocently enough — I wanted the system stats widget from my homepage as a phone wallpaper. Simple request. Except android has opinions about that sort of thing, and those opinions are no. Live wallpapers don't support webviews, Wallpaper Engine on android doesn't support web wallpapers, and every app I tried either didn't exist anymore or just took a static screenshot and called it a day. Genuinely felt like I was being gaslit by my own phone.

So instead of accepting defeat like a normal person, I just... built an apk. With Claude Code's help, obviously — I'm not that unhinged — but still. We wrote Kotlin, set up an AppWidgetProvider, wired it up to a couple of live json endpoints on the site, and sideloaded it straight onto my Samsung. No Play Store. No fuss. Just vibes and adb.

The uptime counter ticks live. The version number pulls from my changelog table. The currently reading section updates when I update the site. 26/50 books and counting. 👀

system stats widget on my home screen

It's genuinely one of the coolest things I've built, mostly because it feels like it shouldn't work and yet here we are.

Key Features:

  • Custom apk, sideloaded, pulling live data from the site 📱
  • /widget/version.php — live version endpoint from the changelog table 📡
  • /widget/reading.php — live currently reading + reading challenge endpoint 📚
  • Live uptime counter ticking every second on my home screen ⏱️
  • PC wallpaper: Wallpaper Engine pointing at www.cxllum.com/widget/🖥️