Hybrid Daily: el entreno del día para HYROX, y todo lo que decidí no construir
Ficha Técnica del Proyecto
Mes
Mes 4
Proyecto
Hybrid Daily
Stack Tecnológico
Herramientas IA
Hago CrossFit y preparo HYROX, una carrera de 8 km partida en ocho estaciones (SkiErg, trineo, burpees, remo, sacos, wall balls…). Para entrenarla hay dos caminos: pagar una app de programación, que es lo que hago yo, o tirar de un PDF genérico que no sabe si llevas dos meses entrenando o cinco años.
Hybrid Daily es el cuarto proyecto del reto de 12 meses, 12 proyectos: abres la web, eliges tu nivel y ves el entreno de hoy, con la estructura que pondría un entrenador. Sin registrarte.
El problema
Lo difícil de entrenar para HYROX no es encontrar ejercicios, es la estructura: cuántos días, qué toca cada uno, cuándo cargar y cuándo descansar. Un plan que no tiene eso acaba siendo un entreno suelto cada día, y sin progresión no se mejora.
Y la parte de fuerza tiene su propio lío: saber qué marca hiciste hace un mes y cuánto peso poner hoy al 75 %. Eso suele acabar en una nota del móvil o en la memoria.
La solución
Eliges nivel (de principiante a élite, que equivale a la categoría Pro) y categoría, que solo cambia los kilos. Cada nivel tiene su semana tipo, de 3 a 6 días de entreno, en ciclos de cuatro semanas: tres de carga y una de descarga. Las fases (base, acumulación y específico) se calculan solas por la fecha.
Cada sesión está montada como la pondría un entrenador: calentamiento obligatorio, bloques A, B y C, formatos como EMOM, AMRAP, intervalos o for time, la intensidad en RPE y zonas, y una nota del entrenador. El ejercicio principal se mantiene todo el ciclo para que puedas progresar en él, y el resto rota entre 117 ejercicios para no repetir.

Todo el que entrena con tu nivel ve la misma sesión ese día, así que se puede compartir con un enlace y entrenar lo mismo con un compañero. La web se instala en la pantalla de inicio del móvil como si fuera una app.
Con cuenta, que es opcional y se abre con Google, se desbloquea Pesos: guardas tus marcas en más de 100 movimientos, ves tu 1RM estimado y cómo evoluciona, y te calcula los porcentajes para cargar la barra, redondeados a discos de 2,5 kg.


Qué demuestra este proyecto
Lo más útil de este mes no fue lo que construí, sino lo que decidí no construir o quité después:
- No poner servidor hasta que hay algo que guardar. El entreno se genera entero en el navegador: es el mismo cálculo para todos, así que no necesita base de datos. La primera versión no tenía backend y aguantaría cualquier visita sin costar más. El servidor llegó solo con Pesos, cuando por fin había datos de cada persona.
- Ver dónde estaba el cuello de botella de verdad. Cuando los entrenos empezaron a parecerse demasiado, la solución no era más infraestructura sino más contenido: un catálogo de ejercicios con sus atributos, formatos y plantillas que rotan.
- Tirar una app que funcionaba. Preparé la versión de iOS: compilaba, arrancaba en el simulador y el login con Google iba. Pero publicarla en la App Store traía obligaciones que no compensaban: ofrecer también login con Apple, una revisión que puede rechazar una web empaquetada como app, publicar mi dirección como comerciante en la UE y la cuota anual. La web ya se instala en el móvil, así que la quité entera, con el login de Apple.
- Cuidar la marca de otros. Empezó llamándose HyroxDaily, pero HYROX es una marca registrada. La cambié a Hybrid Daily, con dominio nuevo y redirección desde el antiguo.
El resultado técnico
Para quien quiera el detalle: React, TypeScript, Vite y Tailwind en la web; Node con Fastify y PostgreSQL en la API, con arquitectura hexagonal. El generador de entrenos es lógica pura con tests, y el mismo día y nivel dan siempre la misma sesión. Algunos fallos que dejaron lección:
- El límite de peticiones por usuario veía a todo el mundo como una sola persona: la API está detrás de nginx y solo veía su IP. Hubo que decirle que se fiara de la IP que reenvía nginx, y solo de esa.
- Al quitar la app, el login de Google de la web dejó de servir, porque dependía del mismo plugin. Lo cambié por la librería oficial de Google para webs, que además pide registrar desde qué dominios se usa.
- El login no necesita ningún secreto: la API comprueba el token de Google con sus claves públicas (firma, emisor, para qué web se emitió y caducidad), y cada cuenta va ligada a su identificador en Google, nunca al email.
Se despliega sola en mi servidor cuando pasan los tests, y la API corre con su propio usuario de sistema, sin permisos para tocar nada fuera de su carpeta. Sin cuenta no se guarda nada tuyo; con cuenta, lo justo, y borrarla elimina todas tus marcas al momento.
Ahora mismo la uso yo y poca gente más: todavía no la he movido entre quienes entrenan para HYROX. Ese es el siguiente paso. El código, de momento, es privado.
Si tienes una idea que pide algo así, una web que funcione como una app sin pasar por las tiendas, cuéntame qué tienes en mente.