
02 — Application web + API REST
CopropHub
Les assemblées de copropriété, sans papier.
Contexte
Vote en ligne des résolutions d'AG avec calcul légal des majorités, procès-verbal PDF, incidents, charges et notifications.
RôleProjet individuel.
Statut MVP (27 tâches) + V1 terminés et vérifiés ; outillage de production prêt, hébergeur à choisir
Ce que j’ai construit
- Assemblées générales : création, ouverture du vote, vote par résolution (pour / contre / abstention), modification tant que le vote est ouvert, clôture
- Calcul des résultats selon la règle de majorité (art. 24, 25, second vote 25-1), électorat figé à l'ouverture
- Procès-verbal PDF et relevé de charges PDF générés à la volée
- Incidents : déclaration, suivi de statut (déclaré → en cours → résolu)
- Charges : par lot, statut payé / à payer / en retard, taux de recouvrement
- Notifications email (ouverture/clôture d'AG, incidents, charges) sans jamais divulguer votes ni montants
- Thème personnalisable par utilisateur, contraste toujours conforme WCAG AA (OKLCH)
- RGPD : anonymisation d'un ancien copropriétaire en conservant ses votes
Défis techniques
- Intégrité du vote : test de course double vote concurrent, course vote/clôture, électorat figé
- Sécurité : CSRF, en-têtes durcis (CSP stricte), révocation des sessions au changement de mot de passe, rate limiting partagé entre instances (Redis), rôle PostgreSQL applicatif à droits limités, tests XSS automatisés
- Architecture en 3 couches physiquement séparées (controllers / services / repositories)
- Déploiement : Docker Compose de production, Caddy (HTTPS automatique), sauvegarde/restauration, CI de livraison (GHCR + SSH)
93 %
de couverture322
tests unitaires184
tests d'intégration39
scénarios E2EQualité et tests
- 93 % de couverture de tests combinée
- 322 tests unitaires backend, 184 tests d'intégration sur base réelle, 152 tests de composants, 39 scénarios E2E
- 10 modèles de données
Stack
React · TypeScript · Vite · Node.js · Express · Prisma · PostgreSQL 16 · Redis · Zod · pdfkit · nodemailer · Docker · Caddy · GitHub Actions · Vitest · Supertest · Playwright · axe-core
Galerie
Méthode
Dossier complet de conception : exigences, Merise (MCD/MLD/MPD), UML (cas d'utilisation, séquences, états), zoning → wireframes → maquette Figma → prototype, ADR, veille technologique, plan de tests, éco-conception.