05Toul'BarzEn chantier

« on a vu qu'il y a plein de trucs de fou qui se font niveau automatisation. toi qui connais, tu penses que ça peut nous aider pour la gestion de l'asso ? »

le bureau d'une association de street workout, à Toulouse

Une asso pilotée depuis les LLM qu'elle utilise déjà.

Le bureau écrit à Claude ou à ChatGPT, comme il le fait déjà. Derrière, une passerelle reconnaît l'asso et refuse ce qui dépasse ; un tableau de bord monochrome tient les événements, les adhésions et les envois. Rien ne part sans passer par le goulot, rien ne se perd en silence.

Du premier fichier aux modules en service
6 semaines
Ce qui en reste aujourd'hui
233 membres, 76 événements sortis des tableurs
Socle en production
3 juin 2026

tbEntrer Plateforme privée de l'asso · conception, code, mise en production, en solo

Événements

Le cœur de l'asso, de l'idée jusqu'au bilan.

Prochain programme WhatsApp (lundi)

Le cycle de vie d'un événement, repris du code du tableau de bord (StatusStepper.vue, ADR 0020) : cinq états, de l'idée au bilan. Cliquez un état pour y passer, ou annulez : les règles, les délais et le message de confirmation sont ceux du produit. Rien n'est enregistré ici. Copier prend le programme du lundi reproduit plus bas.

Ce que la phrase voulait dire

Un bureau bénévole qui passe ses soirées dans des tableurs et du papier : événements, adhésions, relances, communications de groupe. Ce bureau utilise déjà Claude et ChatGPT pour l'asso, et voit passer « plein de trucs de fou niveau automatisation ». Personne ne demandait une plateforme. La question posée était : est-ce que ça peut nous rendre du temps.

La réponse tient en deux mouvements. Ne pas leur apprendre un nouvel outil : brancher leurs LLM, par MCP, sur une passerelle qui sait qui parle et ce qu'elle a le droit d'envoyer. Et sortir des tableurs ce qui se répète : les événements suivis en cinq états, les adhésions HelloAsso traitées à l'arrivée, les relances envoyées à l'heure, les groupes WhatsApp servis le lundi matin.

Ce qui a été construit

Un tableau de bord argent et encre derrière un seuil ; une API sur un serveur, avec un planificateur en heure de Paris ; une passerelle d'envoi commune à tous les projets de la maison ; et un accès MCP pour que le bureau pilote depuis ses LLM. Chaque outil ci-dessous existe dans le code. Ce qui attend une clé le dit.

Piloté depuis leurs LLM, par MCP

L'asso n'a pas de nouvel outil à apprendre. Ses LLM se connectent à la passerelle d'envoi par MCP ; le jeton porte l'identité de l'asso, et chaque appel passe par le même goulot que tous les envois de la plateforme. Ce que le LLM demande, le serveur le vérifie : un refus revient lisible, avec la raison et le délai exact avant la prochaine fenêtre.

LE BUREAU Claude, ChatGPT les LLM déjà utilisés pour l'asso depuis leurs propres outils MCP jeton au nom de l'asso LA PASSERELLE ENVOI LE GOULOT kill switch, suspension quotas et débit consentement liste de suppression anti-ban WhatsApp garde-fous de contenu côté serveur, jamais dans le prompt admis CE QUI PART E-mail contact@admin.toulbarz.fr WhatsApp le numéro de l'asso, à lier refus lisible : quota, consentement, délai exact avant la prochaine fenêtre la clé, échangée une fois, n'entre jamais dans le contexte du LLM
L'accès client de la passerelle (spec 1 de la plateforme, ADR-020 et ADR-021 d'envoi) : la clé de projet sert de credential OAuth une seule fois, le jeton porte le tenant, et les outils lisent cette identité. Aucun repli sur un projet par défaut : à la moindre ambiguïté, refus.

