← Proyectos
Web

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.

El calendario de noviembre con días hechos, uno parcial, uno justificado y el resumen semanal de adherencia
El registro de una serie en el móvil, con la foto de la máquina, el objetivo de 3 series de 8 a 12 repeticiones y los campos de carga, repeticiones y RIRUna sesión en curso en el escritorio, con la foto de la máquina de press de pecho, el formulario de la serie y las últimas series hechas en esa máquinaLa gráfica de carga máxima del press de pecho en la máquina Chest press 1, que sube de 30 a 35 kg en tres semanas
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.

Stack

React 19TypeScriptViteReact RouterDexieIndexedDBAjvJSON Schemadate-fnsRechartsGoogle Identity ServicesGoogle Drive APIWeb LocksWorkboxPWAVitestPlaywrightGitHub Actions