Vigorly

Tu pulso deportivo en un solo sitio: moverte, entrenar y medir progreso sin cambiar de app

Contexto

Las apps de fitness suelen obligarte a elegir: o un panel de pasos, o un catálogo de rutinas, o un historial que no conversa con tus estadísticas. El resultado es fricción, métricas vacías en cuentas nuevas y pantallas que compiten por atención con gradientes y animaciones que impresionan en capturas pero cansan al quinto uso.

Vigorly nace para cerrar ese hueco: un compañero de entrenamiento local, legible y coherente de punta a punta. No es un feed social ni un mockup de dashboard: es una aplicación Android completa que lleva al usuario desde el registro hasta el perfil atlético, pasando por sesiones activas, historial cronológico y análisis semanal — todo conectado a la misma fuente de datos en el dispositivo.

Vigorly — inicio con anillos de actividad y navegación inferior

Objetivo

El proyecto demuestra que se puede diseñar y construir una experiencia de fitness fiable y usable a diario sin depender de un backend externo. Los objetivos concretos son:

  • Ofrecer claridad en dos segundos al abrir la app: saludo, anillos de actividad, meta diaria y entrenamiento recomendado.
  • Permitir entrenar con intención mediante un catálogo filtrable de rutinas reales, sesión guiada por ejercicios y resumen al completar.
  • Mantener honestidad en los datos: perfil atlético, nivel, rachas y estadísticas derivadas del historial; una cuenta nueva no muestra gráficos inventados.
  • Separar con sentido identidad (Perfil) y rendimiento (Análisis), respondiendo preguntas distintas sin duplicar accesos.

Enfoque de diseño / UX

El principio rector es claridad antes que espectáculo. La estética toma referencias del lenguaje visual de apps de actividad consolidadas — anillos diarios, stats grandes, secciones con aire — pero adaptada a una app autónoma, sin ecosistemas cerrados.

La interfaz apuesta por:

  • Jerarquía tipográfica escalonada (DisplayStat, HeadlineLgMobile, LabelCaps): números grandes para lo importante, etiquetas en mayúsculas para el contexto.
  • Tarjetas métricas en grid 2×2 en el dashboard para escaneo rápido.
  • Estados vacíos con copy útil que explican qué aparecerá tras el primer entrenamiento, en lugar de ocultar secciones.
  • Test tags en nodos clave para pruebas E2E sin contaminar la experiencia visual.

El tono es profesional y cercano: la app guía, no presume.

Vigorly — catálogo de entrenamientos con filtros y búsqueda

Decisiones clave de UI/UX y flujo

Auth vs. uso diario

Las pantallas de login, registro y onboarding usan fondo con gradiente completo: marcan la entrada y diferencian el “antes” de tener cuenta. El shell principal (cuatro tabs) usa un fondo más ligero y una top bar contextual — menos carga visual y scroll más cómodo en el uso repetido.

Perfil ≠ Análisis

Fue una decisión explícita de producto, no solo de carpetas:

Pregunta del usuario	Pantalla	Contenido
¿Quién soy como deportista? ¿Qué he desbloqueado?
Perfil
Avatar, nivel, racha, escaparate de logros, radar atlético

¿Cómo voy esta semana? ¿Cuál fue mi mejor día?
Análisis (InsightsScreen)
Media por sesión, minutos semanales, barras de actividad, progreso de meta
Anillos y datos reales

Los anillos de actividad (mover, ejercicio, estar activo) son el ancla visual del inicio. Un toque abre el detalle de actividad con calendario para revisar otros días. El radar atlético solo se dibuja cuando hay historial real; sin entrenamientos completados, el perfil muestra estados vacíos honestos.

Fluidez como decisión de diseño

UiPerformance centraliza dos reglas: animaciones decorativas desactivadas en uso diario (decorativeMotionEnabled = false) y fondo ligero en el shell principal (useLightMainBackground = true). La actividad del día se actualiza en memoria al instante y se persiste en DataStore de forma espaciada para no penalizar scroll ni transiciones.

Arquitectura y flujo de navegación
Splash → (Login | Registro) → Setup (asistente) → Shell principal (4 tabs)
                                                      │
        ┌─────────────────────────────────────────────┼─────────────────────────────┐
        ▼                                             ▼                             ▼
  Detalle actividad                          Detalle entreno → Sesión activa   Ajustes / Logros / Análisis
  (desde Dashboard)                          → Resumen de sesión

Cuatro destinos fijos en la bottom bar: Inicio · Entrenos · Historial · Perfil. El estado se restaura al cambiar de tab para alternar entre “¿cómo va mi día?” y “¿qué entreno?” sin perder contexto.

Rutas secundarias gestionadas con Navigation Compose y vigorlyNavGraph: detalle de entreno, sesión activa con controles play/pausa y avance por ejercicios, resumen post-sesión, detalle de historial, pantalla de logros (MilestonesScreen) y ajustes.

Setup y recomendaciones

Tras registrarse, el asistente de setup recoge objetivo fitness, nivel de actividad, sesiones semanales, ubicación preferida y horario. Esas preferencias alimentan recomendaciones (WorkoutRecommender) y metas sin bloquear el acceso a la app principal.

Vigorly — perfil atlético y resumen de progreso

Desarrollo / ingeniería

Stack y patrones

UI: Kotlin, Jetpack Compose, Material 3, Coil para imágenes de rutinas.

Arquitectura: MVVM con capa presentation/feature/ por dominio (dashboard, perfil, ajustes...) y grafo de navegación centralizado.

Datos: VigorlyRepository + DataStore Preferences con codecs JSON para cuentas, historial, sesión y preferencias. Sin servidor propio: registro e inicio con email/contraseña funcionan íntegramente en local.

Actividad: DailyActivityTracker usa reconocimiento de actividad y sensor de pasos cuando hay permiso; métricas del día reflejadas en la UI al instante.

Auth opcional: Google Sign-In vía Credentials / Google ID, condicionado a configuración OAuth en el dispositivo.

i18n: español (base), inglés, catalán, alemán y francés, configurable desde Ajustes.

Release: R8, shrink de recursos y reglas ProGuard específicas.

Vigorly — sesión activa con reproducción y métricas

Catálogo y contenido

Las ~43 rutinas del catálogo (WorkoutCatalog / WorkoutCatalogAll) están embebidas en la app — no se descargan de una API. Incluyen tipos como fuerza, HIIT, yoga, natación, etc., con bloques, ejercicios, duración estimada y calorías.

Los logros (~30 hitos en MilestoneCatalog) se desbloquean por constancia, volumen y variedad a partir del historial real.

Calidad

Mas de 30 clases de tests unitarios (auth, codecs, calculadoras de racha, nivel, perfil atlético, recomendador, navegación...) y suite E2E instrumentada (VigorlyAppInstrumentedTest) que valida flujo de sesión, las cuatro tabs, ajustes, accesos desde Perfil a Análisis y Logros, y persistencia de idioma.

Qué demuestra este proyecto

  • Diseño de producto digital con flujo completo de onboarding a análisis, no solo pantallas sueltas.
  • UX de fitness con decisiones explícitas: separación Perfil/Análisis, estados vacíos honestos, anillos como lenguaje visual.
  • Ingeniería Android moderna con Compose, MVVM, navegación tipada y persistencia local robusta.
  • Rendimiento consciente: fondos diferenciados, animaciones decorativas off, I/O de actividad espaciada.
  • Datos íntegros: estadísticas y radar calculados del historial; catálogo local pero sesiones y progreso reales del usuario.
  • Cultura de pruebas: cobertura unitaria amplia + E2E con test tags y harness de cuenta semilla.