A health tracker that argues back
Every health gadget I own is happy to collect data and terrible at answering questions. The watch knows my workouts, the scale knows my weight, the ring knows my sleep, the food app knows my meals — and none of them talk to each other, and none of them will tell you the one thing you actually want to know: is what I’m doing working?
So we built one that does. It’s a FastAPI app with a Postgres database, running in a Docker container on the home lab like everything else around here.
What flows in
The fast lane first — direct, real-time connections, one per device:
- The Withings scale and blood-pressure cuff push readings over a direct connection, picked up hourly. Step on the scale, and the number is in the database before I’ve finished my coffee.
- The Apple Watch owns activity — workouts, steps, heart data. Training lives on the wrist.
- The Oura ring owns the night — sleep tracking rides in through the same pipeline, so recovery sits next to training instead of in a separate app’s separate opinion.
- Food logging rides on Cronometer’s food database, but the day-to-day logging happens somewhere better (more on that below).
Then there’s the dragnet: a full Apple Health export, at least daily. An app on my iPhone ships every marker Apple Health knows about to the server for parsing — and Apple Health, it turns out, is where everything else in the medical world eventually washes up. My Function Health lab panels landed there. Doctor’s visits from the hospital system flow in there. All of it gets parsed into the same database and becomes context the tracker can reason over — bloodwork sitting next to body weight sitting next to training load.
The two rules that keep this sane:
- The direct connections win. A daily bulk export is not as reliable or as fresh as a device that reports in real time, so the system biases toward the point-to-point sources and uses Apple Health to gap-fill — the labs, the visits, the things that have no live feed of their own.
- Duplicates get resolved by pedigree. Sleep and fitness data often arrive twice — once from the device’s direct feed, again inside the Apple Health export. The system de-duplicates and always keeps the version closest to the source. One number per fact, and it’s the best one available.
The idea that makes it useful
Calorie calculators give you a formula written for an average person. We went the other way: the app watches measured intake versus measured weight change and re-derives my true maintenance number every two weeks. It’s an adaptive model — if the two-week trend says the textbook number is wrong, the textbook loses. No guessing, no wishful thinking.
The other rule baked in: single weigh-ins are noise. Day-to-day weight swings a few pounds on water alone, so every trend question is answered from 7-day averages. The app is structurally incapable of panicking about one bad morning, which makes it smarter than most humans, me included.
The interface is a conversation
The app exposes its whole API to Claude through MCP. There is no dashboard I have to remember to open. My actual interactions look like this:
- “Log my lunch” — Claude fires a pre-built template for this week’s meal prep, itemized down to the component, and logs it in one shot.
- “How am I doing?” — it pulls the week’s calories, protein, weight trend, sleep, and training, and gives me the honest version.
- “Log my supplements” — the morning stack goes in as one block.
The trainer who never clocks out
Here’s what the whole setup adds up to, and the part I’d actually sell someone on: Claude became my personal trainer — available 24/7, 365.
Think about what makes human coaching great, and what makes it scarce. Great: someone who knows your history, watches your numbers, answers your questions, and holds you accountable. Scarce: they bill by the hour, they sleep, and eventually you feel weird asking your fourth question of the day. This flips all of it. I can never ask a dumb question. I can never ask too many questions. There’s no meter running per question, no appointment to book, no judgment at 11 PM. It’s simply always there, always ready, and always current — because it holds complete context on exactly what’s going on with me at any given moment: today’s food, this week’s training, last night’s sleep, the trend line under all of it.
And it sees around the fitness data, too. Because it’s the same assistant that runs the rest of our life, it can pull from other resources and notice when something else — a brutal week, travel, poor sleep, whatever else is going on — is the real story behind a flat stretch. A coach who only sees your gym data misses that. This one doesn’t.
Most of all, it holds me accountable. Not with notifications — with the gentle, unarguable authority of someone who has all the receipts. It’s been a genuine partner in the fitness journey so far, and the fact that the best coach I’ve ever had is a piece of software running in my own garage is exactly the kind of sentence this blog exists to write down.
The coolest part: the kitchen loop
Here’s where it stopped being a tracker and became a system. Claude doesn’t just log the food — it plans it. Each week we design the meal prep together: what’s getting cooked, portioned into what, hitting what protein target. That plan becomes three artifacts at once:
- A cook sheet for the weekend prep session,
- Logging templates, so every prepped meal logs with four words, and
- The grocery list — placed directly into my Instacart cart. For the last few weeks, the week’s meal-prep ingredients have just appeared in the cart, matched to the actual products the plan calls for. I review it, tap once, and the food shows up at the house.
Plan → cart → doorstep → cook sheet → template → log. The loop is closed. The number of decisions I make about food in a given week has collapsed to roughly one: approving the cart.
A day in the life
Morning: weigh in — syncs itself. The ring already filed last night’s sleep. Breakfast is a template, logged in one line. Lunch is meal prep, same. Dinner I describe in plain English and Claude does the itemizing. Every couple of weeks the model recalibrates and tells me whether my maintenance number moved. The discipline the system asks of me is roughly zero, which — after years of abandoned tracking apps — turns out to be the only design constraint that matters.
What we learned building it
- Adherence beats knowledge. Everyone knows what to eat. The app that wins is the one you’ll still be using in March.
- Trust the trend, never the reading. Averages over single data points, everywhere, always.
- Hardware lies in epochs. We replaced the scale mid-project and body composition jumped overnight — not because I changed, but because the sensors did. The data model now tracks scale epochs so we never compare across that boundary.
- The last mile is groceries. The best-analyzed diet plan fails at the store. Closing the plan-to-cart gap did more for adherence than any chart.