Problème : gérer des rendez-vous sans surbooking et sans friction côté client. Solution : une page publique de réservation avec un back-office admin sécurisé pour piloter les créneaux.
- Réservation publique avec validation des champs
- Création et gestion des créneaux côté admin
- Annulation de réservation avec libération du créneau
- Authentification admin (NextAuth) + RBAC
- Gestion des utilisateurs et des sessions
- UI d’administration en Material UI
- Next.js 16 (App Router)
- React 19
- Material UI 7
- Prisma 7 + PostgreSQL 16
- NextAuth v5 (Credentials)
src/
app/
(public)/ # pages publiques (login, booking)
(private)/ # administration protégée
(components)/ # composants partagés
lib/
db/dao/ # accès données
auth.ts # NextAuth
permissions.ts
generated/
prisma/ # client Prisma
zod/ # schémas Zod
Les comptes admin OWNER sont provisionnés via variables d’environnement + seed pour éviter un endpoint public de création d’admin. Les utilisateurs classiques sont ensuite gérés depuis l’interface d’administration.
- Concurrence de réservation : empêcher le double booking d’un même créneau
- Sécurité admin : NextAuth + RBAC + contrôles côté serveur
- Prisma : migrations, seed et structuration des accès DB
- Emails de confirmation et d’annulation
- Export iCal / Google Calendar
- Page publique de disponibilités partageable
npm install- Copier
.env.example→.env - Choisir une option DB :
Option A (recommandée) : DB distante (Supabase/Neon)
DATABASE_URL=postgresql://...
Option B : PostgreSQL local via Docker
docker compose up -d postgresDATABASE_URL=postgresql://postgres:postgres@localhost:5432/reservation_project?schema=public
- Initialiser la base :
npx prisma generatenpx prisma migrate deploynpx prisma db seed
- Lancer :
npm run dev