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.




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.

Avui El readiness amb el seu anell i el consell del dia; a sota, l’última cursa al mapa. 
Activitat Les xifres de cada cursa i el recorregut amb els quilòmetres marcats, acolorit pel ritme o per la freqüència cardíaca. 
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.

Li parles Mantens START i dius el que vols, per exemple «posa’m sèries de 400 per demà». 
Confirmes L’entrenador proposa la sessió amb els passos i els ritmes. Amb START es programa a Garmin. 
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.
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.
- GravarEl rellotge grava l’ordre amb l’app en primer pla.
- EnviarL’àudio viatja per Bluetooth a l’iPhone i d’allà al servidor per HTTPS.
- TranscriureEs passa a text. L’àudio no es desa.
- PensarL’entrenador consulta la teva forma, el pla i els teus ritmes reals amb les seves eines.
- ProposarPrepara una sessió validada i el rellotge l’ensenya amb els passos.
- 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.
Parlem.
Per a projectes, xerrades o per parlar de com fer programari i IA que funcionin en producció.