Le seul texte qui atteigne vraiment le LLM de l'asso, c'est le bloc d'instructions posé sur son tenant, concaténé au socle commun à chaque connexion. Il dit qui parle, à qui on a le droit d'écrire, ce qui est interdit, et rappelle que le serveur refusera de toute façon.

Depuis le 20 août 2026, l'asso a aussi son propre compte d'envoi : ses e-mails partent de contact@admin.toulbarz.fr, avec leur plafond et leur domaine à eux, plus le compte partagé de la maison.

Côté passerelle, tout est en service et vérifié par un test de bout en bout à deux tenants : identité par jeton, cloisonnement, quotas, propriété du numéro, révocation immédiate. Reste à poser le bloc d'instructions sur le tenant, et à lier le numéro WhatsApp de l'asso : une carte SIM dédiée et dix à quatorze jours de chauffe avant le premier message.

Tu agis pour Toul'Barz, association de street workout de Toulouse. Tu envoies au nom de l'asso, jamais en ton nom propre.

DESTINATAIRES PERMIS : membres et adhérents de l'asso, personnes qui ont écrit d'elles-mêmes, référents et partenaires d'événements. RIEN d'autre.

INTERDITS, sans exception : démarchage à froid ; envoi de masse non sollicité ; contourner un désabonnement en changeant de canal. Le serveur refusera de toute façon.

AVANT D'ENVOYER : fais relire tout message à un humain de l'asso. En cas de refus du serveur, lis le code renvoyé et l'outil limits ; ne boucle jamais sur un refus.
Extrait du bloc d'instructions du tenant (docs/specs/bloc-instructions-mcp-toulbarz.md), accents rétablis. C'est ce que le LLM de l'asso lit avant d'envoyer quoi que ce soit.

Ce qui tourne tout seul

La plateforme n'attend pas qu'on pense à elle. Un planificateur dans l'API se réveille chaque minute, en heure de Paris, et déclenche les automatismes à heure fixe. Chaque envoi automatique a un interrupteur, éteint tant que le bureau ne l'allume pas.

chaque minute, en heure de Paris 04:10chaque nuit, nettoyage des journaux techniquesen service 07:30chaque matin, rappels au référenten service 08:00le lundi, programme de la semaine sur WhatsAppnuméro à lier 08:05le 1er du mois, débrief de l'activitéen service 08:15chaque matin, relances de renouvellementinterrupteur éteint 15 mintoute la journée, veille et mail d'incidenten service
Les horaires sont ceux déclarés par les modules (events, members, alerts, journal). Un job raté pendant un redémarrage n'est pas rattrapé ; les relances quotidiennes se rattrapent d'elles-mêmes le lendemain (ADR 0021).

Un nouvel adhérent arrive

Quelqu'un paie son adhésion sur HelloAsso. Personne n'a rien à saisir : la fiche du membre existe dans la minute, il rejoint seul la liste de diffusion des adhérents, et le message de bienvenue part si le bureau l'a armé.

DÉCLENCHEUR Adhésion payée sur HelloAsso, webhook signé AUSSITÔT Fiche du membre créée adhésion valable un an 7 fiches créées seules du 6 au 12 août 2026 PUIS Rejoint la liste Adhérents entretenue toute seule ENFIN Message de bienvenue une seule fois interrupteur éteint jamais deux fois, même si HelloAsso notifie deux fois
Le webhook HelloAsso est en prod depuis le 13 juillet 2026. Sept adhérents se sont créés seuls entre le 6 et le 12 août ; le message de bienvenue, lui, est resté éteint : ces sept personnes n'ont rien reçu. Décision à prendre par le bureau : armer, et rattraper ou non les sept.

Le message part à la première adhésion, jamais aux renouvellements. Comme tous les e-mails de la plateforme, il passe par la passerelle d'envoi avec un identifiant déterministe : deux notifications HelloAsso pour la même adhésion ne font qu'un seul envoi.

Les e-mails sont le seul endroit clair du produit : une feuille blanche sur fond gris, sans couleur, sans image, sans coin arrondi, parce qu'Outlook ne sait pas faire autrement.

