Garmin-Powered Automated Training Management System

Behind the Story

A Garmin watch collects an enormous amount of physiological data — HRV, sleep, training load, body battery, stress — but turns almost none of it into real insight. Garmin’s own AI coaching add-on, Connect+, costs $6.99/month and was widely panned at launch: users complained it just restated numbers they could already see for free, while paywalling features on watches that already cost hundreds of dollars.

This project set out to close that gap for one athlete first: a competitive tennis player. A personal trainer, at about $120 an hour a session, would review the week’s data and set real goals for the week ahead. This project aims for that same standard of coaching — but daily instead of weekly — focused on two things: avoiding injury (catching fatigue or poor recovery the morning after, instead of five days later) and planning (knowing exactly where progress sits against the goal, at any given moment).

Overview

With the watch worn continuously, Garmin’s API pulls heart rate roughly every 2 minutes, 24 hours a day. Everything downstream turns that raw stream — sleep, HRV, resting heart rate, training load, workouts — into something a coach would actually say: how recovered the athlete is this morning, whether today should be a hard session or a rest day, and how the week is trending.

The system runs on a fixed daily rhythm: metrics are stored and baselines updated each evening, a daily report compares today against the last 7 days, and a morning readiness report combines yesterday’s training with overnight recovery data to recommend today’s training load — flagging injury risk before it happens.

The Build, Step by Step

The project started by connecting Claude Code to n8n via the n8n-MCP server, then built out the pipeline in stages:

  1. Set up n8n-MCP — connected Claude Code to the n8n automation instance so workflows could be built, inspected, and deployed directly from the CLI. (Setup steps are documented in the project’s Notion workspace; not yet published here.)
  2. Step 2: Python Script & Garmin Connect API — forked an open-source Garmin Connect client and built the daily data-fetching scripts.
  3. Step 3: Dockerize for Raspberry Pi — containerized the scripts for scheduled, unattended runs on a home Raspberry Pi.
  4. Step 4: n8n Workflow (Scheduled Email) — wired the containerized scripts into an n8n workflow that runs on a schedule and emails the report.

See it running: Garmin Daily Report – 10pm Email — a full breakdown of the live workflow in production, including the exact node-by-node pipeline and infrastructure diagram.

Where It Is Today

The system has since grown well beyond the original 4-step build: it now runs five scheduled workflows (including a heart-rate collection health monitor), delivers AI coaching via Telegram instead of SMS, and deploys automatically through a Jenkins CI/CD pipeline triggered by every git push. The full current architecture, lessons learned, and reproduction checklist are documented in the project’s deep case study on Notion.

Repository: github.com/strider73/garminconnector

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top