Planning des permanences
L’application qui répartit équitablement les bénévoles du club sur les permanences de salle et de bar, à chaque week-end de match à domicile.
En productionCode source privé
- React 18
- TypeScript
- Vite
- Node.js
- SQLite
- Docker
Contexte
À chaque match à domicile, il faut des bénévoles pour tenir la salle et le bar, sans toujours solliciter les mêmes personnes. L’application remplace un premier prototype (des scripts Python et deux pages HTML), puis une application de bureau (Electron) partagée via Firestore. Je l’ai transformée en application web.
Elle est en ligne depuis octobre 2026. L’idée : les dirigeants s’y connectent depuis leur ordinateur ou leur téléphone, et tous travaillent sur la même version du planning. Les bénévoles n’ont pas besoin de compte, et le planning s’exporte en Excel. Sur téléphone, les trois gestes du quotidien (consulter le planning, remplacer quelqu’un, noter une indisponibilité) sont pensés pour le pouce.
Ce que j’ai fait
- Un moteur d’affectation déterministe : avec les mêmes données, il donne toujours le même planning. Un vérificateur indépendant recontrôle ensuite le résultat.
- Un serveur Node sans framework, avec seulement deux dépendances de production, et une base SQLite.
- Le passage du poste de bureau au web sans toucher au moteur : passer de Firestore à SQLite a été une simple copie des documents, sans aucun écart.
- Des archives qu’on ne peut plus modifier : la base elle-même, par des déclencheurs SQL, refuse tout changement.
- Une authentification faite maison (mots de passe hachés avec scrypt) et des comptes créés par lien d’invitation à usage unique : pas d’e-mails à envoyer, donc pas de serveur SMTP ni de secret de plus à gérer.
Comment je l’ai construit
43 specs et environ 1 500 tests, dont les critères d’acceptation du cahier des charges, rejoués sur les données du club. Le serveur tourne dans un conteneur Docker.
// Pour mes projets de 2026, je travaille avec des agents IA (Claude Code) : je cadre le besoin, j’écris la spécification, puis je relis et je valide le code.