Ir al contenido
Todos los proyectos

Deporte · IA

Entrenador de running con IA conectado al reloj Garmin

Un entrenador que mira cómo has dormido, cómo te has recuperado y lo que has corrido de verdad, y adapta las sesiones del reloj. Se usa desde la web, hablándole al reloj o desde Claude, y nunca toca Garmin sin que lo confirmes.

Papel
Idea, diseño y desarrollo, en solitario
Año
2026
Reloj
Garmin Forerunner 970
Interfaz
Catalán, castellano e inglés
Tecnologías
  • Python
  • FastAPI
  • SQLite
  • Garmin Connect
  • Connect IQ (Monkey C)
  • Claude API
  • OpenAI speech-to-text
  • MCP + OAuth
  • Docker
3
formas de usarlo: web, reloj y Claude
19
herramientas del entrenador sobre tus datos
0
cambios en Garmin sin tu confirmación
15 min
de vida de cada propuesta, de un solo uso

La aplicación web

Funciona en el ordenador y como app en el iPhone. Todo lo que enseña sale de Garmin Connect y se guarda en el servidor, así que el entrenador puede comparar semanas y meses sin volver a pedirlo.

Hoy
Hoy El readiness del día con la recomendación del entrenador y la última carrera en el mapa, coloreada por ritmo. Debajo, VFC, sueño, Body Battery, carga y las sesiones de la semana.
Tendencias
Tendencias Kilómetros por semana y tirada más larga, carga aguda y crónica, VFC, sueño y readiness, de 8 semanas a un año.
Plan
Plan Lo planificado frente a lo realizado, día a día: sesiones hechas, perdidas o pendientes, las que vienen de Garmin Coach bloqueadas, y un botón para replanificar la semana con el entrenador.
Chat con el entrenador
Chat con el entrenador Le pides una sesión y la prepara con tus ritmos reales. Enseña el perfil de intensidad y los pasos, y no escribe nada en Garmin hasta que pulsas Confirmar.

Capturas con datos de demostración, con la app en inglés.

En el móvil

La misma web se instala en el iPhone como una app, con Face ID y notificaciones push. Cada pantalla se adapta al móvil.

  1. Hoy: El readiness con su anillo y el consejo del día; debajo, la última carrera en el mapa.
    Hoy El readiness con su anillo y el consejo del día; debajo, la última carrera en el mapa.
  2. Actividad: Las cifras de cada carrera y el recorrido con los kilómetros marcados, coloreado por ritmo o por frecuencia cardíaca.
    Actividad Las cifras de cada carrera y el recorrido con los kilómetros marcados, coloreado por ritmo o por frecuencia cardíaca.
  3. Entrenador: El chat ocupa toda la pantalla: la sesión propuesta con su perfil y sus pasos, lista para confirmar.
    Entrenador El chat ocupa toda la pantalla: la sesión propuesta con su perfil y sus pasos, lista para confirmar.

En el reloj

Una app propia para el Forerunner hecha con Connect IQ. Se le habla sin sacar el móvil: pedir una sesión, ver la semana y lanzarla, moverla a otro día o preguntar cómo vas. La respuesta sale en pantalla y, si quieres, también en voz.

  1. Le hablas: Mantienes START y dices lo que quieres, por ejemplo «ponme series de 400 para mañana».
    Le hablas Mantienes START y dices lo que quieres, por ejemplo «ponme series de 400 para mañana».
  2. Confirmas: El entrenador propone la sesión con sus pasos y ritmos. Con START se programa en Garmin.
    Confirmas El entrenador propone la sesión con sus pasos y ritmos. Con START se programa en Garmin.
  3. Te contesta: Las preguntas se responden con tus datos: kilómetros, forma, sueño o lo que toca esta semana.
    Te contesta Las preguntas se responden con tus datos: kilómetros, forma, sueño o lo que toca esta semana.

Arquitectura

Una sola aplicación en un servidor pequeño, con tres entradas que se protegen de forma distinta porque cada una tiene limitaciones distintas: el reloj no puede iniciar sesión con Google y Claude no puede pasar por Cloudflare Access.

Entradas

  • RelojApp Connect IQ. Llega por Bluetooth y la app Garmin Connect del iPhone, con un token de dispositivo.
  • WebEn el ordenador o como app en el iPhone. Cloudflare Access con Google y después PIN o Face ID.
  • ClaudeServidor MCP con OAuth 2.1 y PKCE: el mismo entrenador desde la app de Claude.
Cloudflare TunnelEl servidor no tiene ningún puerto abierto a internet: todo entra por el túnel.

Servidor Hetzner ARM64 · Docker Compose

  • Entrenador IAClaude con 19 herramientas: 11 de consulta y 8 de propuesta y escritura.
  • PropuestasValidan la sesión o el plan; al confirmar se escribe con historial y deshacer.
  • SincronizaciónActividades, métricas diarias, plan y zapatillas de Garmin Connect.
  • VigilanteComprueba la conexión con Garmin y avisa con una notificación push si falla.
  • VozTranscribe las órdenes del reloj y genera la respuesta hablada.
  • SQLiteDatos de Garmin, planes, conversaciones e historial de cambios.

Servicios externos

  • Garmin ConnectAPI no oficial: lee los datos y programa las sesiones, que llegan al reloj.
  • AnthropicClaude, el modelo del entrenador.
  • OpenAITranscripción de voz y voz de las respuestas.

Una orden de voz, de principio a fin

Qué pasa desde que le pides una sesión al reloj hasta que la tienes programada.

  1. GrabarEl reloj graba la orden con la app en primer plano.
  2. EnviarEl audio viaja por Bluetooth al iPhone y de ahí al servidor por HTTPS.
  3. TranscribirSe pasa a texto. El audio no se guarda.
  4. PensarEl entrenador consulta tu forma, el plan y tus ritmos reales con sus herramientas.
  5. ProponerPrepara una sesión validada y el reloj la enseña con sus pasos.
  6. ProgramarCon START se crea en Garmin Connect, queda en el historial y llega al reloj.

Decisiones de diseño

Nada se escribe sin confirmar

La IA solo puede crear propuestas. Cada una es de un solo uso y caduca a los 15 minutos; al confirmarla se guarda también la operación inversa, así que cualquier cambio se puede deshacer.

La contraseña de Garmin nunca llega al servidor

Garmin bloquea los inicios de sesión desde centros de datos, así que el login se hace en el ordenador y al servidor solo se suben los tokens.

Una conexión que no se rompe en silencio

La API de Garmin no es oficial y puede cambiar en cualquier momento. Un vigilante la comprueba, un panel enseña el estado de cada parte y, si algo falla, llega un aviso al móvil antes del día de salir a correr.

Garmin aislado en un solo módulo

Solo un módulo habla con Garmin. Si mañana hay que cambiar de vía, por ejemplo a la API oficial, el resto de la aplicación no se toca.

Tres puertas, tres protecciones

La web va detrás de Cloudflare Access, que la aplicación vuelve a verificar, y de un PIN o Face ID. El reloj se empareja una vez con un código de seis cifras y recibe un token revocable del que el servidor solo guarda el hash. Claude entra con OAuth.

Solo lo necesario sale fuera

A Anthropic solo van las instrucciones, la conversación y los resultados de las herramientas que pide el modelo; a OpenAI, el audio de cada orden. Los contenedores corren sin root y con el sistema de ficheros de solo lectura.

Todos los proyectos

Hablemos.

Para proyectos, charlas o para hablar de cómo hacer software e IA que funcionen en producción.