Caso de Estudio - Entrénalo todo
Construimos Hibrido, un entrenamiento híbrido diario que se publica cada mañana en español, inglés y portugués. Una sesión al día para todos, escrita de noche por un modelo al que nunca se le permite inventar un movimiento.
- Cliente
- Hibrido
- Año
- Servicio
- Creación de Empresas, Diseño de Producto, Ingeniería Full-Stack

Resumen
El entrenamiento híbrido, esa mezcla de fuerza con barra y kilómetros de verdad en la misma semana, se le quedó grande a la gente que puede pagar un entrenador que se lo programe. La respuesta habitual es una app: un cuestionario, una suscripción y un plan generado solo para ti. Incubamos Hibrido para probar la idea contraria: que la programación es el producto, y que conviene demostrarlo antes de que alguien construya la app alrededor.
Por eso Hibrido publica un entrenamiento al día, el mismo para todos, en español, inglés y portugués. Sin cuenta, sin muro de pago, sin publicidad. Dos variantes de equipo, gimnasio comercial y material mínimo, con tres niveles en cada movimiento, para que quien lleva un mes y quien lleva diez años hagan la misma sesión con cargas distintas.
Como constructores de empresas, en Everseed nos hicimos cargo del ciclo completo: el modelo de entrenamiento, la marca, el pipeline de generación, el sitio y la infraestructura que lo sostiene.
El Reto
Generar un entrenamiento con un modelo es fácil. Generar uno que le darías a un desconocido a las seis de la mañana, sin nadie a quien preguntarle, no lo es.
Había dos problemas que resolver antes de poder publicar nada. El primero es la seguridad. A un modelo al que le pides amablemente en el prompt que evite la halterofilia y la gimnasia de alta dificultad, casi siempre la evita, y "casi siempre" es el estándar equivocado cuando el fallo es alguien intentando un arranque a solas porque una web se lo dijo. El segundo es la deriva. Un modelo que escribe sus propios nombres de movimientos los escribe distinto en tres idiomas, y poco a poco los lectores en español, inglés y portugués dejan de recibir el mismo entrenamiento.
Los dos son el mismo reto con otra ropa: ¿cuánto confías en el modelo, y dónde pones aquello que no estás dispuesto a confiarle?
Nuestro Proceso
1. El catálogo, no el prompt
Sacamos el vocabulario de ejercicios del prompt y lo metimos en el repositorio. Al modelo se le entrega un catálogo fijo de 59 movimientos, versionado en el código y ya traducido a los tres idiomas, y compone la sesión eligiendo ids de ahí. Nunca nombra un movimiento. Lo que apunte a un id desconocido, o a uno que no existe en la variante de equipo que lo usó, se rechaza y se regenera, tres veces, y después la ejecución falla en lugar de degradarse. Eso es lo que convierte las exclusiones en una restricción y no en una petición educada.
2. Separar la estructura de la prosa
La generación ocurre en dos llamadas. La primera produce la estructura neutra al idioma: los movimientos, las repeticiones, las cargas y los dominios de tiempo. La segunda escribe las indicaciones en los tres idiomas contra esa estructura ya fijada. Así la traducción no puede desviar el entrenamiento: quien lee en portugués y quien lee en inglés están mirando los mismos números por construcción, no por revisión.
3. Imágenes que nunca ven el entrenamiento
Una tercera llamada renderiza las dos piezas del día, 16:9 para el sitio y 4:5 para redes. Sigue la misma regla un nivel más allá: al modelo de imagen nunca se le dice cómo se llama el entrenamiento. Recibe una descripción física del movimiento dominante del día, sacada de un archivo que tiene una línea por cada id del catálogo y un test que rompe el build cuando falta alguna. Así las exclusiones valen para la foto igual que para la sesión, y la prosa del entrenamiento, que un modelo de imagen pintaría encantado en la esquina de un encuadre que existe para llevar texto encima, nunca le llega.
Quién sale en esas fotos viene de una tabla: atletas inventados, una fila cada uno, con una descripción física y un retrato de referencia renderizado a partir de ella. Los días rotan por el reparto, así que una semana de imágenes son reconociblemente las mismas caras y no siete desconocidos.
4. Publicar con colchón
El proceso nocturno corre a las 08:00 UTC y trabaja con dos días de antelación. Nada se muestra hasta que llega su propia fecha, lo que deja 48 horas para cazar una ejecución fallida, una caída del modelo o una sesión que simplemente se lee mal. Qué día es el tuyo es otra pregunta, y se responde desde la zona horaria del lector, resuelta en el servidor, para que a nadie en Vancouver le sirvan la sesión de mañana en el desayuno.
Arquitectura y Stack
- Framework: Next.js 16 (App Router) con React 19, renderizando en servidor cada página fechada para que el entrenamiento se lea, se comparta y se indexe sin depender del cliente.
- Generación: llamadas a modelos vía OpenRouter, validadas con Zod contra el catálogo antes de guardar nada. La etapa de imagen es la única a la que se le permite fallar en silencio, registrada en su propia etapa para que el entrenamiento se guarde igual. La estructura y el texto se rinden antes que degradarse; una imagen que falta es solo una imagen que falta.
- Datos: Supabase con Postgres guarda las sesiones, el reparto y la lista de correo, con la escritura cerrada al rol de servicio y dos buckets públicos para las imágenes y los retratos.
- Migraciones: solo hacia adelante, aplicadas automáticamente al hacer merge desde CI con el mismo script que se ejecuta en local, y con las sentencias destructivas rechazadas salvo que el archivo lo diga explícitamente. Un camino de migración que solo corre en CI es uno que nadie ha probado.
- Entrega: desplegado en Vercel, con la generación nocturna en Vercel Cron y un panel protegido por contraseña que falla cerrado antes que servir borradores sin revisar.
El Impacto
Hibrido es el argumento de Everseed sobre dónde encajan los modelos dentro de un producto. No como lo que decide, sino como lo que compone dentro de un límite que escribió otra persona y que un test hace cumplir. El catálogo, la separación entre estructura y prosa, y las escenas de las imágenes son el mismo movimiento: darle libertad al modelo donde una mala respuesta sale barata, y quitársela donde una mala respuesta llega a alguien levantando algo pesado.
Es deliberadamente temprano. El generador corre cada noche y el sitio publica en tres idiomas; la lista de correo guarda las direcciones que recoge y todavía no ha enviado nada, porque el entrenamiento tiene que ser bueno antes de que valga la pena construir la distribución.
Visita hibrido.app para leer la sesión de hoy.
