boltCASO TÉCNICO · PRODUCTO ESTRELLA EN PRODUCCIÓN

Voltio · cómo construí un motor de progresión que decide serie a serie

Caso técnico de una aplicación web progresiva en producción, con suscripción de pago. Qué decisiones tomé, qué problemas me encontré y cómo los resolví. El producto está en voltioapp.es ↗; esta página es lo que hay por dentro.

Voltio es una aplicación web progresiva de entrenamiento de fuerza desarrollada por Rocío F. Peral que automatiza la sobrecarga progresiva serie a serie. Su motor de progresión decide, para cada serie individual, si subir, mantener o bajar la carga en función del rendimiento de la sesión anterior, y redondea el resultado al escalón real del material disponible en el gimnasio. Está construida sobre PHP 8.3, MariaDB y JavaScript sin dependencias externas, funciona sin conexión y se distribuye como PWA instalable, sin pasar por las tiendas de aplicaciones. Está en producción con usuarios de pago desde julio de 2026.

VOLTIO_DETERMINISTIC_PROGRESSION_ENGINE_v8.3
CÁLCULO SERIE A SERIE EN TIEMPO REAL
EJERCICIO DE PRUEBA:Press Banca Plano con Barra
Rango Objetivo: 8 - 10 repes
Peso actual:
SERIE 160 kg
Próxima Sesión:65 kg ▲ (+5% redondeado)
SERIE 260 kg
Próxima Sesión:65 kg ▲ (+5% redondeado)
SERIE 360 kg
Próxima Sesión:65 kg ▲ (+5% redondeado)
SERIE 460 kg
Próxima Sesión:60 kg ▶ (Mantiene)
Decisión por Serie Individual:Como ves, si las tres primeras series alcanzaron el tope (10 repes), suben a 65 kg. Si la cuarta serie se quedó en 9 repes (dentro del rango 8-10), se mantiene en 60 kg. El motor decide serie a serie para garantizar sobrecarga progresiva sin forzar fallos prematuros.
fitness_center

El problema

La sobrecarga progresiva es el principio número uno del entrenamiento de fuerza y todo el mundo lo conoce. El problema no es entenderlo: es aplicarlo serie a serie, semana a semana, sin equivocarse.

¿Subiste lo suficiente? ¿Te pasaste? ¿Esa serie fue mala o es que llevas tres semanas estancado? ¿Toca descargar?

Las apps que existían resolvían el registro —apuntar peso y repeticiones— pero no la decisión. Y el registro no te hace progresar: solo documenta lo que ya pasó.

El posicionamiento salió de ahí: «Voltio no te da la rutina. Exprime la que ya tienes.» No compite con quien te programa el entrenamiento; se pone encima de tu rutina y decide la carga.

CÁLCULO MATEMÁTICO DETERMINISTA

Cómo decide el motor

El caso base:

Tu rutina: Press banca · 4 series · rango 8-10 repeticiones
Trabajas con: 60 kg
Registras: 10 · 10 · 10 · 9
Voltio programa: 62,5 kg la próxima sesión
La regla, aplicada a cada serie por separado:

arrow_upwardRepeticiones por encima del rango → sube un 5%

arrow_downwardRepeticiones por debajo del rango → baja un 5%

horizontal_ruleRepeticiones dentro del rango → mantiene

La decisión es por serie individual, no por ejercicio. Si la cuarta serie no acompañó, esa no sube y las otras tres sí.

CASO DE ESTUDIO

Los cinco problemas que hubo que resolver

1 · Un 5% no siempre existe

Un 5% sobre 20 kg son 1 kg. Sobre 12 kg son 0,6 kg. Ese disco no existe. Si el motor programa 12,6 kg, el usuario abre la app, mira la barra y no sabe qué hacer.

La solución fue redondear al escalón real del material, que además cambia según el ejercicio: no es lo mismo una barra, una mancuerna o una polea. El motor detecta el tipo de material por el nombre del ejercicio y aplica el incremento mínimo que existe de verdad en cada caso.

Y una regla que parece obvia y no lo es: una subida nunca puede ser cero. Al subir, el redondeo va hacia arriba; al bajar, hacia abajo. Si el cálculo se quedaba en el mismo peso, se fuerza un escalón. Un motor de progresión que programa el mismo peso durante seis semanas no es conservador: está roto.