Toul'Barz

Objet : Bienvenue chez Toul'Barz

Bienvenue dans l'asso

Bonjour Camille,

Ton adhésion à Toul'Barz est bien enregistrée. Bienvenue dans l'asso.

Les entraînements, les événements et les infos pratiques arrivent dans les groupes WhatsApp : si tu n'y es pas encore, réponds à ce message.

L'équipe Toul'Barz

Toul'Barz, message automatique du tableau de bord.

L'e-mail de bienvenue, texte repris du code (members/services/emails.ts). Camille est le prénom d'exemple du livret de processus de l'asso.

L'adhésion arrive à échéance

Chaque matin à 08h15, la plateforme regarde qui arrive au bout de son année et prépare la relance juste. Une personne ne reçoit jamais deux relances pour la même échéance : seule la plus urgente qui s'applique part.

une seule relance par échéance : la plus urgente qui s'applique J-30 J-7 ÉCHÉANCE SOIXANTE JOURS APRÈS un mois avant,une alerte douce une semaine avant,dernière ligne droite le jour même,adhésion expirée silence,plus aucune relance interrupteur éteint : la vérification tourne chaque matin, rien ne part
Trois objets d'e-mail existent dans le code : ton adhésion expire dans un mois, dans une semaine, a expiré. La relance est mémorisée par personne et par échéance ; au-delà de soixante jours, plus rien.

Un paiement est refusé

La banque refuse un paiement d'adhésion. Plutôt que d'écrire dans le dos du bureau, la plateforme prépare le dossier et laisse décider qui relancer. Ce mode « sur validation » est celui en service ; le mode automatique existe, avec au plus une relance par jour et par personne.

DÉCLENCHEUR Paiement refusé signalé par HelloAsso AUSSITÔT Le cas entre dans la file montant, lien de régularisation VOUS Vous cochez qui relancer mode en service : sur validation RÉSULTAT Le message part le cas passe en relancé au plus une relance par jour et par personne le seul message signé par des personnes : « À vite aux barres, L'équipe Toul'Barz »
HelloAsso renotifie parfois le même refus : le cas reste marqué relancé au lieu de repartir. Un souci d'argent mérite un ton de personne, pas de machine : c'est le seul e-mail qui ne se termine pas par la mention automatique.

Le référent est rappelé, seul

Chaque événement a un référent. La plateforme suit le calendrier à sa place et le relance aux quatre moments qui comptent, chaque matin à 07h30. Le rappel s'arrête dès que c'est fait ; un jalon relancé n'est jamais rejoué.

le référent relancé à 07:30 J-15 J-7 JOUR J J+5 J+10 le templateà remplir l'équipeà confirmer l'événementa lieu le compte-rendupas commencé le compte-renduen retard le rappel s'arrête dès que c'est fait ; un jalon relancé n'est jamais rejoué envoi impossible : inscrit sur la fiche, à faire à la main
Les jalons sont calculés depuis la fiche, jamais stockés (events/services/milestones.ts). Les événements importés de l'historique n'en ont aucun : on ne relance personne pour un événement de 2024.

L'événement se range seul

Créer un événement dans le tableau de bord suffit. Dès qu'il passe en préparation ou en prêt, la plateforme le publie dans le bon agenda, lui ouvre un dossier et réserve le matériel. Le code est écrit et se déclenche dès que les clés sont posées ; aujourd'hui, chaque événement affiche « en attente » avec la raison, et un bouton pour tout resynchroniser d'un coup.

DÉCLENCHEUR L'événement passe en préparation ou en prêt annulé : retiré, matériel libéré visibilité changée : autre agenda terminé : reste dans l'agenda EN ATTENTE DES ACCÈS GOOGLE Agenda public ou adhérents, selon la visibilité Dossier Drive au nom de l'événement, créé une fois Matériel chaque matériel réservé sur son agenda
Construit, en attente des accès Google : la création de la clé du compte de service est bloquée par une règle héritée de l'organisation Google de l'asso ; une exception limitée au seul projet de synchronisation lui a été demandée (passation du 20 août 2026). Aucun événement n'est perdu en attendant.

