Pages, rôles et recherche
Ce que fait chaque page, quel rôle la voit, ce qu'ouvre chaque permission, et comment la recherche trouve les pages et les enregistrements.
Pour le pack Full Stack
Les pages d'un membre
Chaque page existe en anglais sous /en et en arabe sous /ar. Le tableau de bord s'ouvre sur /en/dashboard, après la connexion sur /en/auth/login. Les pages d'un membre demandent fitness.view, que seul le rôle Member détient.
| Élément de la barre latérale | Chemin | Rôle |
|---|---|---|
| Tableau de bord | /en/dashboard | La journée en un coup d'œil : fréquence cardiaque, énergie et récupération, anneaux d'activité, calories et macros, semaines de sommeil et de fréquence cardiaque, prochaines séances d'entraînement et pas. |
| Assistant IA | /en/dashboard/ai-assistant | Un chat qui répond sur l'entraînement du membre et enregistre des données pour lui. |
| Activité | /en/dashboard/activity | Pas, temps actif, calories et distance par jour, semaine ou mois, une carte de chaleur horaire, une répartition par type, et une page par activité enregistrée avec son parcours, ses temps intermédiaires, son dénivelé et sa cadence. |
| Séances d'entraînement | /en/dashboard/workouts | Le programme de la semaine, le travail attribué par le coach et le bilan hebdomadaire, les programmes, la page de chaque séance d'entraînement et la séance en direct. |
| Bibliothèque d'exercices | /en/dashboard/workouts/exercises | Chaque mouvement, filtré par muscle, équipement et difficulté, avec une page par mouvement. |
| Nutrition | /en/dashboard/nutrition | Calories, macros, hydratation et apports de la semaine. |
| Planificateur de repas | /en/dashboard/nutrition/meal-planner | Les repas d'une journée sur une frise, où le membre enregistre ce qu'il mange. |
| Sommeil | /en/dashboard/sleep | Phases, horaires, récupération et tendance de la semaine. |
| Santé | /en/dashboard/health | Un score de santé, l'essentiel de la journée, les constantes et huit semaines de tendances. |
| Progrès | /en/dashboard/progress | Performances, mesures corporelles, séries d'habitudes, records et réussites. |
| Photos de progression | /en/dashboard/progress/photos | Photos avant et après avec un objectif de poids. |
| Communauté | /en/dashboard/community | Groupes, défis, discussions, événements et classement. |
| Paramètres | /en/dashboard/settings | Profil, mot de passe, alertes, confidentialité, apparence, appareils connectés, facturation et suppression du compte. |
Les pages de l'équipe
L'équipe arrive sur la vue d'ensemble du coach, à /en/dashboard : la liste de clients en un coup d'œil, les clients devenus silencieux, les bilans hebdomadaires en attente de réponse, le travail attribué pour aujourd'hui et les comptes de la salle. Les panneaux de la liste de clients n'ont de données que pour un compte avec coaching.clients (le Head Coach et les Personal Trainers), et les comptes de la salle n'apparaissent qu'avec members.view ; pour tout autre compte de l'équipe, comme les Coachs du seed, les panneaux de la liste de clients n'ont rien à afficher. Chaque autre page n'apparaît que pour un rôle qui accorde sa permission.
| Élément de la barre latérale | Chemin | Permission | Rôle |
|---|---|---|---|
| Mes clients | /en/dashboard/clients | coaching.clients | La liste de clients du coach, et une page par client avec son programme, ses bilans hebdomadaires et ses messages. |
| Salle | /en/dashboard/users/all | members.view | Chaque membre, la page de chacun, et les membres supprimés avec un bouton de restauration. |
| Contenu | /en/dashboard/content | fitness.manage | Les catalogues que lisent les membres : exercices, séances d'entraînement, programmes, plats, groupes, événements, défis, réussites et badges. |
| Coachs | /en/dashboard/coaches | coaches.view | Les comptes de l'équipe et leurs rôles. |
| Rôles des coachs | /en/dashboard/coach-roles | roles.view | Les rôles et les permissions que chacun accorde. |
| Paramètres | /en/dashboard/settings | Tout le monde | Profil, mot de passe, apparence et réglages de l'application. |
Deux autres entrées se trouvent sous Demos : UI Component, chaque composant partagé affiché en direct avec son code, et Onboarding, le parcours guidé de première utilisation pour un membre. Retirez-les de navigationData.ts quand vous n'en voulez plus.
Le tableau de bord n'est jamais indexé par les moteurs de recherche : chaque page porte une balise noindex et public/robots.txt interdit tous les chemins.
Les rôles livrés
Les membres et l'équipe partagent une seule table de comptes et une seule connexion ; les rôles décident de ce que chacun voit. Un compte détient toutes les permissions de tous ses rôles. Le seed crée sept rôles :
| Rôle | Ce qu'il accorde |
|---|---|
| Head Coach | Toutes les permissions sauf la paire d'entraînement fitness.view et fitness.edit |
| Coach | Les membres, les coachs, le contenu, la liste des rôles, les réglages de l'application et le transfert de membres entre coachs |
| Gym Manager | Les membres, le contenu, les listes des coachs et des rôles, et le transfert de membres entre coachs |
| Editor | Le contenu, et les listes des membres et des coachs |
| Viewer | Toutes les permissions .view sauf fitness.view : les écrans de la salle en lecture seule |
| Personal Trainer | Sa propre liste de clients (coaching.clients) et le contenu, sans la liste des membres |
| Membre | La paire d'entraînement : ses propres pages de fitness, et rien au-delà |
Chaque rôle détient aussi ai_chat.use, ai_chat.view_models et settings.view : l'assistant, ainsi que son propre profil et ses préférences. Seul le rôle Member s'entraîne : un compte de l'équipe n'a donc jamais ses propres pages de fitness. Un nouveau compte créé depuis la page d'inscription est un Member.
Permissions
| Module | Permissions |
|---|---|
| Les membres | members.view, members.create, members.update, members.delete, members.restore, members.verify |
| Coachs | coaches.view, coaches.create, coaches.edit, coaches.delete, coaches.assign_roles |
| Rôles | roles.view, roles.create, roles.edit, roles.delete, roles.assign_permissions |
| Paramètres | settings.view, settings.edit |
| Fitness | fitness.view, fitness.edit (un compte qui s'entraîne), fitness.manage (les catalogues de contenu) |
| Coaching | coaching.clients (votre propre liste de clients), coaching.assign (transférer des membres entre coachs) |
| Assistant IA | ai_chat.use, ai_chat.view_models |
La barre latérale, les pages et l'API vérifient les mêmes noms : un rôle modifié sur l'écran Coach Roles change donc ce que voient ses comptes. Un compte connecté au moment où ses rôles changent reçoit immédiatement les nouvelles permissions, via un socket en direct.
Recherche
Ctrl+K, ou Cmd+K sur Mac, ouvre la recherche depuis n'importe quelle page, tout comme le champ de recherche de la barre supérieure. Les flèches parcourent les résultats, Enter en ouvre un et Escape la ferme.
- Elle trouve les pages que le compte peut ouvrir et, pour un membre, les activités, séances d'entraînement, exercices, plats, nuits de sommeil, réussites, groupes, défis et discussions de son index intégré. Cet index est lu depuis les propres données d'exemple du tableau de bord, pas depuis la base de données : avec l'API connectée, ces lignes viennent toujours de l'ensemble d'exemple, pas de ce que chaque membre a enregistré.
- Avec l'API connectée, elle demande aussi au serveur les enregistrements que le compte peut ouvrir : membres, coachs, rôles et catalogues de contenu. Chaque type demande la permission qu'exige son propre écran : un membre ne voit donc jamais un autre membre dans les résultats.
- Des colonnes sur le côté limitent les résultats à un seul type. Les six dernières recherches sont mémorisées dans le navigateur.
- Sur les données d'exemple, la même recherche s'exécute sur les enregistrements d'exemple.
Comment fonctionne la recherche côté serveur
GET /api/search?q=<term>&locale=<en|ar>&limit=<1-10> demande un jeton de connexion et aucune permission particulière. Elle exécute une recherche par type que l'appelant peut ouvrir et laisse les autres de côté.
| Type | Correspondances | Permission |
|---|---|---|
member, coach | Prénom, nom, les deux ensemble, nom d'utilisateur, e-mail | members.view, coaches.view |
role | Nom, description | roles.view |
exercise, workout, program, dish, group, event, challenge, achievement, badge | Le nom et les champs propres au type, dans les deux langues, ainsi que le slug ou la clé | fitness.manage |
- Un terme de moins de 2 caractères ne renvoie aucun résultat ; un terme plus long est coupé à 100.
limits'applique par type, 5 par défaut et 10 au maximum. - Une ligne dont le texte commence par le terme passe avant une ligne dont un mot commence par lui, qui passe avant une ligne qui le contient seulement. À égalité, la plus récemment mise à jour passe en premier.
- Chaque résultat porte
kind,title,detail,imageet unhrefsans le préfixe de langue. Les comptes supprimés sont exclus.
Paramètres
- Profil et mot de passe : chaque compte modifie les siens.
- Alertes, confidentialité, appareils et facturation : ceux du membre. Les quatre interrupteurs d'alerte, le partage de l'activité avec la communauté, les appareils et sources de données connectés, et l'abonnement avec ses factures. La facturation est en lecture seule : rien dans le template n'encaisse de paiement.
- Apparence : thème clair, sombre ou système, une couleur d'accent et des animations réduites, enregistrés avec le compte pour que l'apparence le suive d'un appareil à l'autre.
- Export : un membre télécharge tout ce qu'il a enregistré sous forme d'un seul fichier JSON.
- Suppression du compte : un compte se ferme lui-même après confirmation de son mot de passe.
- Réglages de l'application : les membres de l'équipe avec
settings.editmodifient les réglages partagés.
Les réglages d'application du seed sont le nom et le slogan du site, deux adresses e-mail, le mode maintenance, les unités par défaut, le premier jour de la semaine, les objectifs par défaut (pas, eau, sommeil et calories) et deux interrupteurs de fonctionnalités, pour la communauté et l'assistant. Seul l'assistant IA en lit certains : les unités et les objectifs. Le reste est enregistré et modifiable, mais rien ne le lit : activer le mode maintenance ou désactiver une fonctionnalité ne change rien à l'écran tant que vous ne le branchez pas à votre propre code.