Porotein est une application complète de suivi d'entraînement qui permet aux utilisateurs de gérer leurs programmes d'entraînement, suivre leurs sessions, enregistrer leurs exercices et surveiller leur progression.
- Vue d'ensemble
- Architecture
- Installation
- Utilisation
- API Documentation
- Frontend Documentation
- Contribution
Porotein est une application full-stack composée de deux parties principales :
- API Backend : Une API RESTful construite avec Node.js, Express et MongoDB
- Frontend : Une application web réactive construite avec React et TypeScript
L'application permet aux utilisateurs de :
- Créer et gérer des programmes d'entraînement
- Enregistrer et suivre des sessions d'entraînement
- Gérer une bibliothèque d'exercices
- Suivre leur progression (poids, mesures, performances)
- Visualiser des statistiques sur leurs performances
Le projet est organisé en deux parties principales :
- Framework : Express.js
- Langage : TypeScript
- Base de données : MongoDB avec Mongoose
- Architecture : MVC (Modèle-Vue-Contrôleur)
- Framework : React
- Langage : TypeScript
- Gestion d'état : React Context et React Query
- Styles : SCSS Modules
- Routage : React Router
- Node.js (v14+)
- pnpm
- MongoDB
-
Cloner le dépôt :
git clone https://github.com/votre-utilisateur/porotein.git cd porotein
-
Installer les dépendances :
pnpm install
-
Configurer les variables d'environnement :
- Copier
.env.example
vers.env.local
dans le dossier racine - Copier
.env.example
vers.env.local
dans le dossier/app
- Copier
.env.example
vers.env
dans le dossier/api
- Modifier les variables selon votre environnement
- Copier
-
Démarrer l'application en mode développement :
pnpm dev
Une fois l'application démarrée, vous pouvez y accéder via :
- Frontend : http://localhost:5173
- API : http://localhost:4000
-
Authentification
- Inscription et connexion
- Gestion des tokens JWT
-
Gestion des programmes
- Création et modification de programmes d'entraînement
- Assignation de sessions à des programmes
-
Sessions d'entraînement
- Création de sessions personnalisées
- Suivi des sessions en temps réel
- Historique des sessions
-
Exercices
- Bibliothèque d'exercices
- Catégorisation par muscles et tags
- Suivi des performances par exercice
-
Profil et statistiques
- Suivi du poids et des mesures
- Visualisation des progrès
- Statistiques de performance
L'API est organisée selon les principes RESTful et expose les endpoints suivants :
POST /auth/register
- Inscription d'un nouvel utilisateurPOST /auth/login
- Connexion d'un utilisateurPOST /auth/refresh-token
- Rafraîchissement du token d'accès
GET /users/me
- Récupérer l'utilisateur courantPUT /users/me
- Mettre à jour l'utilisateur courantGET /users
- Récupérer tous les utilisateurs (admin)GET /users/:id
- Récupérer un utilisateur spécifiquePUT /users/:id
- Mettre à jour un utilisateurDELETE /users/:id
- Supprimer un utilisateur
GET /programs
- Récupérer tous les programmesPOST /programs
- Créer un nouveau programmeGET /programs/:id
- Récupérer un programme spécifiquePUT /programs/:id
- Mettre à jour un programmeDELETE /programs/:id
- Supprimer un programme
GET /sessions
- Récupérer toutes les sessionsPOST /sessions
- Créer une nouvelle sessionGET /sessions/:id
- Récupérer une session spécifiquePUT /sessions/:id
- Mettre à jour une sessionDELETE /sessions/:id
- Supprimer une session
GET /exercises
- Récupérer tous les exercicesPOST /exercises
- Créer un nouvel exerciceGET /exercises/:id
- Récupérer un exercice spécifiquePUT /exercises/:id
- Mettre à jour un exerciceDELETE /exercises/:id
- Supprimer un exercice
GET /api/weight
- Récupérer l'historique des poidsPOST /api/weight
- Ajouter une entrée de poidsPUT /api/weight/:id
- Mettre à jour une entrée de poidsDELETE /api/weight/:id
- Supprimer une entrée de poids
Le frontend est organisé en composants réutilisables et utilise une architecture basée sur les fonctionnalités.
/src/components
- Composants réutilisables/src/pages
- Pages de l'application/src/context
- Contextes React pour la gestion d'état global/src/hooks
- Hooks personnalisés/src/services
- Services pour les appels API/src/utils
- Fonctions utilitaires/src/routes
- Configuration des routes/src/styles
- Styles globaux et variables
BottomNav
- Navigation principale de l'applicationProgramSelector
- Sélection de programmesSessions
- Composants liés aux sessions d'entraînementStatistics
- Visualisation des statistiquesModal
- Fenêtre modale réutilisableTagSelector
- Sélection de tags pour les exercicesTimer
- Chronomètre pour les exercicesRepSetInputs
- Saisie des répétitions et séries
AuthContext
- Gestion de l'authentification et de l'utilisateur
apiService
- Service de base pour les appels API avec gestion des tokensauthService
- Service d'authentificationuserService
- Service de gestion des utilisateursprogramService
- Service de gestion des programmessessionService
- Service de gestion des sessionsexerciseService
- Service de gestion des exercices
Les contributions sont les bienvenues ! Pour contribuer :
- Forker le projet
- Créer une branche pour votre fonctionnalité (
git checkout -b feature/amazing-feature
) - Commiter vos changements (
git commit -m 'Add some amazing feature'
) - Pousser vers la branche (
git push origin feature/amazing-feature
) - Ouvrir une Pull Request
Ce projet est sous licence MIT.
Développé avec ❤️ par l'équipe Porotein