Projects
Projects I Run and Publish
The Home Assistant builds come from my house. The software stories come from repositories I actively publish.
Start with the whole home setup, follow the part you are trying to build or buy, or read the failure that changed one of my projects.
The full stack
Why I mix Caséta, ESPHome, Matter, and Eufy
One coordinator does not require one ecosystem. Permanent controls, custom lighting, loose lamps, appliances, and security each have different failure modes.
Lighting
Caséta versus Matter bulbs
I use Caséta for the house and save smart bulbs for lamps without a Lutron-controlled load.
Six WLED controllers, one kitchen light
The grouping, state handling, and Home Assistant template that make separate controllers feel like one fixture.
A power-switched WLED cove
Normal off leaves the controller awake. Full off cuts power and requires a startup sequence.
The ceiling-fan power mistake
Five tracking automations could not repair a receiver that kept losing power.
Appliances and local AI
Eufy Omni S2 through Matter
What Home Assistant gets, what stays inside Eufy, and why a rescue alert matters more than another start button.
Ollama on an RTX 5070 Ti
Measured Qwen3 speed, the Home Assistant setup trap, and the false-success test that changed how I expose controls.
Automations that fail gracefully
The common rule behind the fan, cove, and vacuum fixes.
Run the numbers first
The calculators stay separate from product recommendations. They are for checking whether an always-on device, replacement, smart plug, or long backup is worth the trouble.
Code I publish
The house is not the only place I build things. These are active public repositories under my GitHub account; the repository is the source for current installation and release details.
Claude Desktop Buddy firmware
An M5StickC Plus desk display, the radio and watchdog failures behind its battery work, and the source-only build that reached about 12 hours. Source on GitHub.
Buddy Bridge
A multi-machine bridge to an ESP32 approval device, and the idle-stream bug that kept tearing down a healthy Bluetooth link. Source on GitHub.
MySQL MCP
A source audit that separated query-prefix validation from database grants, inherited option-file credentials, and raw result caching. Source on GitHub.
BookStack MCP
A TypeScript MCP server for searching, reading, creating, and organizing BookStack documentation from an assistant. Source on GitHub.
GitLab MCP
A recursive shutdown and stale-session restart failure that pushed the HTTP transport toward stateless requests. Source on GitHub.
MediaWiki MCP
An expired login that still permitted reads, plus a container port that was published but unreachable. Source on GitHub.
Snap-DNS
Why TSIG secrets left the browser and every split-DNS operation now carries an explicit key and view. Source on GitHub.
DisplayCue
A reversible handoff for two computers and two monitors, with the DDC/CI and hardware-KVM limits left visible. Source on GitHub.
tad
A tmux cockpit that became more useful after I removed permanent screens and made live agent state the center of the interface. Source on GitHub.