Vés al contingut
Tots els projectes

Esport · IA

Entrenador de running amb IA connectat al rellotge Garmin

Un entrenador que mira com has dormit, com t’has recuperat i el que has corregut de veritat, i adapta les sessions del rellotge. Es fa servir des de la web, parlant al rellotge o des de Claude, i mai no toca Garmin sense que ho confirmis.

Paper
Idea, disseny i desenvolupament, en solitari
Any
2026
Rellotge
Garmin Forerunner 970
Interfície
Català, castellà i anglès
Tecnologies
  • Python
  • FastAPI
  • SQLite
  • Garmin Connect
  • Connect IQ (Monkey C)
  • Claude API
  • OpenAI speech-to-text
  • MCP + OAuth
  • Docker
3
maneres de fer-lo servir: web, rellotge i Claude
19
eines de l’entrenador sobre les teves dades
0
canvis a Garmin sense la teva confirmació
15 min
de vida de cada proposta, d’un sol ús

L’aplicació web

Funciona a l’ordinador i com a app a l’iPhone. Tot el que ensenya surt de Garmin Connect i es desa al servidor, així que l’entrenador pot comparar setmanes i mesos sense tornar-ho a demanar.

Avui
Avui El readiness del dia amb la recomanació de l’entrenador i l’última cursa al mapa, acolorida pel ritme. A sota, VFC, son, Body Battery, càrrega i les sessions de la setmana.
Tendències
Tendències Quilòmetres per setmana i tirada més llarga, càrrega aguda i crònica, VFC, son i readiness, de 8 setmanes a un any.
Pla
Pla El que s’ha planificat davant del que s’ha fet, dia a dia: sessions fetes, perdudes o pendents, les que vénen de Garmin Coach bloquejades, i un botó per replanificar la setmana amb l’entrenador.
Xat amb l’entrenador
Xat amb l’entrenador Li demanes una sessió i la prepara amb els teus ritmes reals. Ensenya el perfil d’intensitat i els passos, i no escriu res a Garmin fins que prems Confirma.

Captures amb dades de demostració, amb l’app en anglès.

Al mòbil

La mateixa web s’instal·la a l’iPhone com una app, amb Face ID i notificacions push. Cada pantalla s’adapta al mòbil.

  1. Avui: El readiness amb el seu anell i el consell del dia; a sota, l’última cursa al mapa.
    Avui El readiness amb el seu anell i el consell del dia; a sota, l’última cursa al mapa.
  2. Activitat: Les xifres de cada cursa i el recorregut amb els quilòmetres marcats, acolorit pel ritme o per la freqüència cardíaca.
    Activitat Les xifres de cada cursa i el recorregut amb els quilòmetres marcats, acolorit pel ritme o per la freqüència cardíaca.
  3. Entrenador: El xat ocupa tota la pantalla: la sessió proposada amb el seu perfil i els seus passos, a punt per confirmar.
    Entrenador El xat ocupa tota la pantalla: la sessió proposada amb el seu perfil i els seus passos, a punt per confirmar.

Al rellotge

Una app pròpia per al Forerunner feta amb Connect IQ. Se li parla sense treure el mòbil: demanar una sessió, veure la setmana i llançar-la, moure-la a un altre dia o preguntar com vas. La resposta surt a la pantalla i, si vols, també en veu.

  1. Li parles: Mantens START i dius el que vols, per exemple «posa’m sèries de 400 per demà».
    Li parles Mantens START i dius el que vols, per exemple «posa’m sèries de 400 per demà».
  2. Confirmes: L’entrenador proposa la sessió amb els passos i els ritmes. Amb START es programa a Garmin.
    Confirmes L’entrenador proposa la sessió amb els passos i els ritmes. Amb START es programa a Garmin.
  3. Et respon: Les preguntes es responen amb les teves dades: quilòmetres, forma, son o el que toca aquesta setmana.
    Et respon Les preguntes es responen amb les teves dades: quilòmetres, forma, son o el que toca aquesta setmana.