2 · Falta de dato no es lo mismo que fallo

Si un usuario apunta el peso pero se olvida de las repeticiones, un motor ingenuo interpreta cero repeticiones y baja la carga. Le está castigando por no rellenar un campo.

Voltio distingue las dos cosas. Sin repeticiones registradas no toca el peso, y busca hacia atrás la última semana que sí tenga datos reales de esa serie para usarla como referencia. La nota que ve el usuario lo dice con esas palabras: «Sin repes registradas la semana pasada → mantengo el peso».

3 · Hay ejercicios que no llevan peso

Dominadas, rueda abdominal, fondos. No se les puede subir la carga.

En esos casos el motor progresa en la otra variable: cuando el usuario supera el rango de repeticiones, lo que sube es el objetivo de repeticiones, no el peso.

4 · El histórico se destruía al empezar un mesociclo nuevo

Este fue el problema más difícil, y el más caro de descubrir. Cuando un usuario subía una rutina nueva, los ejercicios se creaban como registros nuevos en la base de datos. El press banca del mesociclo 2 era, para el sistema, un ejercicio distinto del press banca del mesociclo 1. Resultado: el progreso se reseteaba cada vez que cambiabas de bloque, que es justo cuando más te importa ver la evolución.

La solución fue introducir un linaje de ejercicios: cada ejercicio arrastra la referencia a su antecesor, y las consultas de histórico siguen esa cadena en lugar de mirar solo el identificador actual. El progreso continúa entre mesociclos, y el usuario puede confirmar a mano con qué ejercicio anterior enlaza cada uno cuando la correspondencia no es evidente.

5 · Cuándo descargar, sin que lo decida el usuario

El deload es necesario, y también es lo primero que la gente se salta. Voltio lo programa automáticamente, pero con criterio conservador: solo cuando el volumen real no progresa durante varias semanas normales seguidas, y nunca dos descargas consecutivas. Durante la descarga, los objetivos bajan al 60% del peso manteniendo las mismas series y repeticiones — se reduce la carga, no el estímulo técnico.

Y el detalle que hace que funcione: al cerrar la descarga, la progresión retoma las cargas de antes de ella. Si no, el usuario perdería un mes de progreso cada vez que descarga, y no volvería a hacerlo nunca.

El usuario también puede convertir su semana en descarga a mano, respondiendo a un cuestionario de señales de fatiga: ánimo, sueño, energía, apetito y rendimiento.

Las decisiones de arquitectura

PHP 8.3, MariaDB y JavaScript sin dependencias

Sin framework de front, sin bundler, sin proceso de build. Es una decisión deliberada y contracorriente, así que conviene explicarla: en un proyecto de una sola desarrolladora, cada dependencia es una deuda futura. Sin build, el ciclo es git push y funciona. No hay una cadena de herramientas que se rompa dos versiones más tarde, ni una actualización de framework que obligue a reescribir la mitad de la interfaz. La complejidad que no introduces es la única que no tienes que mantener.

PWA en lugar de app nativa

Se instala desde el navegador en móvil y escritorio, funciona sin conexión —imprescindible en sótanos de gimnasio sin cobertura, donde el entrenamiento se guarda en local y sube solo al recuperar la red— y evita la comisión de las tiendas de aplicaciones.

Migraciones versionadas

El esquema de base de datos evoluciona en migraciones numeradas y aplicadas en orden, con un vigilante que detecta desviaciones entre el esquema esperado y el real, y ofrece repararlas desde el panel de administración.

Copias de seguridad automáticas y verificadas

No basta con hacer copia: hay que comprobar que la copia sirve.

TODO (Rocío): Anécdota del backup

Añadir aquí el caso del backup que se corrompía a sí mismo y cómo se resolvió la verificación automática de restaurabilidad.

IA donde aporta, no donde luce

La API de Anthropic se usa en dos sitios concretos: interpretar rutinas que el usuario sube en Excel, PDF, foto o texto plano y convertirlas en entrenamientos estructurados, y generar el análisis semanal de rendimiento. La decisión de qué peso poner no la toma un modelo: la toma un motor determinista y comprobable. En un producto donde una recomendación equivocada puede lesionar a alguien, eso importa.

