CovalFlow
2026 · Conception et développement, construit chez CovalTech.
Planning de bénévoles pour organisateurs d'événements : profils, contrats signés électroniquement, rappels automatiques, et un planning de créneaux généré par un solveur sous contraintes en moins de 10 secondes.
Ce que j'ai livré
- Un planning de créneaux calculé par un solveur sous contraintes (OR-Tools CP-SAT) en moins de 10 secondes
- Une app où les bénévoles déclarent eux-mêmes leurs disponibilités
- Un recalcul du planning qui garde les affectations déjà verrouillées à la main
- Des contrats avec une vraie signature électronique (Documenso auto-hébergé), suivis et relancés automatiquement
- Des exports PDF : un planning par événement, une feuille de route par bénévole
- Des profils de bénévoles partagés entre organisations, avec des données isolées pour chacune
- Les règlements : ce qui est dû à chaque bénévole, en espèces et par virement, par événement
En chiffres
- pour planifier 100 bénévoles sur 400 créneaux
- < 10 s
- associations l'utilisent en production
- 3
- contrats signés sur téléphone par une association
- 68
- tests automatisés sur le solveur
- 48

Contexte
Les organisateurs d'événements qui reposent sur des bénévoles, surtout des associations couvrant des événements de quelques centaines à quelques milliers de participants, planifiaient les créneaux à la main dans un tableur et relançaient les signatures par email et pièces jointes PDF : disponibilités, compétences et règles de repos suivies dans des documents séparés, qui se désynchronisaient dès qu'un bénévole changeait d'avis. J'ai vécu ce problème directement, en coordonnant des bénévoles pour un événement sur deux jours où un changement d'heure en pleine nuit a défait la majeure partie d'un planning terminé. Déplacer une personne d'un créneau en déplaçait plusieurs autres autour d'elle, et le tableur devait être reconstruit, pas corrigé.
Le problème
Un planning faisable doit respecter à la fois les disponibilités, les compétences et les règles de repos de chaque bénévole, couvrir chaque poste dont l'événement a besoin, et un tableur ne peut rien prouver de tout cela. Au-delà de quelques dizaines de bénévoles, le vérifier à la main cesse d'être fiable, et un seul désistement la veille d'un événement peut forcer à tout refaire depuis rien.
Contraintes
Les contrats avaient besoin d'une vraie signature, pas d'une pièce jointe par email que personne ne relançait vraiment. Un planning déjà publié, parfois déjà partiellement signé, ne pouvait pas être écrasé silencieusement dès que quelque chose changeait : le régénérer devait conserver chaque affectation déjà verrouillée à la main et ne recalculer que le reste. Et les organisateurs concernés sont de petites associations : la stack devait rester auto-hébergée et peu coûteuse à faire tourner, pas un abonnement SaaS par utilisateur.
Ce que j'ai construit, en détail
Des profils de bénévoles qui suivent une même personne d'une organisation à l'autre, puisqu'un bénévole travaille souvent avec plus d'une association, derrière un sélecteur d'organisation qui garde les données de chacune isolées des autres. Des postes par événement (sécurité, bar, accueil) avec une rémunération définie par affectation, une app en libre-service où les bénévoles déclarent eux-mêmes leurs disponibilités, et un écran de planning porté par un service Python (FastAPI, Google OR-Tools CP-SAT, couvert par 48 tests) qui transforme disponibilités, compétences et règles de repos en un planning de créneaux faisable, avec une infobulle expliquant pourquoi tel bénévole n'a pas été affecté. Un planning publié survit à une régénération : les affectations déjà verrouillées à la main le restent, seul le reste est recalculé, et l'ensemble s'exporte en PDF, une vue pour l'événement et une feuille de route par bénévole. Les contrats, liés à un événement ou autonomes, obtiennent un PDF et une vraie signature via une instance Documenso auto-hébergée, suivis de généré à envoyé à signé, avec des relances automatiques pour ceux encore en attente. Un module de règlement referme la boucle : les montants en espèces et par virement dus à chaque bénévole, par événement.
Décisions
- Un solveur sous contraintes plutôt qu'un moteur de règles
- OR-Tools CP-SAT traite disponibilités, compétences et repos comme des contraintes dures et prouve qu'un planning faisable existe, au lieu d'une heuristique au mieux qui peut laisser un créneau non couvert sans prévenir.
- Impact Un planning de 100 bénévoles sur 400 créneaux en moins de 10 secondes, chaque contrainte vérifiée.
- Multi-organisation dès la première migration
- Chaque table porte un identifiant d'organisation, et un bénévole qui travaille avec deux associations passe de l'une à l'autre sans que l'une voie les données de l'autre. Cela comptait dès le départ : CovalFlow fait tourner plusieurs associations sur la même instance aujourd'hui.
- Impact 3 associations tournent sur la même instance, et aucune ne voit les données d'une autre.
- Signature électronique auto-hébergée
- Documenso, auto-hébergé, donne à chaque organisation un vrai contrat signé sans abonnement SaaS récurrent par utilisateur, ce qui compte pour une association gérée par des bénévoles.
- Impact Une association a fait signer 68 contrats sur téléphone, sans abonnement par utilisateur.
- Solveur assisté par IA, relu par moi
- Le Python n'est pas un langage que j'écris au quotidien. J'ai conçu le modèle OR-Tools et le découpage en modules, puis relu chaque ligne écrite par un agent IA avant qu'elle ne parte en production.
- Impact Le solveur est parti en production couvert par 48 tests.
Résultat
Le solveur planifie 100 bénévoles sur 400 créneaux en moins de 10 secondes, et CovalFlow tourne aujourd'hui pour 3 associations. Deux événements après sa mise en usage réel, une association avait géré 80 bénévoles et fait signer 68 contrats depuis un téléphone, sans imprimer une seule page. La vraie surprise n'a pas été le temps gagné sur le planning lui-même, c'est de ne plus passer ses soirées à relancer des gens pour une signature.
100 bénévoles et 400 créneaux planifiés en moins de 10 secondes, en production pour 3 associations.
Stack
- React
- TypeScript
- Node.js
- PostgreSQL
- Python (OR-Tools CP-SAT)
- FastAPI
- Docker