Aplicación completa de fitness y entrenamiento desarrollada con React, Node.js y PostgreSQL. Incluye funcionalidades para usuarios, entrenadores y administradores.
- Características
- Tecnologías
- Requisitos Previos
- Instalación
- Configuración
- Despliegue Local
- Despliegue con Docker
- Estructura del Proyecto
- Funcionalidades Detalladas
- API
- Scripts Disponibles
- Contribución
- Licencia
- 🏋️ Gestión de Rutinas: Crear, editar y gestionar rutinas de entrenamiento personalizadas
- 📊 Seguimiento de Progreso: Registro diario de peso, medidas y progreso visual
- 🍎 Gestión de Nutrición: Registro de comidas, cálculo de calorías y macronutrientes
- 📅 Calendario de Entrenamientos: Planificación y seguimiento de sesiones
- 🎯 Objetivos y Metas: Establecer y seguir objetivos de peso y fitness
- 🏆 Sistema de Logros: Badges y logros por hitos alcanzados
- ⏱️ Modo Entrenamiento Activo: Cronómetro, contador de repeticiones y temporizador de descanso
- 📸 Check-ins Semanales: Registro de fotos de progreso y estado de ánimo
- 💬 Mensajería: Comunicación directa con tu entrenador
- 🔔 Notificaciones: Recordatorios y alertas personalizadas
- 👥 Gestión de Clientes: Dashboard completo para gestionar múltiples clientes
- 📋 Plantillas de Rutinas: Crear y compartir plantillas de entrenamiento
- 📊 Análisis de Progreso: Visualización del progreso de cada cliente
- 📧 Sistema de Invitaciones: Invitar clientes por email
- 💬 Mensajería: Comunicación directa con clientes
- 📈 Métricas y Estadísticas: Análisis detallado del rendimiento de clientes
- 🛠️ Panel de Administración: Gestión completa de usuarios, coaches y contenido
- 📊 Métricas del Sistema: Estadísticas globales de la aplicación
- 🎨 Personalización de Marca: Configuración de colores y branding
- 🔐 Gestión de Roles: Asignación y gestión de permisos
- React 19 - Biblioteca de UI
- Vite - Build tool y dev server
- React Router - Enrutamiento
- Zustand - Gestión de estado
- Tailwind CSS 4 - Estilos
- Radix UI - Componentes accesibles
- Framer Motion - Animaciones
- Socket.io Client - Comunicación en tiempo real
- Recharts - Gráficos y visualizaciones
- Node.js 24 - Runtime
- Express 5 - Framework web
- PostgreSQL - Base de datos
- Drizzle ORM - ORM para PostgreSQL
- JWT - Autenticación
- Socket.io - WebSockets
- Winston - Logging
- Express Validator - Validación
- Helmet - Seguridad
- Swagger - Documentación API
- Docker - Contenedores
- Docker Compose - Orquestación
- Nginx - Servidor web (producción)
- Node.js >= 24.0.0
- npm >= 11.0.0
- PostgreSQL >= 16.0 (o Docker para ejecutar PostgreSQL)
- Git
Opcional:
- Docker y Docker Compose (para despliegue con contenedores)
git clone https://github.com/tu-usuario/fitness-app.git
cd fitness-app# Instalar todas las dependencias (raíz, backend, frontend y docs)
npm run install:all
# O instalar por partes:
npm install
npm run backend:install
npm run frontend:install
cd docs && npm install && cd ..Backend:
cd fitness-app-backend
cp .env.example .env
# Edita .env con tus valores (ver sección de Configuración)Frontend:
cd fitness-app-frontend
cp .env.example .env
# Edita .env con tus valores💡 Tip: Los archivos
.env.exampleen cada directorio contienen todas las variables disponibles con descripciones detalladas.
Copia el archivo de ejemplo y configura tus valores:
cd fitness-app-backend
cp .env.example .env
# Edita .env con tus valoresVariables críticas requeridas:
DATABASE_URL: URL de conexión a PostgreSQLJWT_SECRET: Secreto para firmar tokens JWT (mínimo 32 caracteres)
JWT_SECRETdebe tener al menos 32 caracteres- Genera un secreto seguro:
openssl rand -base64 32 - Ver
fitness-app-backend/.env.examplepara todas las variables disponibles
Copia el archivo de ejemplo y configura tus valores:
cd fitness-app-frontend
cp .env.example .env
# Edita .env con tus valoresVariable requerida:
VITE_API_URL: URL completa del backend API (ej:http://localhost:4000/api)
Ver fitness-app-frontend/.env.example para más detalles.
# Crear base de datos
createdb fitnessdb
# O usando psql:
psql -U postgres
CREATE DATABASE fitnessdb;# Iniciar solo PostgreSQL
docker-compose up -d postgres# Desde la raíz del proyecto
npm run backend:migrate
# O desde el directorio backend
cd fitness-app-backend
npm run db:migratecd fitness-app-backend
# Poblar ejercicios
npm run seed:exercises
# Poblar alimentos comunes
npm run seed:foods
# Poblar rutinas predefinidas
npm run seed:predefined-routines
# O poblar todo
npm run seed:allTerminal 1 - Backend:
npm run backend:start
# O: cd fitness-app-backend && npm startTerminal 2 - Frontend:
npm run frontend:dev
# O: cd fitness-app-frontend && npm run devTerminal 3 - Documentación (Opcional):
npm run docs:start- Frontend: http://localhost:5173
- Backend API: http://localhost:4000
- Documentación: http://localhost:3000 (si se ejecuta)
# Construir e iniciar todos los servicios
docker-compose up --build
# O en modo detached
docker-compose up -d# Construir e iniciar con configuración de producción
docker-compose -f docker-compose.prod.yml up --build -d
# Ver logs
docker-compose -f docker-compose.prod.yml logs -f# Detener servicios
docker-compose down
# Ver logs
docker-compose logs -f
# Reconstruir sin caché
docker-compose build --no-cachefitness-app/
├── fitness-app-backend/ # Backend API
│ ├── config/ # Configuración
│ ├── db/ # Base de datos y migraciones
│ ├── middleware/ # Middlewares de Express
│ ├── routes/ # Rutas de la API
│ ├── scripts/ # Scripts de utilidad
│ ├── tests/ # Tests
│ ├── utils/ # Utilidades
│ ├── index.js # Punto de entrada
│ └── package.json
│
├── fitness-app-frontend/ # Frontend React
│ ├── public/ # Archivos estáticos
│ ├── src/
│ │ ├── components/ # Componentes reutilizables
│ │ ├── pages/ # Páginas de la aplicación
│ │ ├── hooks/ # Custom hooks
│ │ ├── services/ # Servicios API
│ │ ├── stores/ # Estado global (Zustand)
│ │ ├── utils/ # Utilidades
│ │ └── App.jsx # Componente principal
│ └── package.json
│
├── docs/ # Documentación (Docusaurus)
│ ├── docs/ # Archivos de documentación
│ └── docusaurus.config.js
│
├── scripts/ # Scripts del monorepo
├── docker-compose.yml # Docker Compose desarrollo
├── docker-compose.prod.yml # Docker Compose producción
└── package.json # Configuración del monorepo
- ✅ Registro y login de usuarios
- ✅ Autenticación con JWT (access + refresh tokens)
- ✅ Recuperación de contraseña por email
- ✅ Autenticación social (Google, Facebook)
- ✅ Roles: CLIENT, COACH, ADMIN
- ✅ Protección de rutas por rol
- ✅ Crear rutinas personalizadas
- ✅ Añadir ejercicios con sets, reps, peso y duración
- ✅ Rutinas predefinidas del sistema
- ✅ Crear rutinas desde plantillas
- ✅ Activar/desactivar rutinas
- ✅ Exportar rutinas a PDF
- ✅ Compartir rutinas con entrenador
- ✅ Catálogo completo de ejercicios
- ✅ Búsqueda y filtrado avanzado
- ✅ Visualización con GIFs animados
- ✅ Información detallada de cada ejercicio
- ✅ Categorías y músculos trabajados
- ✅ Integración con wger API
- ✅ Registro de comidas diarias
- ✅ Búsqueda de alimentos
- ✅ Cálculo automático de calorías y macronutrientes
- ✅ Base de datos de alimentos (OpenFoodFacts)
- ✅ Historial de comidas
- ✅ Objetivos calóricos personalizados
- ✅ Registro diario de peso
- ✅ Gráficos de progreso
- ✅ Seguimiento de medidas corporales
- ✅ Historial completo
- ✅ Comparación con períodos anteriores
- ✅ Cálculo de IMC y otras métricas
- ✅ Modo entrenamiento activo
- ✅ Cronómetro por ejercicio
- ✅ Contador de repeticiones
- ✅ Temporizador de descanso
- ✅ Registro de series completadas
- ✅ Historial de entrenamientos
- ✅ Mensajería entre usuario y entrenador
- ✅ Notificaciones en tiempo real
- ✅ Sistema de invitaciones
- ✅ Compartir logros
- ✅ Dashboard personalizado por rol
- ✅ Métricas y estadísticas
- ✅ Gráficos de progreso
- ✅ Resumen diario/semanal/mensual
- ✅ Comparación de períodos
- ✅ Vista de calendario de entrenamientos
- ✅ Programar rutinas
- ✅ Recordatorios
- ✅ Historial de sesiones
- ✅ Sistema de badges
- ✅ Logros por hitos
- ✅ Racha de días consecutivos
- ✅ Puntos y niveles
POST /api/auth/register- RegistroPOST /api/auth/login- LoginPOST /api/auth/refresh- Refresh tokenPOST /api/auth/forgot-password- Recuperar contraseñaPOST /api/auth/reset-password- Resetear contraseña
GET /api/routines- Listar rutinasPOST /api/routines- Crear rutinaGET /api/routines/:id- Obtener rutinaPUT /api/routines/:id- Actualizar rutinaDELETE /api/routines/:id- Eliminar rutina
GET /api/exercises- Listar ejerciciosGET /api/exercises/:id- Obtener ejercicioGET /api/exercises/search- Buscar ejercicios
GET /api/foods- Buscar alimentosPOST /api/logs- Registrar comidaGET /api/logs- Obtener logs diarios
POST /api/logs/weight- Registrar pesoGET /api/progress- Obtener progresoGET /api/streaks- Obtener rachas
GET /api/coach/clients- Listar clientesGET /api/coach/clients/:id- Detalle de clientePOST /api/invite- Invitar cliente
GET /api/admin/stats- EstadísticasGET /api/admin/users- Listar usuariosPUT /api/admin/users/:id- Actualizar usuario
Documentación completa: La API está documentada con Swagger. Accede a /api-docs cuando el backend esté ejecutándose.
# Instalación
npm run install:all # Instalar todas las dependencias
# Desarrollo
npm run backend:start # Iniciar backend
npm run frontend:dev # Iniciar frontend
npm run docs:start # Iniciar documentación
# Base de datos
npm run backend:migrate # Ejecutar migraciones
# Docker
npm run docker:build # Construir imágenes
npm run docker:up # Iniciar servicios
npm run docker:down # Detener servicios
# Testing
npm run test # Ejecutar todos los tests
npm run backend:test # Tests del backend
npm run frontend:test # Tests del frontend
# Linting
npm run lint # Lint del frontend
npm run format # Formatear códigocd fitness-app-backend
# Base de datos
npm run db:migrate # Ejecutar migraciones
npm run db:generate # Generar migraciones
# Seeds
npm run seed:all # Poblar todos los datos
npm run seed:exercises # Poblar ejercicios
npm run seed:foods # Poblar alimentos
npm run seed:predefined-routines # Poblar rutinas
# Testing
npm run test # Ejecutar tests
npm run test:watch # Tests en modo watchcd fitness-app-frontend
npm run dev # Desarrollo
npm run build # Build de producción
npm run preview # Preview del build
npm run test # Tests
npm run lint # LintingLas contribuciones son bienvenidas. Por favor, lee nuestra Guía de Contribución para más detalles.
Resumen rápido:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'feat: Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
- Sigue las convenciones de código existentes
- Añade tests para nuevas funcionalidades
- Actualiza la documentación según sea necesario
- Asegúrate de que todos los tests pasen
- Usa Conventional Commits para los mensajes de commit
Para más información, consulta CONTRIBUTING.md.
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Para soporte, abre un issue en el repositorio de GitHub.
Desarrollado con ❤️ para la comunidad fitness