Défense du PDB + enchaînements
Fixer le vis-à-vis avant la passe, sortir en course.
Deux choses à régler : qu'un entraînement sache qu'il appartient à une saison et à un thème — dans la liste comme dans l'éditeur, sur desktop comme sur mobile —, et que les dates cessent d'être un champ qu'on remplit pour rien. Le principe : la date appartient à la saison, pas à l'entraînement. Les écrans ci-dessous reprennent les composants existants (onglets de contexte, pilule de filtres, carte à rail, en-tête d'éditeur) : ce qui est nouveau y est signalé.
Fixer le vis-à-vis avant la passe, sortir en course.
Séance à part, réutilisable toute l'année.
Occuper la largeur dès la récupération du ballon.
Le même entraînement sert dans deux saisons — aucune copie.
Rien n'est déplacé : les onglets de contexte, la pilule de filtres et la carte à rail restent tels quels. La saison ajoute trois choses — un segment « Saison » dans la pilule (actif par défaut sur la saison en cours) ; le rappel de la prochaine séance au-dessus de la grille, qui remplace le recours au tri par date ; et dans le rail de la carte, un encart thème en tête plus la métadonnée Séance à la place de Date. Un entraînement sans saison garde un encart en pointillés et un lien « Rattacher » : il n'est pas signalé comme incomplet. Le segment de filtre propose aussi Toutes les saisons et Sans saison — on ne perd jamais de vue ce qui n'est rattaché à rien, et le bouton flottant Nouvel entraînement continue de créer une séance sans rien demander.
Fixer le vis-à-vis avant la passe.
La liste garde la carte empilée du mobile (contenu centré, rail dessous, split button Animer). Le rappel de séance passe en tête, les filtres se replient dans une pilule unique qui affiche la saison active.
Fixer le vis-à-vis avant la passe, sortir en course.
»Dans l'entraînement, le fil de saison se pose au-dessus de l'en-tête existant et reste collé en haut. La ligne de métadonnées perd la date et commence par le rang de séance.
Fixer le vis-à-vis avant la passe, sortir en course.
»L'en-tête ne bouge pas : mêmes petites capitales espacées, même titre éditable, même objectif entre guillemets orange. Une seule différence — un fil de saison discret au-dessus, sur fond papier : le chemin saison › thème, la date de la séance, et les flèches pour passer à la suivante sans repasser par la liste. La ligne de métadonnées, elle, ne bouge pas : le sélecteur de date y reste, à sa place habituelle.
Séance à part, réutilisable toute l'année.
»La saison est une option, jamais un passage obligé. Le bouton « Nouvel entraînement » reste ce qu'il est — un bouton flottant qui crée directement une séance vide, sans demander ni saison ni thème. Un entraînement créé ainsi vit très bien seul : il garde son sélecteur de date (facultatif), il apparaît dans la liste comme aujourd'hui, il peut être animé, dupliqué, partagé. La barre en pointillés n'est pas un avertissement mais une offre : rattacher quand ça a du sens, et détacher ensuite sans rien perdre. Trois usages restent hors saison par nature : les blocs génériques (échauffements, gammes de gardien), les séances de dépannage, et tout le travail de ceux qui ne veulent simplement pas planifier leur année.
Aucun changement de modèle : l'entraînement garde son champ date, facultatif, exactement comme aujourd'hui. Ce qui change, c'est l'endroit où on le remplit : plus au fond de l'éditeur, mais sur la ligne de l'entraînement dans son thème, là où l'on voit la suite des séances. Un clic, un jour, c'est daté.
Un entraînement sans date attend dans son thème avec une invite « + dater », et rien ne le signale comme incomplet. Le rattachement ne demande donc aucune date, même pour 47 entraînements d'un coup : ils rejoignent leur thème, on datera ceux qu'on veut, quand on voudra.
La liste reste triée par date_seance décroissant, avec ses filtres de plage — même colonne, même index, aucune migration. Dans la saison, le raccourci vers ce qu'on doit faire n'est plus une date à chercher mais un état : la prochaine séance, c'est-à-dire le prochain entraînement daté non fait, mis en avant en haut de l'écran.
Pas de réglage préalable, pas de calendrier à configurer : la date se pose là où on la lit, sur la ligne de l'entraînement dans son thème. Un clic sur la date ouvre le calendrier, un clic sur un jour et c'est daté.
C'est le même sélecteur de date que dans l'éditeur d'entraînement (AppCalendar), simplement remonté d'un cran : au lieu d'ouvrir la séance pour la dater, on la date depuis la liste où l'on voit déjà tout le thème. Trois choses en découlent, et il n'y en a pas d'autres.
— Dater reste facultatif. « + dater » est une invite, pas une obligation : un entraînement sans date attend dans son thème, et rien ne le signale comme incomplet.
— Deux séances la même semaine, trois, ou une seule : la question ne se pose plus. On date ce qu'on veut, quand on veut, y compris un dimanche de plateau — il n'y a aucune règle de récurrence à respecter ou à contourner.
— Les jours déjà pris apparaissent dans le calendrier (ici les 10 et 24, en vert) : on voit d'un coup d'œil ce qui est occupé sans quitter la liste. Les vacances marquées sur la trame y sont grisées de la même façon.
date_seance décroissant) pour retrouver son travail en coursdate_seance ne change pas de rôledate_seance garde son rôle, son index, son tri et ses filtres. Les entraînements existants restent datés comme ils le sont ; ceux qui n'ont pas de date affichent « + dater » une fois rangés dans un thème. Le seul ajout au modèle est le lien entre un entraînement et un thème — le reste du fonctionnement actuel est intact.dateModification vit dans le JSONB donnees, sans colonne ni index. Il demande une petite migration (colonne modifie_le timestamptz + index) et reste une question indépendante des saisons.