Skip to content

Adhérer devient une porte à part entière sur /rejoindre - #53

Merged
flocom merged 2 commits into
mainfrom
claude/remove-apel-sensitive-data-73l5iu
Sep 18, 2026
Merged

flocom merged 2 commits into
mainfrom
claude/remove-apel-sensitive-data-73l5iu

Conversation

@flocom

@flocom flocom commented Sep 18, 2026

Copy link
Copy Markdown
Owner

Le problème

On se perdait sur /rejoindre quand on venait vraiment rejoindre l'association, et pas seulement donner un coup de main.

Mesuré sur la page telle qu'elle était :

avant
occurrences de « adhérer » 0
occurrences de « cotisation » 0
liens menant au formulaire 2, tous deux libellés « Écrire à l'association »
distance du formulaire au haut de page 4 129 px, soit 4,6 écrans

Le seul bouton foncé permanent du site dit « Créer un compte » et mène à l'espace de gestion : c'est là que finissait, par élimination, le parent qui cherchait comment devenir membre.

Ce que fait cette PR

Adhérer et donner un coup de main sont traités comme deux démarches indépendantes, de même poids — on peut adhérer sans jamais tenir un stand, et aider sans être adhérent.

Le premier écran nomme les deux gestes dans le titre, puis les ouvre par deux cartes jumelles : mêmes classes, même bouton, aucun badge « recommandé », et chacune sa preuve — le prochain rendez-vous daté d'un côté, le numéro RNA de l'autre. Une troisième issue en texte simple (« Vous savez déjà ce que vous voulez ? Écrire directement ») ne rompt pas leur égalité.

Le formulaire remonte de la septième à la troisième section. Neuf liens y mènent au lieu de deux, et chacun dit où il va : ↓ on descend dans la page, ↑ on remonte, ↗ on change de page.

Le formulaire s'ouvre sur « Vous nous écrivez pour… » — quatre options lues, pas repliées dans une liste déroulante : c'est ce menu qui apprend l'adhésion à qui ne la soupçonnait pas. Rien n'est coché d'avance (required fait le travail, sur des radios visibles), les deux portes cochent à la place du parent, et re-cliquer la même ancre ré-arme le choix — suivre un fragment déjà atteint n'émet aucun hashchange. Les amorces cliquables, le libellé du bouton d'envoi et l'écran de confirmation suivent l'intention.

Côté bureau, l'intention porte jusqu'à l'objet de l'e-mail (« Demande d'adhésion — … » plutôt qu'un « Nouveau contact » identique pour tous) et lui dit quoi répondre. Le parent reçoit une copie : /api/join n'écrit rien en base — délibérément, il n'y a donc pas de fichier de prospects à protéger — mais l'écran de confirmation était jusqu'ici la seule trace de sa démarche, et il meurt avec l'onglet.

Deux libellés hors page : le bouton de l'en-tête devient « Espace organisateurs », et le surtitre de /register « Compte de gestion ».

Ce que la page n'écrit pas

L'application sert plusieurs associations. Aucun montant de cotisation, aucune fédération nommée, aucune règle statutaire (qui vote, ce qui se compte par famille) n'est écrit en dur : ces choses varient, et membershipFeeCents n'existe que par adhérent et par année. La page dit ce qu'adhérer n'oblige pas — ni réunion, ni permanence, ni stand — et renvoie au bureau pour le montant et la marche à suivre.

Résultat mesuré

avant après
« adhérer » 0 16
« cotisation » 0 2
liens vers le formulaire 2 9
formulaire, en écrans (1280×900) 4,6 2,5
formulaire, en écrans (390×844) 3,9

Vérifications

