Skip to content

Les parents sans compte peuvent annoncer leur venue à une réunion - #48

Merged
flocom merged 1 commit into
mainfrom
claude/remove-apel-sensitive-data-73l5iu
Sep 10, 2026
Merged

Les parents sans compte peuvent annoncer leur venue à une réunion#48
flocom merged 1 commit into
mainfrom
claude/remove-apel-sensitive-data-73l5iu

Conversation

@flocom

@flocom flocom commented Sep 10, 2026

Copy link
Copy Markdown
Owner

Les réunions paraissent sur le site depuis #46, mais seuls les membres connectés pouvaient dire s'ils venaient : sur la page publique d'une réunion, un parent ne trouvait qu'un lien « poser une question ». Il peut maintenant répondre depuis cette page.

Ce qui change

Page publique d'une réunion — un formulaire « Vous venez ? » remplace les deux boutons d'aiguillage. Deux réponses seulement, « Je serai là » (présélectionné) et « Peut-être » : un parent qui ne compte pas venir ferme la page, il ne remplit pas un formulaire pour le dire. Nom, e-mail, téléphone, consentement — les mêmes champs qu'une inscription bénévole, avec pot de miel et reCAPTCHA. Les liens « Poser une question » et « Rejoindre l'association » restent en dessous.

Une seule tablemeeting_attendance.user_id devient facultatif et la ligne porte alors les coordonnées saisies ; une contrainte CHECK garantit qu'une réponse dit toujours qui vient. Deux tables auraient obligé chaque comptage à faire une union, et un oubli quelque part aurait fait disparaître des présents de la liste.

Revenir sur sa réponse marche aussi bien que la donner : un même e-mail met sa ligne à jour (index unique partiel sur lower(email)) au lieu de buter sur « déjà répondu », car celui qui recoche n'a le plus souvent pas gardé l'e-mail de confirmation. Un membre connecté qui répond depuis la page publique est reconnu : sa réponse est rattachée à son compte plutôt qu'ajoutée en double sous son nom saisi.

Se décommander passe par le lien de l'e-mail de confirmation, qui rejoint la page /annulation/[token] existante — le parent n'a qu'un lien au bas d'un message et ne sait pas de quelle table il relève, donc le même point d'entrée traite les deux.

Tableau de bord — les parents venus par le lien public apparaissent dans les trois colonnes de l'onglet Présences, marqués « invité » pour qu'on ne les cherche pas dans l'annuaire des membres.

Au passage — les fonds des réponses sélectionnées passent deux crans plus foncés dans la palette : du blanc sur sea-500 tombait à 2,89:1 et sur sand-500 à 3,31:1, sous le seuil AA pour du texte de cette taille. Mesuré après correction : 6,17:1 et 6,63:1.

Confidentialité

Inchangée. La liste des présents reste derrière une session ; la page publique enregistre une réponse sans en montrer aucune autre. Vérifié : les noms et e-mails des répondants n'apparaissent dans le HTML ni de /, ni de la page de partage de la réunion, ni de /rejoindre.

Vérifications

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

  • formulaire présent sur une réunion, absent des événements ; le formulaire bénévole ne s'affiche pas sur une réunion ;
  • « Je serai là » puis « Peut-être » avec le même e-mail en casse différente → une ligne, mise à jour, même jeton de retrait (l'ancien e-mail reste valide) ;
  • réunion en brouillon → 404 ; événement passé à ce point d'entrée → 400 ; sans e-mail ni téléphone → 400 ; pot de miel rempli → 200 et rien en base ;
  • deux e-mails de confirmation reçus sur un puits SMTP local, sujet, corps et lien de retrait conformes, « peut-être » repris tel quel dans le texte ;
  • retrait par le lien → ligne supprimée, message de confirmation ; lien inconnu → 404 ;
  • non-régression : inscription bénévole classique et son annulation par jeton fonctionnent toujours ;
  • mise en page sans débordement à 320, 360, 390, 430 et 768 px ; navigation au clavier dans le groupe de choix (flèches) et libellé du bouton d'envoi qui suit le choix.

🤖 Generated with Claude Code

https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD


Generated by Claude Code

Les réunions sont ouvertes aux familles depuis qu'elles paraissent sur le
site, mais seuls les membres connectés pouvaient dire s'ils venaient : sur
la page publique d'une réunion, un parent ne trouvait qu'un lien « poser une
question ». Il peut maintenant répondre depuis cette page.

Une seule table pour les deux populations. `meeting_attendance.user_id`
devient facultatif et la ligne porte alors le nom, l'e-mail et le téléphone
saisis ; une contrainte garantit qu'une réponse dit toujours qui vient. Deux
tables auraient obligé chaque comptage à faire une union, et un oubli quelque
part aurait fait disparaître des présents de la liste.

Le formulaire public ne propose que « je serai là » et « peut-être » : un
parent qui ne compte pas venir ferme la page, il ne remplit pas un formulaire
pour le dire. Se décommander passe par le lien de l'e-mail de confirmation,
qui rejoint la page d'annulation existante — le parent n'a qu'un lien au bas
d'un message et ne sait pas de quelle table il relève.

Revenir sur sa réponse marche aussi bien que la donner : un même e-mail met
sa ligne à jour au lieu de buter sur « déjà répondu », car celui qui recoche
n'a le plus souvent pas gardé l'e-mail de confirmation. Un membre connecté
qui répond depuis la page publique est reconnu : sa réponse est rattachée à
son compte plutôt qu'ajoutée en double sous son nom saisi.

Rien ne change côté confidentialité : la liste des présents reste derrière
une session, et la page publique enregistre une réponse sans en montrer
aucune autre. Dans le tableau de bord, les parents venus par le lien public
sont marqués « invité » pour qu'on ne les cherche pas dans l'annuaire.

Au passage, les fonds des réponses sélectionnées passent deux crans plus
foncés dans la palette : du blanc sur sea-500 tombait à 2,89:1 et sur
sand-500 à 3,31:1, sous le seuil AA pour du texte de cette taille.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD
@flocom
flocom merged commit cbd3fb3 into main Sep 10, 2026
1 check 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