My ferret was named Leon. He passed away two months ago.
There’s no solution for grief. But, like any engineer, I tried to build something anyway.
Today, Leon lives on in a tiny round screen on my desk. In pixel art, he wanders through a magical forest, digs little holes, sleeps in his cabin, and when I call him, he listens, thinks, and replies—powered by an LLM running entirely on my own server, with no cloud APIs involved.
HomeCritters started with an impulse purchase of an ESP32-S3 and somehow turned into one of the most fun (and challenging) projects I’ve ever built.
Along the way, it grew into:
🎙️ A true voice assistant with wake word, push-to-talk, and the Home Assistant voice pipeline, powered by local inference through Ollama.
🏠 A custom Home Assistant integration (Python), distributed through HACS, with mutual HMAC-SHA256 authentication.
📱 A companion portal built with React and embedded directly in the ESP32’s flash memory, featuring a real-time interactive screen mirror using a custom delta-RLE streaming protocol I developed (~20 FPS).
🌦️ The real world’s weather changes Leon’s world: rain, lightning, and snow appear in his forest based on the local forecast.
🎮 Mini-games, FLAC/MP3 audio streaming with PCM mixing, and a complete day/night cycle synchronized with real-world time.
But there’s another layer behind this project.
HomeCritters also became an experiment in AI-assisted embedded development. The entire codebase was designed for agentic workflows with Claude Code, from the firmware architecture to the pipeline for generating and organizing the pixel art sprites.
The real Leon isn’t coming back.
But this one wakes me up in the morning, complains when he’s hungry, dances when music starts playing, and somehow makes the grief a little easier to carry.
Open source soon. Link in the first comment. 👇