XA
Xavier Affringue
Livré au clientFull Stack2026

CPTS Entre-Fleuves — Carte HPV

Carte interactive et back-office de gestion des lieux de vaccination HPV pour la CPTS Entre-Fleuves (14 communes).

CPTS Entre-Fleuves — Carte HPV

Détails du projet

Statut
Livré au client
CatégorieFull Stack
Année2026
Type de développementFull Stack
Fonctionnalités
8
Pages développées
7
Technologies utilisées
35
Stack principale
Frontend:Next.js 16+ Tailwind CSS v4
Backend:Node.js+ Next.js App Router (API Routes)
Database:PostgreSQL (Neon serverless)+ Prisma 7
Deploy:Vercel

Projet similaire ?

Ce projet vous inspire ? Discutons de votre idée !

Contactez-moi

Vue d'ensemble

Objectifs, défis relevés et statistiques du projet

Objectifs

Faciliter l'accès des habitants aux lieux de vaccination HPV sur les 14 communes de la CPTS Entre-Fleuves. Offrir aux professionnels de santé un outil autonome pour maintenir la carte publique à jour en temps réel.

Défis relevés

Intégrer Leaflet dans Next.js App Router sans erreur SSR (dynamic import SSR:false) tout en préservant les performances. Concevoir un analytics RGPD-compliant sans cookie via un hash SHA-256 journalier non réversible. Architecturer deux applications découplées (carte publique + admin) communiquant via une API REST sécurisée avec validation de type au runtime.

35
Technologies
8
Fonctionnalités
2026
Année

Fonctionnalités

Principales fonctionnalités développées dans ce projet

Carte Leaflet interactive avec couches GeoJSON (communes) et masque SVG du territoire
Filtrage multicritères : commune, type de lieu, accessibilité PMR, modalité de RDV (Doctolib, Maiia, sans RDV...)
Géolocalisation GPS avec centrage automatique et marqueur de position
Fiches détaillées par lieu : horaires, contact, vaccins disponibles, lien RDV
Back-office RBAC (ADMIN / SUPER_ADMIN) avec authentification Better Auth et emails transactionnels
Système d'emails complet : vérification, reset de mot de passe, formulaire de contact (React Email + Nodemailer)
Widget de feedback anonyme (note 1–5 + commentaire optionnel)
Analytics RGPD sans cookie : suivi des clics, filtres et visites par hash journalier anonymisé

Stack technique

Technologies et outils utilisés dans ce projet

Frontend

Langage:TypeScript
Frameworks:Next.js 16, React 19
Styling:Tailwind CSS v4
UI Libraries:shadcn/ui, Radix UI, @base-ui/react
State Management:Zustand
Libraries:Leaflet, react-leaflet, lucide-react, cmdk, clsx, tailwind-merge

Backend

Langage:TypeScript
Runtime:Node.js
Frameworks:Next.js App Router (API Routes)
API Types:REST
Security:Middleware RBAC (ADMIN / SUPER_ADMIN), Validation Zod, Type guard runtime
Authentication:Better Auth 1.5
Libraries:Nodemailer, React Email, @hookform/resolvers, react-hook-form, zod

Base de données

Databases:PostgreSQL (Neon serverless)
ORM:Prisma 7

Outils

Tools:ESLint, Prettier, pnpm, tsx, @vercel/analytics

Déploiement

Platforms:Vercel

Détails techniques

Solutions techniques mises en œuvre dans ce projet

Architecture découplée : l'API REST `/api/places` de cpts-admin est consommée par cpts-map, avec validation structurelle au runtime via type guard serveur
Analytics RGPD-compliant sans consentement cookie : SHA-256(IP + sel journalier YYYY-MM-DD), rotation automatique toutes les 24h, non réversible
Leaflet intégré en Next.js App Router via `dynamic()` (SSR:false) ; couche GeoJSON des 14 communes + masque SVG vectoriel autour du territoire
Middleware Better Auth avec vérification du rôle SUPER_ADMIN pour la route `/dashboard/admins` ; redirection sur compte désactivé
Schéma Prisma modulaire (multi-fichiers `.prisma`) avec enums métier stricts (TypeLieu, Commune, ModaliteRdv, JourSemaine)
4 stores Zustand découplés (filter, map, vaccinationPlace, search) assurant une séparation claire des responsabilités côté client