Producto propio · app de entrenamiento
Training Companion
Una app de entrenamiento que funciona sin señal y deja tu historial listo para que una IA te ajuste la rutina.
Es una app privada: te la muestro en una videollamada.
Entreno · lunes
- Sentadilla 3×8 ¿60 o 65?
- Press banca ¿lo de la vez pasada?
- Molestia en el hombro (anotar)
60 × 8 · 60 × 8 · 55 × ?
??

- Antes:
- Notas sueltas, sin progreso ni historial.
- Después:
- Cada serie registrada y el progreso calculado solo.
El problema
Sin un registro ordenado, mientras entrenas no ves qué peso usaste la vez anterior, el progreso no se calcula y las molestias no quedan anotadas en ningún lado.
Tampoco había un resumen listo para compartir cuando un entrenador o una IA tenía que ajustar la rutina.
La solución
Una app que se instala en el celular y abre directo en la sesión del día. Cada ejercicio muestra lo que hiciste la vez anterior junto a lo que toca hoy, cada serie se marca con un toque y arranca sola el temporizador de descanso.
Entre sesiones muestra el progreso por ejercicio, los récords, las medidas y las molestias. Las rutinas se pueden armar con IA: descargas un prompt, se lo das a tu asistente favorito, pegas la respuesta, la previsualizas y la importas.
Además, una integración con un Custom GPT, construida y lista: lee el historial con una clave de solo lectura para que un "entrenador" tenga el contexto real sin copiarlo a mano.
El resultado
Es un producto propio en uso, con usuarios reales. Cada serie queda registrada con peso, repeticiones y esfuerzo, el progreso se calcula solo y el historial está listo para compartir.
El registro funciona aunque el gimnasio no tenga señal: nada se pierde y todo se sincroniza al volver la conexión.
En pantalla


PWA en el celular
Se registra aunque no haya señal
Cola en IndexedDB
En orden, junta ediciones y reintenta
API .NET idempotente
Ids del cliente: repetir no duplica
PostgreSQL
Historial inmutable
Custom GPT
Actions
API de solo lectura
OpenAPI aparte y clave de solo lectura
Under the hoodDetalles técnicos
Stack
- .NET 10 (minimal APIs)
- EF Core 10 + PostgreSQL
- React 19 + TypeScript
- PWA con IndexedDB
- Docker
- xUnit, Vitest y Playwright
- Offline-first: las escrituras pasan por una cola en IndexedDB que respeta el orden, junta ediciones repetidas y reintenta con espera creciente.
- API idempotente con ids generados en el cliente: si una petición llega dos veces, devuelve el mismo resultado.
- Historial inmutable: cada sesión guarda una copia de la rutina, así que publicar una versión nueva nunca altera lo ya entrenado.
- Formato de rutina en Markdown con un bloque JSON, legible por personas y por modelos de lenguaje, con un parser tolerante a lo que suelen generar los asistentes.
- Integración con un Custom GPT mediante Actions: un documento OpenAPI aparte expone solo endpoints de lectura, con una API key de solo lectura guardada como hash.
- CI que despliega solo si pasan las pruebas de backend sobre PostgreSQL real, del frontend y E2E en Pixel 7 e iPhone SE.