-
Notifications
You must be signed in to change notification settings - Fork 0
Wiki Ducklift
DuckLift est une application web et mobile conçue pour simplifier et améliorer la visualisation et le suivi des programmes d'haltérophilie pour les membres de mon club. Cette application permet aux athlètes de consulter facilement leurs programmes, leurs progressions et de recevoir des annonces du coach via l'application mobile. Le coach pourra paramétrer et définir les entrainements via l'application web.
Ce projet vise à enrichir ma maîtrise de certaines technologies en consolidant mes compétences existantes et en en explorant de nouvelles.
Le projet est la réalisation d'un projet complet incluants : la conception logiciel, le design ui/ux, le front-end, le backend, la persistance des données en incluant les divers tests et respectant la sécurité des informations des utilisateurs.
La Web App doit être full responsive et intégrer les normes d'accessibilité. Elle doit être supporté sur les principaux navigateurs. L'application mobile doit être distribué sur les plateformes iOS et Android. On aura donc essentiellement un rendu mobile, mais il faudra aussi garder en tête qu'un affiche sur tablette est possible.
Le public cible sont les membres de mon club d'haltérophilie, les athlètes et le coach de ce club.
- Définition de la cible et des besoins
- Définition des objectifs globaux des acteurs via diagramme UML
- Identification des interactions entre les différents cas d'usages
- Définition d'un glossaire des domaines du système
- Conception et modélisation de la base de donnée via diagramme de classe UML
- Schéma d'architecture de l'application simplifié
- Wireframes
- Creation des repos GitHub
- Dev Front Web App
- Dev Back Api et BDD
- Dev Front Mobile App
- Déploiement
- L'athlète ouvre l'application et accède à la section des entraînements
- Le système affiche une liste d'entrainements disponibles pour l'athlète classés par date.
- L'athlète sélectionne un entrainement
- Le système récupère l'entraînement correspondant à la date choisie
- Le système charge le détail des éléments de l'entraînement (répétitions, charges, temps de repos, etc.)
- Le système affiche pour chaque exercice ou bloc d'exercices les charges en kilos que l'athlète doit utiliser basées sur le pourcentage du maximum souhaité par le coach
- L'athlète accède à la section des maximums
- Le système affiche la liste des exercices pour lesquels l'athlète a des maximums enregistrés
- Si l'athlète souhaite modifier maximums :
- L'athlète sélectionne un exercice à mettre à jour
- L'athlète entre la nouvelle valeur du Maximum pour cet exercice
- Le système enregistre le nouveau maximums avec la date actuelle
- Le système met à jour l'historique des maximums pour cet exercice
- Si lathlète souhaite ajouter un nouveau maximums à un exercice :
- L'athlète sélectionne l'ajout d'un nouveau maximum à créer
- Le système propose à athlète de choisir l'exercice parmi la liste d'exercices disponibles
- L'athlète sélectionne l'exercice et saisie le maximum en kilos
- Le système enregistre le nouveau maximums pour l'exercice avec la date actuelle
- L'athlète accède à la section programmation
- Le système récupère la programmation actuelle de l'athlète
- Le système affiche un calendrier avec les entraînements prévus par le coach
- L'athlète peut naviguer entre les semaines/mois/année
- Pour chaque jour, le système affiche un résumé de l'entraînement (type d'entrainements et/ou description)
- L'athlète peut sélectionner une date spécifique pour voir les détails de l'entraînement
- L'utilisateur (athlète ou coach) se connecte à l'application
- L'utilisateur accède à la section de la gestion du profil
- Le système affiche les informations actuelles du profil :
- Informations de base (nom, prénom, date de naissance)
- Club affilié
- Pays
- Avatar (image)
- Si l'utilisateur est un athlète, le système affiche également :
- Niveau de l'athlète (niveau : régional, national, rookie)
- Catégorie de sexe pour la compétition
- Catégorie de poids pour la compétition
- Mesures physiques (poids, taille, etc.)
- Nom du coach associé
- L'utilisateur peut modifier ses informations personnelles
- Si l'utilisateur est un coach, il peut :
- Voir la liste de ses athlètes associés
- Ajouter ou retirer des athlètes de sa liste
- Si l'utilisateur est un *athlète :
- Le système affiche les évènements du club non consulté sous forme de notification
- Le système peut envoyer un email à l'athlète si celui à souhaité avoir accès à cette fonctionnalité dans ses préférences utilisateurs
- Si l'utilisateur est un coach :
- Il peut publier des messages à l'attention des membres du club sur l'actualité du club (compétitions à venir, information importantes)
- Le coach accède à la page permettant de gérer les entraînements
- Le coach accède à une vue lui présentant des listes d'exercices, bloc d'exercices et entrainements sous forme d'onglets.
- Pour chaque onglets il peut sélectionner un élément de la liste pour le modifier ou le supprimer ou créer un élément.
- Si le coach crée un exercice :
- Le système présente une interface de création d'exercice
- Il saisi le nom de l'exercice
- Il choisi le type d'exercice parmi une liste de type d'exercice possibles (ex: haltérophilie, musculation, cardio...)
- Il peut ajouter une description spécifique à l'exercice
- Il peut ajouter le nom anglais de l'exercice s'il y a lieu d'être
- Il peut ajouter une abréviation à ce nom d'exercice s'il le souhaite
- Il peut ajouter une vidéo de démonstration de exercice
- Il valide la création de l'exercice
- Le système enregistre le nouvel exercice avec la date actuelle de création
- Si le coach crée un bloc d'exercices :
- Le système présente une interface de création d'un bloc d'exercices
- Il choisi le type de bloc d'exercices à réaliser parmi une liste de type de blocs d'exercice possibles (ex: Renforcement, Complex d'arraché, Complex epaulé-jetté, AMRAP, TABATA, etc.).
- Il choisi au minimum deux exercices parmi la liste des exercices existants dans la bibliothèque d'exercice.
- Il choisi l'ordre d'exécution des exercices.
- Il peut ajouter une description pour la réalisation du bloc d'exercices. (ex: commentaire, point d'attention, objectif du bloc)
- Il valide la création du bloc d'exercices
- Le système enregistre le nouveau bloc d'exercices avec la date actuelle de création
- Si le coach crée un entrainement :
- Le système présente une interface de création d'un entrainement
- Il choisi d'ajouter un ou plusieurs exercices combiné ou non à un ou plusieurs bloc d'exercices parmi les listes des éléments de chaque déjà créé
- Le système propose également un raccourci vers la création d'un exercice ou d'un bloc d'exercices dans les listes des éléments proposés
- Pour chaque élément de l'entraînement, le coach spécifie :
- Le nombre de répétitions
- Le nombre de séries
- Le pourcentage de charge (basé sur le maximum de l'athlète pour l'exercice défini)
- Le temps de repos (si applicable)
- La durée (si applicable)
- Le coach peut réordonner les éléments d'entraînement
- Le système enregistre l'entraînement dans la bibliothèque des entrainements
En tant qu'athlète ou coach, je veux pouvoir créer un compte et me connecter facilement, afin de pouvoir accéder aux informations d'entraînement et à mes progrès personnels. La création d'un compte nécessite la saisie du code du club d'haltérophilie.
En tant qu'athlète, je veux voir la programmation d'entraînement du jour publiée par le coach, afin que je sache quel entraînement effectuer à chaque session.
En tant qu'athlète, je veux pouvoir visualiser et mettre à jour mon profil (poids, taille, âge, catégorie), afin de suivre mes progrès et m'assurer que la programmation est adaptée à mes besoins.
En tant que coach, je veux pouvoir enregistrer et planifier les exercices, poids et répétitions pour mes athlètes, afin de gérer efficacement leur progression.
En tant qu'athlète, je veux recevoir des annonces et messages importants du coach, afin de rester informé des mises à jour et des conseils.
En tant que coach, je veux avoir un tableau de bord pour accéder aux bibliothèques d'entraînements et aux fiches des athlètes, afin de gérer plus efficacement l'entraînement de mon équipe. Je veux pouvoir les attribuer à un ou plusieurs athlètes et définir la date de l'entrainement.
En tant qu'athlète, je veux recevoir des notifications pour les mises à jour importantes, les messages et les nouvelles programmations, afin de ne rien manquer d'important.
En tant qu'athlète, je veux que la programmation s'adapte automatiquement à ma fiche (pour les poids), pour que je puisse optimiser mon entraînement en fonction de mes capacités actuelles.
En tant qu'athlète, je veux pouvoir saisir et visualiser mes maxima pour chaque mouvement technique de l'haltérophilie, afin que le calculateur de charge puisse ajuster automatiquement les poids en fonction de ma programmation.
//Todo Schéma UML
+-------------------+ +-------------------+ +-------------------+
| | | | | |
| Frontend | | Backend | | Base de Données |
| | | | | |
| React (Web App) | | - Nest.js (API) | | - PostgreSQL |
| | | | | |
| React Native | | | | |
| (Mobile App) | | | | |
| | | | | |
+-------------------+ +-------------------+ +-------------------+
| | |
| HTTP/HTTPS | TCP/IP |
| RESTful API | SQL Queries |
|------------------------->|-------------------------->|-
Visualisation de la Programmation d'Entraînement (Journal d’entraînements)
- Détails des exercices, pourcentages de travail et répétitions.
- Affichage par calcul automatique des poids à adapter pour les montées en charge (par exemple, de 80% à 95%) en fonction de l'Athlète.
-
Page Profil des Athlètes
- Profils détaillés avec nom, prénom, poids, taille, âge, et catégorie.
-
Page de Saisie et Visualisation des Max
- Pour l'adaptation automatique de la programmation aux fiches des athlètes.
-
Accès aux Fiches des Athlètes
- Filtres par poids, maxima, catégories, sexe.
-
Création et visualisation d'une Bibliothèque d'Exercices/Complex/Entrainements
- Interface pour élaborer, consulter et gérer une bibliothèque d'exercices, de complex (série ordonnée d'exercices) et/ou de séance d'entrainement complet (combinaison d'exercices et de complex).
-
Planification et visualisation des entrainements.
- Interface pour consulter un planning avec une visualisation jour/semaine/mois des entrainements prévus pour les athlètes
-
Vie du club
- Interface pour publier des annonces concernant le club (compétitions à venir, informations générales...)
- Deconnexion
- FAQ
- Aide
-
Gestion du Compte
- Téléchargement des données personnelles.
- Suppression du compte.
- Changement de Mot de Passe
-
Page Messages et Annonces Importants du Coach
- Fonctionnalité de suivi des lectures "vu par".
-
Annonces de Nouvelles Programmations d'Entraînement
- Alertes pour les nouveaux programmes disponibles (notifications dans l'app ou par email).
-
Création d'Événements
- Interface pour saisir les informations de l'événement (titre, description, date, lieu).
-
Suivi de la Progression
- Graphiques et visualisations pour suivre les progrès.
-
Mode Hors Ligne
- Accès aux fonctionnalités sans connexion internet.
-
Light/Dark Mode
- Adaptation de l'interface utilisateur pour confort visuel.
-
Chat Intégré du Club
- Communication en direct entre les membres.
-
Choix de la Langue
- Personnalisation linguistique de l'application.
Disponibles sur le notion du projet : url
Environnement de Développement : VsCode
Fournir des détails sur les standards de codage et les meilleures pratiques adoptées. (guides de style de code, des conventions de nommage)
- Front-End : React, React Router, React Native, TypeScript, Expo, Chakra UI, TanStack Query, React Paper (ou MUI), Storybooks, Zustand (si besoin) et Immer, Library Mouse Events, Touch Event : https://use-gesture.netlify.app/
- Back-End : Nest.js.
- Base de Données : PostgreSQL.
- CI/CD : Docker, Docker Compose, GitHub Actions.
- Gestion de projet : Notion
- Qualité du Code : Eslint, Prettier, SonarQube.
- Intégration des Design Patterns : Utilisation de modèles tels que Repository, Unit of Work, Singleton, et Factory pour structurer le code de manière efficace et maintenable.
- API et Logique Métier : Développement de l'API (RESTful) en Nest.js, implémentation de la logique métier.
- Interface Utilisateur: Construction des vues en React Native, en utilisant des composants pour un design réactif et accessible.
- Intégration avec le Back-End : Connexion du front-end au back-end via l'API RESTful.
- Accessibilité : RGAA
- Interface Utilisateur: Construction des vues en React, en utilisant des composants pour un design réactif et accessible.
- Intégration avec le Back-End : Connexion du front-end au back-end via l'API RESTful.
- Accessibilité : RGAA
- Sécurité : Assurer la sécurité des données utilisateur et des communications entre le client et le serveur. Définition des méthodes et outils utilisés pour sécuriser l'application dans la documentation.
- Authentification / Autorisation : Intégration d'un systeme robuste d'authentification et d'autorisation
- Techniques et outils utilisés pour le profiling et l'optimisation des performances.
- Approches pour assurer des temps de réponse rapides et une utilisation efficace des ressources.
Élaborez sur les types de tests effectués et comment ils sont intégrés dans le processus de développement.
- Tests Unitaires : Vitest/React Testing Library pour les composants Front-End.
- Tests d'Intégration : Vérification de l'interaction entre différents modules et services.
- Tests E2E : Utilisation Playwright pour simuler des scénarios utilisateur complets
- CI/CD : Mise en place d'un pipeline d'intégration continue et de déploiement continu avec GitHub Actions.
- Stratégies de Déploiement : Déployer l'application sur des plateformes cloud telles que Heroku, Vercel ou Netlify.
- Définition : L'environnement de staging, ou de préproduction, est une réplique exacte de l'environnement de production. Il est utilisé pour tester les codes, les mises à jour ou les nouvelles fonctionnalités dans des conditions presque identiques à celles de l'environnement de production.
- Objectif : Le but principal est de valider le logiciel dans un environnement qui simule étroitement le monde réel ou la production. Cela permet de détecter et de corriger les bugs, les problèmes de performance ou tout autre problème avant que le logiciel ne soit déployé en production.
- Tests : Les tests dans l'environnement de staging peuvent inclure des tests d'intégration, des tests de charge et de performance, et des tests d'acceptation utilisateur.
-
Systèmes de monitoring et de logging mis en place.
-
Stratégies pour surveiller la santé de l'application et détecter rapidement les problèmes.
-
Backups et Restauration
- Planification des sauvegardes de données.
- Procédures de restauration en cas de défaillance.
Checklist : Transformez les éléments de monitoring et de backups en une checklist pour faciliter le suivi.
Documentation Technique : Cette section concerne la documentation technique et la formation des utilisateurs.
- Documentation de l'API avec Swagger/OpenAPI.
- Documentation du code et des procédures opérationnelles.
- Diagrammes d'architecture
Questions Fréquentes
Contacts pour le Support
Guides d'utilisation pour les utilisateurs finaux. Screenshot, carrousel tour tuto