I have wanted an Alexa that doesn't phone home for years. Every commercial voice assistant is a microphone in your house wired to someone else's computer, and the whole point of a homelab is that my stuff runs on my stuff. So I built one. It's called Nova, it lives on my LAN, and nothing it hears has to leave the property. The interesting part of this project wasn't the tool itself. It was making…
I read too much news, badly. A dozen RSS feeds, three "read it later" apps I never went back to, and the creeping sense that the algorithm-driven version of all this was optimizing for someone else's goals, not mine. So I built the thing I actually wanted, a personal news digest that runs on my own hardware, ranks stories with a model I control, and never phones home. It's called Cruxwire, and it's open source.…
Last month I wrote about how a PM ships software without an engineering team. The short version: Claude Code closed the gap between an idea and a running product, so I could spend my time on the parts of the job I'm actually good at. This time I want to go deeper on one question: what does project management actually look like when the "team" is one person and an agent? The interesting part was…
Seventy-four commits across one weekend took Ceres, the multi-agent assistant for Kim's garden, from a bare scaffold to a working assistant that transcribes voice notes, diagnoses plant photos, answers questions, plans the watering, and runs a scheduled daily briefing from an orchestrated roster of specialist agents.
The Backyard Birds dashboard is now on GitHub. The follow-up release did not add the notifications I promised. It added clips, reference calls, weather, and a way to tell BirdNET when it is wrong.
For most of my career, the gap between an idea and a working product was an engineering team. I'm a product manager. I think in milestones, user stories, and outcomes, not in pull requests. I've always coded and I can prototype, but turning a loose idea into something that actually runs, and keeps running, was someone else's job. That gap mostly closed this year. Two tools did it: Claude Code and Claude Cowork. Running a…
A few weeks back I wrote about replacing my Haikubox with a four-camera local pipeline feeding BirdNET into TimescaleDB. The data was beautiful. The dashboards were not. Grafana is great for whether the heat pump cycled overnight or how warm the coop got. It is not great for what showed up in the yard for the first time this week, or what the dawn chorus actually sounds like in order. I kept tweaking panels and…
A week ago I introduced Ceres, the multi-agent garden assistant Kim and I are building for our raised beds. A week later there is, in fact, code — and a careful re-design that ripped out part of it within three days.
I am not a software engineer. I think in milestones, user stories, and outcomes. Kim wants a smart garden assistant that tells her when to water and when the blight risk is high. I want to build it. Solo homelab projects like this usually die in a half-finished Docker Compose file. Ceres is different, and the reason is three tools working together: Gitea, the Gitea MCP Server, and Claude Code. The Setup Ceres is a…