← Blog Posts
April 22, 2026 Building with AI

Building the Health Dashboard No App Would Give Me

For years I wore my Apple Watch to bed every night and looked at the sleep data every morning. Not seriously. The way you check the weather. The number was there, so I looked.

Then the patterns started looking different.

Not dramatically. Just off enough that I started paying actual attention. I dug into the HRV trends, the resting heart rate, the sleep staging. Something wasn’t right. I scheduled a sleep study.

The result: a sleep apnea diagnosis. Caught earlier than it would have been otherwise, because I was already collecting the data.

That was the moment I decided I needed to actually understand my health data. Not glance at it. Understand it.

Why I Built Something Instead of Using an App

I looked at what existed. There are plenty of health dashboards, Apple Health wrappers, wellness apps. None of them did what I wanted.

The problem isn’t the data. Apple Health has years of it. The problem is that everyone’s health situation is different. My questions aren’t your questions. I needed to ask specific things: how does a particular decision affect my HRV two days later? What happens to my resting heart rate in the days after a hard workout? No app answers those questions, because no app knows those are your questions.

So I built a data warehouse. Python, SQLite, custom importers for each data source: Apple Watch, iPhone health metrics, sleep staging, workouts, nutrition logs. Everything lands in a local database with 18 months of history, deduplicated across devices. I built reports for HRV, resting heart rate, sleep architecture, SpO2, VO2 max, blood pressure, weight trend, and training load. And a milestone system so I can mark treatment dates and run before/after comparisons on any metric.

What the Sleep Lab Taught Me About Apple Watch

Here’s what I didn’t expect to learn from the polysomnogram.

Apple Watch notoriously under-reads deep sleep. It attributes a significant portion of what lab equipment classifies as slow-wave sleep to normal sleep instead. I didn’t know exactly how wrong it was until I had a night where I could compare both datasets directly: the lab readings and the Watch data from the same night, side by side.

I had the numbers. I worked out the correction factor and built it into the schema. Every night of historical sleep data I have now reflects reality, not Apple’s miscalculation.

If you’re tracking sleep staging on Apple Watch without accounting for this, your deep sleep numbers are likely lower than they should be.

What the System Actually Shows

The downstream correlations are where this gets useful.

The impact of certain decisions doesn’t show up the next day. It shows up days later. Alcohol doesn’t crater your sleep the night you drink. It suppresses HRV and elevates resting heart rate for days afterward. Certain foods do the same. Hard training loads take longer to recover from than the soreness tells you.

You can’t see any of that in a default app view. You can see it when you own the analysis and can ask the questions you actually want answered.

The APAP Data

Once I started treatment, I discovered something I hadn’t anticipated: my APAP device writes detailed session data to an SD card. Every night. Pressure readings, leak rates, apnea index, flow data. A complete record of whether the therapy is actually working.

I adapted my schema and built a separate importer for it. With Claude Code handling the implementation work, adapting an existing system to absorb a new data source was fast. I already knew what the data meant and what I wanted to measure. That part, no tool can do for you.

What the data showed: lower resting heart rate, higher HRV, measurably improved cardio fitness over time. The treatment is working. I can see it in the numbers, not just feel it.

What This Kind of System Can Tell You

Consumer health apps are built for a general audience. They show you what most people want to see, in the way most people want to see it.

That’s not useful when your situation is specific. The calibration question, the lag-effect correlations, the treatment confirmation — none of that shows up in a default dashboard. It shows up when you own the data and design your own analysis.

This project exists because I had specific questions and needed real answers. The data I have now actually gives them to me.