TimeOff Planner
Une PWA pour poser ses congés et ses RTT et suivre ses soldes mois par mois. Elle a quitté Vercel et Supabase pour mon propre serveur.
En productionCode source privé
- Vue 3
- Vite
- Node.js
- SQLite
- OpenID Connect
- Playwright
- Docker
Contexte
Une application pour poser ses congés payés et ses RTT, avec deux soldes : le prévisionnel, qui compte tous les congés posés (brouillons et demandes compris), et le confirmé, qui ne compte que ceux qui sont acceptés ou imposés.
Elle est pensée d’abord pour le mobile, où l’on consulte, et se complète sur ordinateur, où l’on pose ses congés. On se connecte avec Google, l’inscription est libre, et chacun ne voit que ses propres données.
Ce que j’ai fait
- Un seul service Node, sans framework : il sert la PWA et une API JSON, avec une base SQLite (un seul fichier) et cinq migrations SQL.
- Une connexion Google (OpenID Connect avec PKCE) et une session dans un cookie
HttpOnly. - Un cloisonnement strict des comptes : chaque requête est filtrée par compte, donc une ligne qui appartient à quelqu’un d’autre est introuvable. Un test dédié le vérifie.
- Un refus par défaut : toute nouvelle route est protégée sans que j’aie à y penser.
- Des tests : environ 80 tests unitaires et une cinquantaine de scénarios Playwright de bout en bout.
La sortie de Supabase
Jusqu’en octobre 2026, l’application tournait sur Vercel avec Supabase. Je l’ai migrée sur mon propre serveur, en gardant les comptes et les données :
- export des données en lecture seule ;
- base SQLite construite à part, puis comparée à la référence ;
- script de migration conçu pour s’arrêter au moindre écart ;
- comptes retrouvés grâce à leur identifiant Google ;
- sauvegarde nocturne de la base une fois en ligne.
La sécurité par ligne de Supabase est remplacée par le filtre de compte du serveur, couvert par des tests.
// 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.