Cinq états, pas quatre. La règle écrite disait quatre états et « le 3 est sauté ». Le vrai fichier du pôle événementiel, lui, utilisait « 3 - PRÊT ». La plateforme a suivi le terrain : cinq états, de 0 à 4, sans saut (ADR 0020, 21 juin 2026). C'est le stepper du haut de page.

WhatsApp, sans y penser

Deux automatismes : le programme de la semaine part tout seul le lundi matin dans les groupes abonnés, et n'importe quel événement s'annonce en un clic depuis sa fiche, vers le canal choisi. Les deux passent par la passerelle d'envoi, jamais par un client WhatsApp en direct : le numéro de l'asso est protégé par les mêmes quotas et le même anti-ban que tout le reste.

TOUS LES LUNDIS À 08H00 08:00, le lundi le planificateur se réveille Programme composé les événements de la semaine Passerelle envoi quotas, anti-ban Groupes abonnés numéro de l'asso à lier UNE ANNONCE, EN UN CLIC La fiche de l'événement un bouton, un clic Canal choisi Annonces, Séances d'essai, Adhérents Passerelle envoi quotas, anti-ban Groupes du canal numéro de l'asso à lier semaine sans événement : rien ne part chaque tentative inscrite au journal, avec sa raison
Le routage par la passerelle est acté (ADR 0026, 19 août 2026) : une session WhatsApp propre à l'asso sur l'instance commune, son numéro et lui seul. Aucun numéro n'est lié aujourd'hui ; la plateforme journalise chaque tentative en échec, avec la raison.

Le texte du lundi est composé depuis les événements de la semaine : le jour, l'heure, le lieu, et la mention « adhérents » quand l'événement leur est réservé. Une semaine vide n'envoie rien : la plateforme se tait plutôt que de poster un message creux dans les groupes.

Le même moteur donne, sur chaque fiche, un texte prêt à coller pour Instagram, derrière un bouton Copier.

Programme de la semaine (du 20/07/2026 au 26/07/2026)

- mercredi 22/07/2026, 18h30 : Entrainement barres - Parc Compans (adherents)
- samedi 25/07/2026, 14h30 : Show Capitole - Place du Capitole
Le programme tel que le compose events/services/texts.ts, sans accents pour WhatsApp. Les deux événements sont les exemples du livret de processus de l'asso.

Ouvrir un accès à quelqu'un

Personne ne crée de compte tout seul, et personne ne choisit un mot de passe à la place d'un autre. Le bureau invite ; la personne choisit son mot de passe elle-même, et voit ce que son rôle lui permet de voir.

VOUS Vous créez le compte adresse, nom, rôle AUSSITÔT Un lien à usage unique valable une heure LA PERSONNE Elle choisit son mot de passe RÉSULTAT Elle voit ce que son rôle permet Retrait d'un accès déconnectée dans la seconde, sur tous ses appareils ; réversible Trois garde-fous ni se retirer admin, ni se désactiver, ni retirer le dernier admin
Accès et comptes livrés le 3 août 2026 en production (ADR 0024) : invitation, mot de passe oublié, changement, désactivation réversible, écran de gestion des comptes, page Mon compte. La connexion Google est prête en seconde porte, masquée tant que ses identifiants manquent.

Le seuil, et la matière

La vitrine ne vend rien. Une photo, un monogramme, un mot. Le monogramme mène à Instagram ; « Entrer » ouvre le seuil ; les mentions légales sont là, plus sourdes. Cliquer n'importe où sur la scène entre aussi. Le manifeste du produit tient en trois mots, mystère, show, silence, et en une règle : monochrome absolu, toute couleur exige une décision écrite.