Sur une instance réelle (PostgreSQL, next build + next start, navigateur réel) :

  • les deux portes cochent la bonne option, amènent le focus sur la radio choisie, et le bouton d'envoi devient « Envoyer ma demande d'adhésion » ;
  • redescendre, changer d'avis, remonter et re-cliquer la même porte ré-arme bien le choix ;
  • arrivée directe par /rejoindre#adherer : option cochée au chargement ;
  • envoi de bout en bout → deux e-mails reçus sur un puits SMTP, avec les bons objets, le bon Reply-To et la ligne de conduite destinée au bureau ;
  • les deux portes sont au-dessus de la ligne de flottaison à 390 px et 412 px ;
  • aucun débordement horizontal de 320 à 1920 px ;
  • les replis sont conservés : sans adresse de contact aucun bouton ne promet qu'on peut écrire, agenda vide, et « Toutes les places sont prises pour l'instant » ;
  • id="contact" est conservé — whatsapp-invite-card.tsx y pointe en dur ;
  • npx tsc --noEmit, npx eslint src --max-warnings=0, npm run build : verts.

Contient aussi le correctif précédent : « de l'École Sainte-Marie » et non « d'École Sainte-Marie ».

🤖 Generated with Claude Code

https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD


Generated by Claude Code

La page Rejoindre annonçait aux visiteurs qu'elle réunissait « les parents
d'élèves d'École Notre Dame des Flots ». L'élision seule ne suffit pas : quand
le nom de l'établissement commence par un nom commun — école, collège, lycée,
institution — c'est l'article qui manque, pas l'apostrophe.

L'aide pose désormais l'article qui convient au nom commun rencontré, et s'en
tient à l'élision quand le nom n'en porte pas. Douze cas éprouvés, dont le nom
réel de l'établissement servi : de l'École, du Collège, du Lycée, de
l'Institut, de l'Institution, de la Maison, du Groupe scolaire, mais aussi
de Sainte-Marie, d'Ozanam et de Notre-Dame des Flots.

Elle sort du fichier de la page pour vivre dans src/lib : l'élision d'un nom
d'établissement n'appartient pas à un écran, et le prochain texte qui le cite
n'aura pas à la réinventer.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD
La page ne parlait que de bénévolat. Le mot « adhérer » n'y figurait pas
une seule fois — ni dans le titre, ni dans un bouton, ni dans le
formulaire — et ce formulaire arrivait après six sections de préparatifs
et de créneaux. Un parent venu devenir membre repartait par le seul
bouton foncé permanent du site, « Créer un compte », qui mène à l'espace
de gestion.

Adhérer et donner un coup de main sont désormais traités comme deux
démarches indépendantes, de même poids :

- le titre nomme les deux gestes, et deux cartes jumelles les ouvrent
  dans le premier écran — mêmes classes, même bouton, aucune « bonne »
  réponse, chacune avec sa preuve (le prochain rendez-vous daté d'un
  côté, le numéro RNA de l'autre) ;
- le formulaire remonte de la septième à la troisième section ; neuf
  liens y mènent au lieu de deux, et chacun dit où il va (↓ on descend,
  ↑ on remonte, ↗ on change de page) ;
- il s'ouvre sur « Vous nous écrivez pour… », quatre options lues et non
  repliées dans une liste : c'est ce menu qui apprend l'adhésion à qui ne
  la soupçonnait pas. Rien n'est coché d'avance, les deux portes cochent
  à la place du parent, et re-cliquer la même ancre ré-arme le choix —
  suivre un fragment déjà atteint n'émet aucun hashchange ;
- l'intention porte jusqu'à l'objet de l'e-mail du bureau et lui dit quoi
  répondre ; le parent reçoit une copie, parce que rien n'est écrit en
  base et que l'écran de confirmation meurt avec l'onglet ;
- le bouton de l'en-tête devient « Espace organisateurs ».

Aucun montant de cotisation, aucune fédération nommée, aucune règle
statutaire : l'application sert plusieurs associations et ces choses-là
varient. La page dit ce qu'adhérer n'oblige pas — ni réunion, ni
permanence, ni stand — et renvoie au bureau pour le reste.

Vérifié sur une instance réelle : formulaire à 2,5 écrans du haut au lieu
de 4,6 ; « adhérer » 16 fois au lieu de 0 ; les deux portes au-dessus de
la ligne de flottaison à 390 px ; aucun débordement de 320 à 1920 px ;
les deux e-mails reçus (« Demande d'adhésion — … » au bureau, accusé au
parent) ; les cas sans adresse de contact, sans agenda et sans place
libre conservent leurs replis.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD
@flocom
flocom merged commit 2799b31 into main Sep 18, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants