Michał Jonik

Writing

2026-10-25

My own photos overruled the benchmark

I built semantic photo search for our 200,000 family photos in Nextcloud. Published benchmarks and an AI research report picked one model. Four hundred of our own photos, judged blind on the home server, picked the other.

nextcloudsemantic-searchclip
2026-09-12

A shopping list for a catamaran: start from what people refuse to do

Friends on a boat needed one shared shopping list with no accounts. What that requirement decided, what I left out on purpose, and what changes when an AI agent deploys through MCP.

claudeai-agentsmcp
2026-08-29

The path is /mcp, or the connector goes silent

My MCP server passed OAuth with two AI clients and then heard nothing from them. Five wrong theories, the measurements that ruled them out, and the one-line fix.

mcpclaudecodex
2026-08-08

Ten browser tabs and one head: my homelab in August 2026

My homelab as it stood in August 2026: a house full of services and devices, every setting stored in a web UI or in my memory, and the dependencies I had never written down.

homelabhome-assistantesphome
2026-07-25

A thermostat is not a safety system

My ESPHome sauna controller held its temperature for a year and had one safety setting. What the thermostat does not cover, and the three layers that do.

esphomehome-assistantsafety
2026-07-11

One button, nine states: a gate that cannot tell you what it is doing

My entrance gate has one button and reports nothing. An ESP32 rebuilds its state from two limit switches and a photocell, and refuses to act when it does not know.

esphomehome-assistantfirmware-as-config
2026-06-27

A magnetometer water meter: the hard part is keeping the count

A few-dollar magnetometer taped to a water meter and a dozen lines of ESPHome YAML count every litre. The hard part is a counter that survives reboots, corrections and a security migration.

esphomehome-assistantfirmware-as-config
2026-06-13

Firmware-as-Config: devices you declare instead of program

ESPHome turns a short YAML file into firmware for a cheap ESP32 board. What follows when you declare a device instead of programming it, and where the declaration ends.

esphomehome-assistantfirmware-as-config