ABR Liftlog
Aplicación web para el móvil con la que llevo el registro de mis entrenamientos de gimnasio. Rutinas con una imagen de cada máquina, series con peso, repeticiones y RIR, las últimas series que hiciste en esa misma máquina, calendario con adherencia semanal y estadísticas de progreso. Funciona sin conexión, guarda los datos en el móvil y hace copias en Google Drive. La usamos un compañero de gimnasio y yo.




- servidores
- 0
- servidores
- commits en dos días
- 36
- commits en dos días
- tests (32 unitarios y 28 e2e)
- 60
- tests (32 unitarios y 28 e2e)
- personas que la usan a diario
- 2
- personas que la usan a diario
Qué hace
- Hoy, de un vistazo. Al abrirla ves qué entrenamiento toca, cuántos ejercicios y series tiene y un botón grande para empezar. Si dejaste una sesión a medias, el botón es para continuarla.
- Rutinas con imágenes. Cada ejercicio lleva la foto de la máquina, la técnica y un enlace para buscarlo en YouTube. En el gimnasio, la foto es lo que te dice qué máquina buscar.
- Series de verdad. Carga, repeticiones y RIR por serie, con calentamientos aparte. Cada serie se guarda al registrarla, y lo que estás escribiendo también, por si se cierra la app.
- La última vez en esa máquina. Si identificas la máquina, ves las series de tu última sesión en ella y puedes usarlas como borrador. Si está ocupada, cambias de máquina o de ejercicio sin tocar la rutina.
- Calendario honesto. Distingue hecho, parcial, falta, justificado, descanso y extra. Un día de descanso no es una falta, y un día justificado no cuenta en el porcentaje.
- Estadísticas. Adherencia y asistencia por semana, series por grupo muscular y progreso por ejercicio y máquina.
- Tus datos, en tu móvil. Todo se guarda en el navegador y funciona sin conexión. Copias en JSON y en una carpeta de tu Google Drive, manuales o automáticas. Las rutinas se comparten como un archivo con sus imágenes, sin tu historial.
Cómo está hecho
Una PWA sin servidor
React 19 y TypeScript con Vite, publicada como sitio estático en GitHub Pages. Workbox precachea la aplicación, las fuentes y los iconos, así que después de la primera visita abre sin conexión. No hay backend ni cuentas.
IndexedDB como fuente de verdad
Los datos viven en IndexedDB a través de Dexie: planes versionados, asignaciones con fecha, sesiones, ejercicios hechos, series, ajustes del calendario, imágenes y borradores. localStorage no guarda nada importante.
El entrenamiento real no es la plantilla
Al empezar una sesión se guarda una copia del día de la rutina. Editar la rutina crea una versión nueva, así que el historial nunca cambia por tocar el plan.
Problemas que resolví
- Un HTML que solo recordaba el último peso. La versión anterior era un HTML que guardaba un valor por ejercicio, sin fechas ni series. Lo importo como observaciones sin fecha, que no aparecen en las gráficas.
- Comparar pesos de máquinas distintas. Dos prensas no cargan igual, así que el progreso y los récords se separan por máquina y por tipo de carga.
- Dos pestañas creando dos carpetas en Drive. Un bloqueo con Web Locks hace que solo una busque o cree la carpeta.
- Una subida a Drive que falla a medias. Si la copia se cortó, el reintento reutiliza el mismo archivo en vez de crear otro.