Skip to content

Page Rejoindre refondue, groupe WhatsApp et billetterie en ligne - #39

Merged
flocom merged 3 commits into
mainfrom
claude/remove-apel-sensitive-data-73l5iu
Aug 30, 2026
Merged

Page Rejoindre refondue, groupe WhatsApp et billetterie en ligne#39
flocom merged 3 commits into
mainfrom
claude/remove-apel-sensitive-data-73l5iu

Conversation

@flocom

@flocom flocom commented Aug 30, 2026

Copy link
Copy Markdown
Owner

Trois demandes traitées ensemble, parce qu'elles se rencontrent toutes sur les pages publiques : rendre la page « Rejoindre » engageante, annoncer le groupe WhatsApp, et permettre la billetterie en ligne d'un événement.

1. La page Rejoindre

Elle affirmait sans rien montrer et ne menait nulle part : l'ancre #contact existait mais aucun lien du site n'y conduisait, donc le formulaire — seul point de conversion — n'était atteignable qu'en faisant défiler trois sections. Sa colonne de 896 px ne s'alignait ni sur l'en-tête ni sur le pied de page (1280 px), d'où l'impression de page de mentions légales.

Elle repart de ce qui retient réellement un parent : quatre objections énoncées puis désamorcées avant toute demande (« je n'ai pas le temps », « je ne connais personne », « je ne saurais pas quoi faire », « et si je ne peux plus ? » — celle-ci s'appuie sur le lien d'annulation réellement envoyé par e-mail). Vient ensuite ce qui prouve que l'association existe : les rendez-vous réellement publiés, avec les places restantes, et la porte la plus basse qui soit — prendre un créneau sans compte. Le formulaire arrive en dernier, précédé de ce qui se passe après l'envoi.

Tous les agrégats sont calculés côté serveur : getUpcomingPublishedEvents rapporte aussi les inscriptions des bénévoles, jetons d'annulation compris, qui n'ont rien à faire dans le flux d'une page publique indexable.

2. Le groupe WhatsApp

Un carton d'invitation sur la page Rejoindre, avec un aperçu de ce qui circule dans le groupe. L'aperçu est cadré comme illustration : légende visible lue avant les bulles, y compris par un lecteur d'écran ; ni horodatage, ni double coche, ni prénom. Le concept le plus spectaculaire (fausse notification d'écran verrouillé horodatée « à l'instant ») a été écarté : il présentait comme reçu un message que l'association n'a jamais envoyé.

Ailleurs, un simple lien : pied de page de tout le site, une ligne sur l'accueil, une phrase dans les deux écrans de confirmation. Le lien se règle dans Configuration ; sans lui, rien n'apparaît nulle part.

L'encre du bouton est bleu nuit sur le vert de la marque : du blanc tomberait à 1,98:1. C'est écrit en commentaire dans le fichier, parce que c'est la « correction » que tout relecteur propose.

3. La billetterie d'un événement

Champ par événement, saisi par un organisateur. Le nom est neutre (ticketingUrl) et n'importe quelle adresse https:// est acceptée — une APEL peut vendre ailleurs — mais quand l'adresse est HelloAsso, elle est vérifiée : un lien admin.helloasso.com (l'erreur la plus fréquente) ne montrerait aux familles qu'un écran de connexion.

Le point délicat était la cohabitation avec l'inscription bénévole. Les deux démarches sont séparées par le contenant, pas par la couleur : bande turquoise traversante pour « Je réserve ma place », carte blanche du formulaire pour « Je donne un coup de main ». Et surtout par le vocabulaire — « réserver / ma place / billetterie » à la plateforme, « coup de main / créneau / mission » au bénévolat :

Avant Après
bouton « Je m'inscris » « Je prends ce créneau »
« 8 places encore disponibles » « 8 coups de main encore recherchés »
créneau « Buvette (2 places) » « Buvette · 2 bénévoles recherchés »
objet d'e-mail « Inscription confirmée — … » « Votre créneau du … — … »

Deux mentions sous le bouton disent ce que l'application ne fait pas : on quitte le site, la confirmation viendra de la plateforme, et réserver n'inscrit pas comme bénévole.

Défauts corrigés au passage

  • Le compteur affichait « 0 place encore disponible » sur un événement sans aucun créneau — à côté d'un bouton « Réserver », cela se lit « complet ».
  • Dans le héros de Rejoindre, le lien de retour et le badge étaient tous deux inline-flex, donc rendus sur la même ligne, l'un chevauchant l'autre.
  • Le champ de saisie en type="url" faisait afficher au navigateur son propre message, dans la langue du système, avant les cinq messages français.
  • « pas une adresse du tout » était accepté (devenait https://pas%20une%20adresse…) : le nom d'hôte est maintenant contrôlé.

Vérifications

Instance réelle (PostgreSQL 16, migrations, next build + next start), navigateur réel (Chromium/Playwright), captures relues.

Vérification Résultat
Page événement, billetterie + créneaux badge « Billetterie et bénévoles », bande, compteur en coups de main, dénégation croisée
Page événement, créneaux seuls rendu identique à l'existant, aucune trace de billetterie
Page événement, billetterie seule (Billetweb) badge « Billetterie en ligne », bouton « Réserver sur billetweb.fr », aucun compteur
Hiérarchie des titres un h1, deux h2 frères, dans les trois états
Cinq messages de validation un message distinct par cause, plus la note non bloquante pour une autre plateforme
Aller-retour du champ saisie sans schéma normalisée, enregistrée, retrouvée à la réouverture
Instance neuve (rien de configuré) ni carton WhatsApp, ni billetterie, agenda en état vide, formulaire remplacé par le bloc d'indisponibilité
Fuite de données aucune inscription bénévole (nom, e-mail, jeton d'annulation) dans le HTML des trois pages publiques
Ancres imbriquées sur l'accueil zéro
Défilement horizontal aucun, de 320 à 1280 px

Deux migrations : 0017_event_ticketing_url, 0018_whatsapp_group_link.


Generated by Claude Code

claude added 3 commits August 30, 2026 02:01
La page Rejoindre affirmait sans rien montrer, et ne menait nulle part :
l'ancre #contact existait mais aucun lien du site n'y conduisait, si bien
que le formulaire — seul point de conversion — n'était atteignable qu'en
faisant défiler trois sections. Sa colonne de 896 px ne s'alignait ni sur
l'en-tête ni sur le pied de page, d'où l'impression d'une page de
mentions légales.

Elle repart de ce qui retient vraiment un parent : quatre objections
énoncées à voix haute puis désamorcées, avant toute demande. Vient
ensuite ce qui prouve que l'association existe — les rendez-vous
réellement publiés, avec les places qui restent, et la porte la plus
basse qui soit : prendre un créneau sans compte. Le formulaire arrive en
dernier, précédé de ce qui se passe après l'envoi.

Le héros aligné sur max-w-7xl, deux boutons, une carte montrant le
prochain rendez-vous et les chiffres du moment, une respiration colorée,
des missions compactées en tuiles : la beauté vient de la typographie et
de la couleur, faute de photographie.

Tout reste calculé côté serveur : getUpcomingPublishedEvents rapporte
aussi les inscriptions des bénévoles, jetons d'annulation compris, qui
n'ont rien à faire dans le flux d'une page publique indexable.

S'y ajoute le début de la billetterie en ligne : un lien par événement,
saisi par l'organisateur. Le champ n'est pas réservé à HelloAsso — une
APEL peut vendre ses places ailleurs — mais quand l'adresse est bien
HelloAsso, elle est vérifiée : un lien vers l'espace d'administration,
l'erreur la plus fréquente, ne montrerait aux familles qu'un écran de
connexion. Une copie d'événement ne reprend jamais la billetterie de
l'édition précédente.

La présentation publique de ce lien suit, avec le bloc WhatsApp.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD
Les familles suivent déjà l'association par WhatsApp ; le site n'en
disait rien. Un carton d'invitation le dit maintenant sur la page
« Rejoindre », avec un aperçu de ce qui circule dans le groupe : les
dates, les changements de dernière minute, les coups de main cherchés.

L'aperçu est une illustration, et il est cadré comme telle. Sa légende
« Exemple de ce qui circule dans le groupe » est visible et lue avant les
bulles, y compris par un lecteur d'écran : ni horodatage, ni double
coche, ni prénom, rien qui puisse passer pour une conversation réelle.
Un jury a écarté pour cette raison la maquette de notification, plus
spectaculaire mais qui présentait comme reçu un message que
l'association n'a jamais envoyé.

Le vert de la marque n'apparaît qu'aux deux endroits où il signifie
WhatsApp — le sceau et le bouton — et porte une encre bleu nuit : du
blanc sur ce vert tomberait à 1,98:1, la correction que tout relecteur
propose au premier coup d'œil.

Ailleurs, un seul lien en texte, jamais le carton : dans le pied de page
de tout le site public, une ligne sur l'accueil, et une phrase dans les
deux écrans de confirmation — après avoir écrit, et après avoir pris un
créneau, où le besoin est le plus concret.

Le lien se règle dans Configuration ; sans lui, ni carton, ni lien de
pied de page, ni mention nulle part. Le dépôt est public et l'application
sert plusieurs associations : aucune invitation ne peut être écrite en
dur, et le champ dit clairement que le lien publié ouvre le groupe à
quiconque trouve la page.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD
La page publique d'un événement ne connaissait qu'une seule
« inscription » : se proposer comme bénévole. Avec une billetterie, il y
en a deux, de nature opposée — je réserve ma place, je tiens un stand —
et rien n'empêchait un parent de prendre un créneau de buvette en croyant
réserver son entrée.

Les deux démarches sont désormais séparées par le contenant, pas par la
couleur d'un bouton : une bande turquoise traversante dans l'encart de
l'événement pour « Je réserve ma place », la carte blanche du formulaire
pour « Je donne un coup de main ». La distinction survit au daltonisme
comme au niveau de gris, et la bande étant placée avant la description,
sa position ne dépend pas de la longueur du texte saisi.

Le vocabulaire tranche le reste, et c'est lui qui règle le fond :
« réserver », « ma place », « billetterie » vont exclusivement à la
plateforme ; « coup de main », « créneau », « mission » exclusivement au
bénévolat. Le bouton « Je m'inscris » — le mot qu'un parent emploie pour
inscrire son enfant à la kermesse — devient « Je prends ce créneau », le
compteur « n places encore disponibles » devient « n coups de main encore
recherchés », et l'objet de l'e-mail de confirmation, lu seul trois jours
plus tard, ne dit plus « Inscription confirmée » mais nomme le créneau.

Deux mentions sous le bouton disent ce que l'application ne fait pas :
on quitte le site, la confirmation viendra de la plateforme et
n'apparaîtra jamais ici ; réserver n'inscrit pas comme bénévole. L'écran
de remerciement du bénévole le redit, parce que c'est là que le
malentendu se scellerait.

Corrige au passage deux défauts : le compteur affichait « 0 place encore
disponible » sur un événement sans aucun créneau — à côté d'un bouton
« Réserver », cela se lit « complet » — et le champ de saisie en
type="url" faisait afficher au navigateur son propre message, dans la
langue du système, avant les nôtres. Un nom d'hôte invraisemblable est
maintenant refusé : « pas une adresse » devenait une URL valide une fois
préfixée.

Sur l'accueil, la billetterie n'est qu'une pastille non cliquable : la
carte est déjà un lien, et personne ne doit partir payer sans avoir lu la
date ni le lieu.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD
@flocom
flocom merged commit 281413c into main Aug 30, 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