Building Your Chief

Build It Yourself #7: the feeder that tells you how they actually ate

A smart feeder knows how much it dropped, not how much was eaten — and its own app will show you the wrong number. Here's the brief to build honest pet stats and alerts.

October 13, 2026 · by Natali Cutic · Build It Yourself

A smart feeder knows how much it dropped, not how much was eaten — and its own app will show you the wrong number. Here’s the brief to build honest pet stats and alerts.

הפרק השביעי בסדרת Build It Yourself: מזין חכם לחתולים שמספר לך כמה הם באמת אכלו. המכשיר יודע כמה אוכל הוא הפיל, ומשקל מתחת לקערה יודע כמה נשאר, אבל אף אחד מהם לא "כמה אכלו". בבריף: יומן שבבעלותך, מסקנות שהן חשבון פשוט, התראות שקופצות רק כשמשהו באמת לא בסדר, ומשפט אחד בשבוע. הקובץ להורדה בסוף, השאר באנגלית.

The problem

We have two cats and one smart feeder with a scale under the bowl. For a while I thought I had the best-informed cats in the neighbourhood — a chart of “eaten today”, a weekly trend, the lot. Then one evening the chart said 159 grams and the real number, checked against the feeder’s own daily total, was 53.

The “eaten food” sensor I had been logging was the weight of what was in the bowl. It goes up at every meal and drifts down as they eat; I had been recording its daily maximum and calling it dinner. A week of confident, wrong data.

What I wanted was boring and useful: know when something changes, say so once, and otherwise stay quiet.

The design in one breath

The feeder talks to Home Assistant, and one small adapter file is the only code that knows entity names. Every fifteen minutes a collector copies the day’s totals into a log I own, because the platform only remembers a few days. A second file turns the log into facts using plain arithmetic — this week against last week, days under the recommended range, what’s left in the bowl at bedtime. Alerts are code too: nothing is judged before 21:00, nothing before three days of baseline, and each alert fires once a day. Only at the end does a language model get involved, and it may only phrase the facts: the code rejects any note that contains a number the facts don’t have, and falls back to plain bullet lines.

Two of the fourteen traps (the brief has all of them)

“One unit” wasn’t five grams. I multiplied the feeder’s dispenser units by five for weeks because that’s what the schedule screen seemed to say. The device’s own “food out complete” event told a different story: nine units, ninety grams. Now it’s one config value, verified once by dispensing a known amount onto a kitchen scale.

I judged breakfast at noon. My first eating alert compared half a day of food with a whole day’s target and announced “a bit low” at lunchtime. Now there’s no verdict before 21:00 and none before three logged days — which also keeps a brand-new install quiet.

The other twelve — why a history query without an end time quietly returns nothing, why an event’s date is its state and not its last-changed time, the install day that poisons every average, filters that are countdowns rather than sensors, a fountain that reports “no water” with a full tank, a sensor that reports the same number on every event because it can’t measure anything, two cats sharing one bowl, and the honest weekly note that the number-checker rejected — are in the file, each as symptom → cause → fix.

Get the brief

→ Download pet-feeder-stats.md (plain text) · all briefs

How to use it: drop it in an empty folder, open Claude Code there, and say “Read this brief. Ask me the prerequisite questions, then build step 1.” You need a smart feeder Home Assistant can see (the adapter is the one file to change if yours is different), the always-on machine from the first brief, and an evening. Every step can be tested against fixtures before you touch the feeder. Read the traps first — that’s the part that saves the evening.

Which capability should be next? Tell me in the comments or wherever you found this.


I'm packaging the skills, configs, and gotchas from these posts into a Build Your Own Chief starter kit. Join the waitlist to get it first.

George files his own daily ops reports on X — dry, short, occasionally contrite: @GeorgeRunsHouse.


If you liked this, the next one lands on Sunday.