Sobre el proyecto
FitHub nació de nuestra propia experiencia como usuarios de gimnasio: la falta de motivación y el abandono del entrenamiento son problemas reales que las soluciones existentes no resuelven bien. Desarrollé esta plataforma junto a otro compañero como Trabajo de Fin de Grado, con el objetivo de digitalizar la gestión de gimnasios y hacer el entrenamiento más social y motivador. La aplicación permite a clientes registrar su progreso y competir con amigos, a entrenadores monitorizar y asignar rutinas personalizadas, y a administradores gestionar toda la operativa del gimnasio: usuarios, clases, pagos y reservas. Cuenta con un sistema de gamificación real (rankings, logros y medallas), un panel de estadísticas visual, chat entre usuarios y una pasarela de pago integrada con Stripe.
Funcionalidades clave
- Sistema de tres roles diferenciados: Cliente, Entrenador y Administrador, con permisos independientes
- Gamificación real: rankings públicos por marcas personales, sistema de logros y medallas por hitos
- Seguimiento de entrenamientos con historial, marcas personales y visualización de progreso mediante estadísticas
- Reserva de clases con control de aforo limitado y calendario de disponibilidad
- Panel de administración completo: gestión de usuarios, clases, ejercicios, rutinas, dietas y pagos
- Sistema social con lista de amigos, chat entre usuarios y feed de logros compartidos
- Pasarela de pago integrada con Stripe para gestión de cuotas y planes Premium
- Panel del entrenador para asignar rutinas personalizadas y monitorizar la carga de cada cliente
- Sistema de notificaciones por correo electrónico con PHPMailer
- Diseño responsive probado en más de 7 dispositivos reales (iPhone, Android, tablet, escritorio)
El reto
El mayor reto técnico fue el motor de gamificación: calcular rankings en tiempo real consultando marcas personales de todos los usuarios generaba consultas pesadas que degradaban el rendimiento. Además, al ser un proyecto con muchos módulos interdependientes, cualquier cambio en la base de datos afectaba en cadena a múltiples partes de la aplicación.
La solución
Implementé una tabla auxiliar de rankings que se actualiza de forma diferida, desacoplando el cálculo pesado del renderizado de cada página. Para la interdependencia de módulos, establecimos convenciones claras de naming y una capa de acceso a datos centralizada desde el inicio, lo que redujo drásticamente los errores en cascada.
Qué aprendí
Este proyecto me enseñó que pensar la arquitectura antes de escribir código no es opcional cuando la aplicación tiene muchos módulos relacionados. También profundicé en diseño de base de datos relacional compleja, integración de servicios de terceros (Stripe, PHPMailer), y aprendí a trabajar en equipo con Git gestionando ramas y conflictos de merge en un proyecto real.
Ver el proyecto
Repositorio privado — disponible bajo petición
