A comprehensive full-stack fitness management platform designed for gyms and personal trainers. The system provides complete workout planning, user management, real-time chat, and QR code check-in functionality.
- Secure authentication with JWT tokens and bcrypt encryption
- Role-based access control (Admin, Personal Trainer, User)
- Comprehensive workout planning and management
- Exercise library with video tutorials
- QR code generation for gym check-ins
- Real-time chat system using Socket.io
- User profile management
- Email notifications via Nodemailer
- Media storage with Cloudinary integration
- Responsive UI with SCSS and Bootstrap
- Testing suite with Jest and Supertest
- React 18.2.0 - UI library with Vite build tool
- React Router - Client-side routing
- React Hook Form - Form handling
- SCSS - Styling
- Bootstrap 5.3.8 - UI components
- SweetAlert2 - Modern alerts
- Recharts - Data visualization
- Swiper - Carousel component
- Socket.io Client - Real-time communication
- Node.js - Runtime environment
- Express.js - Web framework
- Mongoose - MongoDB ODM
- JWT - Authentication tokens
- Bcrypt - Password hashing
- Socket.io - WebSocket server
- Nodemailer - Email service
- Multer - File upload handling
- Cloudinary - Media management
- MongoDB - NoSQL database
- Jest - Testing framework
- Supertest - HTTP testing
- Vitest - Frontend unit testing
- Swagger - API documentation
- ESLint - Code linting
- Cookie Parser - Cookie handling
- CORS - Cross-origin resource sharing
gym-produção/
├── backend/
│ ├── config/
│ │ └── cloudinary.js # Media storage config
│ ├── data/
│ │ ├── users/ # User data layer
│ │ ├── workouts/ # Workout data layer
│ │ └── chat/ # Chat data layer
│ ├── middleware/
│ │ └── token.js # JWT verification
│ ├── server/
│ │ ├── auth.js # Authentication routes
│ │ ├── users.js # User management
│ │ ├── workouts.js # Workout management
│ │ ├── chat.js # Chat functionality
│ │ └── swagger.js # API docs
│ ├── tests/ # Test suites
│ └── index.js # Server entry point
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── AdminPage/ # Admin dashboard
│ │ │ ├── PersonalPage/ # Trainer dashboard
│ │ │ ├── UserPage/ # User dashboard
│ │ │ ├── Login/ # Authentication
│ │ │ └── Register/ # User registration
│ │ ├── contexts/ # React contexts
│ │ ├── hooks/ # Custom hooks
│ │ └── utils/ # Utility functions
│ └── tests/ # Frontend tests
└── package.json
- JWT-based authentication
- Password encryption with bcrypt
- Role-based permissions (Admin, Personal Trainer, User)
- Secure route protection
- Create and assign workout plans
- Exercise library with videos
- Set tracking (reps, weight, rest time)
- Calendar view for workout scheduling
- Progress tracking
- Admin dashboard for user oversight
- Personal trainer client management
- User profile customization
- Activity tracking
- Live chat between users and trainers
- Socket.io integration
- Instant notifications
- Cloudinary integration for images/videos
- Exercise demonstration videos
- Profile pictures
- Workout thumbnails
- Node.js 18+
- MongoDB
- npm or yarn
- Clone the repository
git clone https://github.com/lou-spec/gym.git
cd gym- Install backend dependencies
cd backend
npm install- Install frontend dependencies
cd ../frontend
npm install- Configure environment variables
Create .env in backend directory:
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
EMAIL_USER=your_email
EMAIL_PASS=your_email_password- Start backend server
cd backend
npm start- Start frontend development server
cd frontend
npm startApplication will run at http://localhost:8100
Access Swagger documentation at /api-docs endpoint when server is running.
cd backend
npm testcd frontend
npm testThe application is configured for deployment on Render.
Deploy backend to Render with MongoDB Atlas
Deploy frontend to Vercel with environment variables
Website: gym-pwa-three.vercel.app
This project is licensed under the ISC License.
ArpaoCeleste & lou-spec
Uma plataforma completa de gestão fitness full-stack projetada para ginásios e personal trainers. O sistema disponibiliza planeamento completo de treinos, gestão de utilizadores, chat em tempo real e funcionalidade de check-in por código QR.
- Autenticação segura com tokens JWT e encriptação bcrypt
- Controlo de acesso baseado em funções (Admin, Personal Trainer, Utilizador)
- Planeamento e gestão abrangente de treinos
- Biblioteca de exercícios com tutoriais em vídeo
- Geração de códigos QR para check-in no ginásio
- Sistema de chat em tempo real usando Socket.io
- Gestão de perfis de utilizadores
- Notificações por email via Nodemailer
- Armazenamento de media com integração Cloudinary
- UI responsiva com SCSS e Bootstrap
- Suite de testes com Jest e Supertest
- React 18.2.0 - Biblioteca UI com ferramenta de build Vite
- React Router - Routing do lado do cliente
- React Hook Form - Gestão de formulários
- SCSS - Estilização
- Bootstrap 5.3.8 - Componentes UI
- SweetAlert2 - Alertas modernos
- Recharts - Visualização de dados
- Swiper - Componente carrossel
- Socket.io Client - Comunicação em tempo real
- Node.js - Ambiente de execução
- Express.js - Framework web
- Mongoose - ODM para MongoDB
- JWT - Tokens de autenticação
- Bcrypt - Hash de passwords
- Socket.io - Servidor WebSocket
- Nodemailer - Serviço de email
- Multer - Gestão de upload de ficheiros
- Cloudinary - Gestão de media
- MongoDB - Base de dados NoSQL
- Jest - Framework de testes
- Supertest - Testes HTTP
- Vitest - Testes unitários frontend
- Swagger - Documentação da API
- ESLint - Linting de código
- Cookie Parser - Gestão de cookies
- CORS - Partilha de recursos entre origens
gym-produção/
├── backend/
│ ├── config/
│ │ └── cloudinary.js # Configuração armazenamento media
│ ├── data/
│ │ ├── users/ # Camada de dados utilizadores
│ │ ├── workouts/ # Camada de dados treinos
│ │ └── chat/ # Camada de dados chat
│ ├── middleware/
│ │ └── token.js # Verificação JWT
│ ├── server/
│ │ ├── auth.js # Rotas autenticação
│ │ ├── users.js # Gestão utilizadores
│ │ ├── workouts.js # Gestão treinos
│ │ ├── chat.js # Funcionalidade chat
│ │ └── swagger.js # Docs API
│ ├── tests/ # Suites de testes
│ └── index.js # Ponto entrada servidor
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── AdminPage/ # Dashboard admin
│ │ │ ├── PersonalPage/ # Dashboard trainer
│ │ │ ├── UserPage/ # Dashboard utilizador
│ │ │ ├── Login/ # Autenticação
│ │ │ └── Register/ # Registo utilizador
│ │ ├── contexts/ # Contextos React
│ │ ├── hooks/ # Hooks personalizados
│ │ └── utils/ # Funções utilitárias
│ └── tests/ # Testes frontend
└── package.json
- Autenticação baseada em JWT
- Encriptação de passwords com bcrypt
- Permissões baseadas em funções (Admin, Personal Trainer, Utilizador)
- Proteção de rotas seguras
- Criar e atribuir planos de treino
- Biblioteca de exercícios com vídeos
- Rastreamento de séries (repetições, peso, tempo de descanso)
- Vista de calendário para agendamento de treinos
- Rastreamento de progresso
- Dashboard admin para supervisão de utilizadores
- Gestão de clientes para personal trainers
- Personalização de perfil de utilizador
- Rastreamento de atividade
- Chat ao vivo entre utilizadores e trainers
- Integração Socket.io
- Notificações instantâneas
- Integração Cloudinary para imagens/vídeos
- Vídeos demonstração de exercícios
- Fotografias de perfil
- Miniaturas de treinos
- Node.js 18+
- MongoDB
- npm ou yarn
- Clonar o repositório
git clone https://github.com/lou-spec/gym.git
cd gym- Instalar dependências backend
cd backend
npm install- Instalar dependências frontend
cd ../frontend
npm install- Configurar variáveis de ambiente
Criar .env no diretório backend:
MONGO_URI=string_conexao_mongodb
JWT_SECRET=segredo_jwt
CLOUDINARY_CLOUD_NAME=nome_cloud
CLOUDINARY_API_KEY=chave_api
CLOUDINARY_API_SECRET=segredo_api
EMAIL_USER=email
EMAIL_PASS=password_email- Iniciar servidor backend
cd backend
npm start- Iniciar servidor desenvolvimento frontend
cd frontend
npm startAplicação irá executar em http://localhost:8100
Aceder à documentação Swagger no endpoint /api-docs quando o servidor estiver a executar.
cd backend
npm testcd frontend
npm testA aplicação está configurada para deploy no Render.
Fazer deploy do backend no Render com MongoDB Atlas
Fazer deploy do frontend no Vercel com variáveis de ambiente
Website: gym-pwa-three.vercel.app
Este projeto está licenciado sob a Licença MIT.
ArpaoCeleste & lou-spec