--- name: gametime-product-scope description: memory note gametime-product-scope metadata: type: project --- # GameTime — cadrage produit initial App mobile de suivi d'entraînement basket, sur le modèle des apps de musculation. ## Entités clés - **Exercice** : nom, description, image optionnelle, vidéo optionnelle. À la création, l'utilisateur définit quelles conditions de remplissage de série sont disponibles pour cet exercice (temps, répétitions, score) — cumulables entre elles (ex: shoot = répétitions + score de réussite). Le score est un champ texte/numérique libre avec une unité définissable par l'utilisateur (ex: "paniers", "%", "mètres"). - **Programme** : liste ordonnée d'exercices. Pour chaque exercice ajouté au programme, l'utilisateur choisit — parmi les conditions autorisées par l'exercice — lesquelles activer pour ce programme précis (un même exercice peut être configuré différemment selon le programme), + nombre de séries, + un minuteur de repos par série (durée par défaut configurable à la création du programme). Le minuteur est attaché à la série/l'exercice qui le précède (pas de minuteur après la dernière série d'un exercice, ni après le dernier exercice du programme) — ça permet de le déplacer avec l'exercice lors d'un réordonnancement. - **Séance-modèle** : composition nommée et réutilisable d'un ou plusieurs programmes. Réordonnable librement par l'utilisateur (ordre par défaut = programmes à la suite les uns des autres). Indépendante des programmes sources une fois composée (modifier un programme source ne modifie pas rétroactivement les séances-modèles qui l'ont utilisé — à confirmer avec Architect). - **Exécution de séance** : suit l'ordre défini par la séance-modèle. Minuteurs ajustables à la volée pendant l'exécution (en plus du réglage par défaut fait à la création du programme). La séance peut être interrompue et son état sauvegardé pour reprise. Résultats enregistrés : temps total de la séance + score par série pour les exercices concernés. - **Historique** : chaque séance jouée est un enregistrement, relançable (relance la séance-modèle associée avec le même ordre). ## Contraintes techniques actées avec l'utilisateur - Stockage **local d'abord** (offline-first) : l'app doit rester pleinement utilisable sans réseau, y compris si la synchro serveur n'a jamais eu lieu. - Sync serveur prévue **plus tard**, avec création de profils utilisateurs — à anticiper dans le modèle de données dès maintenant (ids stables, horodatage, structure sync-friendly) sans l'implémenter tout de suite. - Préférence forte pour des solutions **open source**. - Priorité forte sur la **performance et la scalabilité UI** cross-device (tailles d'écran, gammes de téléphones variées) — critère de choix de framework important pour l'utilisateur. - Cibles : **iOS + Android**, mais test/dev possible uniquement sur Android pour l'instant côté utilisateur. - Médias d'exercice (image/vidéo) : stockage local d'abord, sync plus tard. - Stats prévues au démarrage : uniquement le temps de séance + les scores bruts par série. Pas d'agrégats/analytics avancés pour l'instant (peut évoluer). - Mono-utilisateur local pour le moment (pas de login avant l'arrivée du serveur). ## Décisions ouvertes / à trancher par Architect - Choix du framework cross-platform (perf + scalabilité UI comme critère prioritaire, open source). - Choix de la solution de stockage local offline-first pensée pour une synchro serveur incrémentale future. - Stratégie de gestion des médias locaux → sync.