A poorly made cartoon image of the author

Hi, I’m Felix!

I’ve spent the last 15 years building impactful software as a product leader. Right now, I’m helping improve women’s health outcomes at Pomelo Care.

This is my blog. Most of it is nonsense! You can get in touch with me at [email protected].

Adding a TP-Link Tapo camera to Unifi Protect

Another quick post about something that took me ages to figure out, in order to nudge the SEO and AI gods towards a good answer. Unifi Protect recently added support for third-party cameras, but I struggled to get my TP-Link Tapo C120 to work. Despite setting up ONVIF in the Tapo camera’s settings, Unifi Protect would hit me back with an “Invalid credentials” error when I tried to adopt the camera. ...

January 8, 2026
A cartoon image showing an Atlas-like god carrying a Macbook on its back.

Compiling Android apps on a remote machine

Using Mirakle, Tailscale and WSL to enable remote Gradle execution for a more pleasant Android development on weaker machines like my Macbook Air.

May 14, 2025
A screenshot of workout-song-log.bouleau.dev

Automatically adding my running soundtrack to Strava activities

Building a public app for the first time, syncing song names to relevant Strava activities using the Strava and Spotify APIs, Redis, Flask and Postgres.

May 2, 2025 · 4 min

Making my door buzzer smart (ish)

Non-invasively integrating my Aiphone GH-1AD intercom into Home Assistant, read only, by hooking it up to an ESP32 and programming it with ESPHome.

May 1, 2025

Hosting my own feed to avoid doomscrolling

Replacing Reddit, Hacker News and global news scrolling with a self-hosted RSS setup using Miniflux and Tailscale, and then vibe-coding an RSS feed summarizer.

April 27, 2025

Solving "403 Forbidden" when trying to pull a public Docker image

I just re-installed Docker Desktop on my Macbook Air after a few months of exclusively using Docker on remote machines using VS Code and ssh. I was puzzled to see a 403 coming back when pulling an image from ghcr.io, which obviously is an open registry: $ docker pull ghcr.io/astral-sh/uv:latest Error response from daemon: failed to resolve reference "ghcr.io/astral-sh/uv:latest": failed to authorize: failed to fetch oauth token: unexpected status from GET request to https://ghcr.io/token?scope=repository%3Aastral-sh%2Fuv%3Apull&service=ghcr.io: 403 Forbidden Turns out that docker login credentials survive when you uninstall Docker Desktop, and an ancient (now expired) GitHub token was being used in the above request. ...

April 25, 2025
a crusty old product manager preaches the hot new blog posts of 2016

Vintage link collection: "Good reads for the aspiring PM"

Finding good material about software product management used to be pretty hard. I put this reading list together as an internal Spotify document in 2017, and often shared it with folks that expressed an interest in product management. At some point I made a public version, and it’s mostly been collecting dust in my Google Drive since then. For my PM peers, maybe it’ll be a fun, nostalgic throwback to the stuff we used to share and emulate. ...

April 14, 2025
A cartoon image

Are AI tools turning us all into supervisors?

Exploring the difference between AI-powered augmentation and AI supervision, and how the future of knowledge work may involve less doing and more orchestrating.

April 11, 2025 · 5 min
An animated gif showing runningconverter.com converting running paces in real time

Mini project: Runningconverter.com

Building a running pace and race time converter in 2 hours, using Claude and Cloudflare.

April 4, 2025

Keeping tabs on Proxmox backups with Healthchecks.io

Monitoring scheduled Proxmox backup jobs, using the free Healthchecks.io service and custom hook scripts.

January 30, 2025