A personal health coach built on top of an existing Garmin data lake. Reads 60+ days of sleep / HRV / RHR / training-load data, computes baselines and anomalies, then nudges me — at the right moment — through a Telegram bot.
Designed for ADHD attention budget: 1 actionable thing at a time, traffic-light visual, just-in-time rather than wall-of-text weekly digest.
At a glance
- 63 days of Garmin data ingested (sleep score, HRV, RHR, stress, training load)
- 7 systemd timers running on GCP VM — morning ping, anomaly check, contextual nudges every 15 min, Saturday weekly digest + chart, log prompt, Garmin auto-pull
- Claude Haiku 4.5 for weekly digest (≤2 insights + 1 action, Vietnamese weekday format) — ~8s latency, ~$0.05/year
- Telegram bot delivery (multi-device, no spam filter, no rate-limit) after iMessage hit 3 quirks (dedupe, per-recipient rate-limit, content classifier)
- Goal-weighted ranking — every nudge has expected sleep-score impact (Tier 1 personal data → Tier 2 literature priors → Tier 3 LLM gut)
- Calendar integration — pre-meeting breath nudge T-10min for stressful events (review / interview / exec / 60-min weekday)
- Privacy posture — only aggregate metrics sent to Anthropic; raw HR seconds, GPS, sleep stages stay local
Stack
Python 3.10 · pandas · matplotlib · Claude Haiku 4.5 API · Telegram Bot API · Google Calendar API (OAuth) · systemd user timers · Garmin Connect data lake (GitHub Actions cron) · Cloudflared (legacy)
Documentation
| Doc | Read this for |
|---|---|
| PRD | Problem framing, goals, scope, milestones, ADHD design principles |
| Architecture | System diagrams, data flows, weighting tiers, smart-cap logic |
| Implementation | Module layout, schedule conversion, secrets handling, deployment |
| Notes | Decision log + 3 iMessage quirks + Telegram pivot + VM migration |
Sample morning ping (Telegram)
🟢 Ổn
Sáng nay anh ngủ được 78 điểm — ổn nhé.
⚡ sleep 78 · HRV 34 · RHR 55
🎯 Tuần này: 2/7 đêm ≥80 điểm
Hôm nay:
• lên giường cùng giờ quen (+6 điểm)
• ra nắng 10 phút sáng (+5 điểm)
📅 2 meeting căng trong 14h tới
Sample weekly digest (Claude Haiku, Saturday 21:00 VN)
📊 Tuần Chủ nhật → Thứ 7
💤 sleep avg 6.99h (Δ +0.03h)
❤️ RHR 56 · 💗 HRV 40 · 🏃 load 0.7
💡 Top:
• Chủ nhật (26/4) sleep 3.68h (z=-2.92) — Mất ngủ đột ngột, kiểm tra stressor (công việc/lo âu).
• Training load 0.66 (z=-1.0) — Tuần yếu, tăng dần để không shock cơ thể.
🎯 Tuần này: Đi bộ 30 phút sáng để reset circadian rhythm.
Status
- M1 ✅ 2026-04-29 — walking skeleton (loader + stats + Haiku digest 4.2/5 sample)
- M2 ✅ 2026-04-29 — ADHD delivery, 6 launchd jobs initially on Mac, then 7 systemd timers on VM
- M3 ✅ 2026-04-30 — Tier 1 personal correlation, Calendar pre-meeting nudge, 4-week trend chart, retro analysis (63 days of patterns), VM migration
- Validation phase ongoing — 4-week effectiveness measurement against
weekly avg sleep score ≥80