● Shipped P2 Size M Vertical app

Health Coach — ADHD-mode Garmin Insights

A personal health coach over Garmin data lake with ADHD-friendly nudges. Daily morning ping + Saturday digest + Calendar pre-meeting breath alerts via Telegram. Goal — weekly avg sleep score ≥80.

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

DocRead this for
PRDProblem framing, goals, scope, milestones, ADHD design principles
ArchitectureSystem diagrams, data flows, weighting tiers, smart-cap logic
ImplementationModule layout, schedule conversion, secrets handling, deployment
NotesDecision 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
📚

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