La vitrine de la plateforme : un athlète en drapeau sur une barre, sous l'oculus lumineux d'une coupole, en noir et blanc ; en bas à gauche, le monogramme, le mot Entrer et Mentions légales.
La vitrine, servie en local depuis son dossier le 29 août 2026 : une seule police, aucun appel réseau, un seul angle occupé.
La même vitrine sur un téléphone : la scène recadrée sur l'athlète et l'oculus, la pile monogramme, Entrer, Mentions légales en bas à gauche.
Sur téléphone, la scène se recadre ; la pile reste au même endroit.
Le seuil ouvert : la scène s'est assombrie et rapprochée, et un formulaire de connexion naît dans la lumière de l'oculus, avec le monogramme, les champs E-mail et Mot de passe, le bouton Se connecter et un lien Retour.
Le seuil. Une connexion réussie fait plonger la scène à travers l'oculus (échelle 8 en 1,75 s), et le tableau de bord se condense depuis la matière argentée qu'il y a derrière, avec trois portes.

Fraunces pour les titres, Archivo pour l'interface, JetBrains Mono pour ce qui se copie ; toutes trois auto-hébergées. Aucun radius sur les primitives, aucune ombre : la profondeur vient d'aplats superposés, de halos, et d'un grain argentique qui est le seul bruit autorisé. Le seuil de choix est le seul endroit clair du parcours : l'argent sur lequel on entre, et l'encre posée dessus.

Le tableau de bord lui-même est privé et demande une connexion : il n'est pas capturé ici. Le spécimen du haut de page en est la reprise fidèle, depuis son code.

Le monogramme Toul'Barz
  • VisiteurLe visage public de l'asso.
  • MembreL'espace des adhérents.
  • AdminLe poste de pilotage.
Le seuil de choix après la traversée, repris de ChooserView.vue : la matière argentée, l'encre, et les trois portes avec leurs sous-titres réels.

Où en est chaque automatisme

État au 19 août 2026, vérifié en base et sur le serveur. Rien de ce qui attend ne demande du développement : ce sont des accès à fournir, un interrupteur à allumer, ou un numéro à relier.

En service
  • Rappels au référent, quatre jalons
  • Création des membres, prouvée en août
  • Liste Adhérents entretenue toute seule
  • Paiements refusés, relance sur validation
  • Campagnes e-mail, à la main du bureau
  • Accès et mots de passe
  • Texte Instagram, à copier-coller
  • E-mails par la passerelle, dix gabarits, compte dédié
  • Veille toutes les quinze minutes, débrief mensuel
Interrupteur à allumer
  • Message de bienvenue (sept adhérents d'août n'ont rien reçu)
  • Relances de renouvellement
Accès à fournir
  • Agenda et Drive : clé du compte de service bloquée par une règle de l'organisation Google, exception demandée
  • Réservation du matériel : agenda matériel à confirmer
  • Connexion Google : identifiants OAuth à créer
Numéro à relier
  • Programme du lundi
  • Annonces WhatsApp
  • WhatsApp depuis les LLM : SIM dédiée, dix à quatorze jours de chauffe

Rien ne part par surprise : chaque envoi automatique a un interrupteur, éteint tant que le bureau ne l'allume pas. Ce qui n'a pas sa clé s'affiche « en attente » avec la raison, et se rejoue quand la clé arrive. Un échec silencieux est un bug (ADR 0022).

Et la plateforme se surveille elle-même : toutes les quinze minutes elle vérifie qu'elle va bien et écrit un mail en cas d'incident ; le premier du mois elle envoie un résumé de son activité ; chaque nuit elle nettoie ses journaux techniques, sans toucher à l'historique de l'asso (ADR 0025).

Le résultat

« Tu penses que ça peut nous aider ? » est devenu : un socle en production le 3 juin 2026, des modules en service le 13 juillet ; le 20 juillet, 216 membres et 76 événements sortis des tableurs ; en août, sept adhésions traitées sans que personne n'y touche ; et depuis le 20 août, une passerelle qui reconnaît l'asso quand son LLM frappe à la porte.