zoom_inCAPTURAS REALES DE VOLTIO PWA EN PRODUCCIÓN (HAZ CLIC PARA AMPLIAR)

Galería del Sistema Voltio en Funcionamiento

Capturas reales de la aplicación web progresiva instalada en producción (voltioapp.es). Haz clic en cualquiera para abrir el visor en alta resolución.

Capturas reales de Voltio PWA (voltioapp.es) desarrollada por Rocío F. Peral. Haz clic sobre cualquier captura para abrir el visor en alta resolución.

Qué hay en producción

check_circleAplicación en producción con suscripción de pago desde julio de 2026
check_circleMotor de progresión serie a serie con redondeo al material real
check_circleDeload automático conservador y manual por señales de fatiga
check_circleLinaje de ejercicios entre mesociclos
check_circleImportación de rutinas desde Excel, PDF, fotografía o texto mediante IA
check_circleAnálisis semanal automatizado por ejercicio y grupo muscular
check_circleSeries de aproximación calculadas según la carga del día
check_circle1RM estimado y evolución por ejercicio
check_circleRegistro corporal cruzado con el entrenamiento
check_circleModo entrenador con panel de atletas, revisión y comentarios
check_circleFuncionamiento sin conexión con sincronización diferida
check_circlePanel de administración con vigilancia de esquema y copias verificadas
TODO (Rocío): Cifras métricas de producción

Añadir aquí cifras actualizadas: usuarios activos, series registradas, entrenamientos procesados en producción.

Preguntas frecuentes

7 RESPUESTAS

¿Qué es Voltio?

expand_more
Voltio es una aplicación web progresiva de entrenamiento de fuerza desarrollada por Rocío F. Peral que automatiza la sobrecarga progresiva. Decide serie a serie si subir, mantener o bajar la carga según el rendimiento de la sesión anterior, y redondea el resultado al material que existe realmente en el gimnasio. Está disponible en voltioapp.es.

¿Cómo decide Voltio cuánto peso poner?

expand_more
El motor compara las repeticiones realizadas en cada serie con el rango objetivo de ese ejercicio. Si se supera el rango, sube la carga un 5%; si no se alcanza, la baja un 5%; si queda dentro, la mantiene. El resultado se redondea al incremento mínimo real del material —barra, mancuerna o polea— y nunca puede quedarse en cero.

¿Por qué está desarrollada sin framework de JavaScript?

expand_more
Es una decisión deliberada de mantenimiento. En un proyecto desarrollado por una sola persona, cada dependencia externa es una deuda futura. Sin proceso de build, el despliegue es directo y no hay cadena de herramientas que se rompa con el tiempo.

¿Usa inteligencia artificial para decidir las cargas?

expand_more
No. La decisión de carga la toma un motor determinista y comprobable con tests. La API de Anthropic se usa para interpretar las rutinas que el usuario sube en Excel, PDF, foto o texto, y para generar el análisis semanal de rendimiento. En un producto donde una recomendación equivocada puede causar una lesión, la progresión no se delega en un modelo generativo.

¿Qué es el linaje de ejercicios?

expand_more
Es el mecanismo que permite que el histórico de un ejercicio sobreviva al cambio de mesociclo. Cuando un usuario sube una rutina nueva, los ejercicios se crean como registros nuevos en la base de datos; el linaje encadena cada ejercicio con su antecesor para que la progresión y las gráficas continúen en lugar de reiniciarse.

¿Se puede probar?

expand_more
Sí, en voltioapp.es hay cuatro semanas de prueba gratuita sin tarjeta.

¿Quién ha desarrollado Voltio?

expand_more
Voltio ha sido desarrollada íntegramente por Rocío F. Peral: modelo de datos, motor de progresión, API, interfaz, integración con la API de Anthropic, pasarela de pago, despliegue e infraestructura.

Voltio está disponible en voltioapp.es con cuatro semanas de prueba gratuita

¿Necesitas construir algo con esta clase de lógica de negocio, o estás evaluando a alguien que pueda hacerlo? Hablemos.

También te puede interesar:ARDE·Kosty·Todos los proyectos