Staying fit in a hybrid work environment
Hybrid work is quietly bad for your body. Not in a dramatic way — no single day kills you — but the pattern compounds. You skip the commute walk. The meeting runs over so lunch becomes a sandwich at your desk. By 5pm you’ve moved about 2,000 steps and sat in roughly the same position for eight hours. Multiply that by five days a week and you notice, eventually, that you’re slower, stiffer, and more tired than you should be.
I started paying attention to this about a year ago. Not obsessively — I don’t want to optimise myself like a SaaS product — but enough to understand what my baseline actually looks like and whether I’m drifting from it.
What I’m tracking and why
I use an Apple Watch, so Apple Health was the obvious starting point. The metrics I care about fall into two categories.
Activity tells me whether I’ve actually moved this week: steps, walking and running distance, active calories, exercise minutes. These are the signals most likely to drop when work gets intense and I stop leaving the house. A week where I’ve covered 40km on foot is a fundamentally different week from one where I’ve covered 15km, regardless of how productive I felt.
Recovery tells me how my body is coping: resting heart rate and heart rate variability (HRV). Resting HR trending up over a week usually means I’m not sleeping well, overtraining, or under-recovering. HRV is a reasonable proxy for stress and readiness — a higher number generally means my nervous system is in better shape. Neither metric is magic, but together they give me a signal I’d otherwise miss.
I’m not tracking food, weight, or sleep in granular detail. That way lies obsession. This is just enough data to answer the question: am I taking care of myself this week, or am I not?
The setup
Data lives in Apple Health on my phone and watch. I use an app called Health Auto Export to push a JSON file to Google Drive every day — one file per day, named HealthAutoExport-YYYY-MM-DD.json, containing every metric reading for that 24-hour period.
From there, a Python script runs nightly via GitHub Actions. It:
- Authenticates with Google Drive using a service account
- Fetches the last 30 days of JSON files from the Drive folder
- Aggregates the per-minute readings into daily totals and averages — summing steps and distance, averaging HRV, taking the single resting HR reading
- Calculates week-on-week comparisons (last 7 days vs the previous 7)
- Passes the summary data to Claude to generate a short plain-English summary
- Writes everything to
_data/health.jsonin this repository and commits it
Jekyll reads that data file at build time and renders it on the /now page. The charts are drawn client-side with Chart.js, reading from an embedded JSON blob in the page.
The whole pipeline costs essentially nothing to run — a free GitHub Actions runner, a free Google Drive account, a service account with read-only access to one folder. The Claude API call is the only cost, and at a few hundred tokens a day it’s negligible.
What it looks like in practice
The now page shows the data in three sections.
Activity — a week comparison table showing last 7 days vs previous 7 days for steps, distance, exercise time, and active calories. Once I have enough history, the percentage change column will tell me at a glance whether I’m moving more or less than last week.
Recovery — two panels showing resting HR and HRV as 7-day sparklines, with a delta against the 30-day average. A resting HR below average is a good sign. An HRV above average is better still.
Workouts — a simple list of recent sessions: type, duration, distance, average heart rate, and elevation. Mostly walks and strength sessions at the moment.
What I’ve learned so far
I’ve only had the dashboard running for a couple of weeks, so I don’t have meaningful trends yet. But the act of building it has already changed how I think about the data.