Arquitectura

Una sola aplicació en un servidor petit, amb tres entrades que es protegeixen de manera diferent perquè cadascuna té limitacions diferents: el rellotge no pot iniciar sessió amb Google i Claude no pot passar per Cloudflare Access.

Entrades

  • RellotgeApp Connect IQ. Arriba per Bluetooth i l’app Garmin Connect de l’iPhone, amb un token de dispositiu.
  • WebA l’ordinador o com a app a l’iPhone. Cloudflare Access amb Google i després PIN o Face ID.
  • ClaudeServidor MCP amb OAuth 2.1 i PKCE: el mateix entrenador des de l’app de Claude.
Cloudflare TunnelEl servidor no té cap port obert a internet: tot entra pel túnel.

Servidor Hetzner ARM64 · Docker Compose

  • Entrenador IAClaude amb 19 eines: 11 de consulta i 8 de proposta i escriptura.
  • PropostesValiden la sessió o el pla; en confirmar s’escriu amb historial i desfer.
  • SincronitzacióActivitats, mètriques diàries, pla i sabatilles de Garmin Connect.
  • VigilantComprova la connexió amb Garmin i avisa amb una notificació push si falla.
  • VeuTranscriu les ordres del rellotge i genera la resposta parlada.
  • SQLiteDades de Garmin, plans, converses i historial de canvis.

Serveis externs

  • Garmin ConnectAPI no oficial: llegeix les dades i programa les sessions, que arriben al rellotge.
  • AnthropicClaude, el model de l’entrenador.
  • OpenAITranscripció de veu i veu de les respostes.

Una ordre de veu, de principi a fi

Què passa des que demanes una sessió al rellotge fins que la tens programada.

  1. GravarEl rellotge grava l’ordre amb l’app en primer pla.
  2. EnviarL’àudio viatja per Bluetooth a l’iPhone i d’allà al servidor per HTTPS.
  3. TranscriureEs passa a text. L’àudio no es desa.
  4. PensarL’entrenador consulta la teva forma, el pla i els teus ritmes reals amb les seves eines.
  5. ProposarPrepara una sessió validada i el rellotge l’ensenya amb els passos.
  6. ProgramarAmb START es crea a Garmin Connect, queda a l’historial i arriba al rellotge.

Decisions de disseny

No s’escriu res sense confirmar

La IA només pot crear propostes. Cadascuna és d’un sol ús i caduca als 15 minuts; en confirmar-la es desa també l’operació inversa, així que qualsevol canvi es pot desfer.

La contrasenya de Garmin no arriba mai al servidor

Garmin bloqueja els inicis de sessió des de centres de dades, així que el login es fa a l’ordinador i al servidor només s’hi pugen els tokens.

Una connexió que no es trenca en silenci

L’API de Garmin no és oficial i pot canviar en qualsevol moment. Un vigilant la comprova, un tauler ensenya l’estat de cada part i, si alguna cosa falla, arriba un avís al mòbil abans del dia de sortir a córrer.

Garmin aïllat en un sol mòdul

Només un mòdul parla amb Garmin. Si demà cal canviar de via, per exemple a l’API oficial, la resta de l’aplicació no es toca.

Tres portes, tres proteccions

La web va darrere de Cloudflare Access, que l’aplicació torna a verificar, i d’un PIN o Face ID. El rellotge s’emparella un cop amb un codi de sis xifres i rep un token revocable del qual el servidor només desa el hash. Claude hi entra amb OAuth.

Només surt el que cal

A Anthropic només hi van les instruccions, la conversa i els resultats de les eines que demana el model; a OpenAI, l’àudio de cada ordre. Els contenidors funcionen sense root i amb el sistema de fitxers de només lectura.

Tots els projectes

Parlem.

Per a projectes, xerrades o per parlar de com fer programari i IA que funcionin en producció.