← Tous les projets
● PublicProjet open-source2026

Librebooking — Réservation de ressources sécurisée

Conception & développement complet (back-end + front-end)

Système open-source de réservation de ressources sous Symfony, conçu pour résister à la concurrence et tracer chaque action.

Symfony 7.4PHP 8.4PostgreSQLDoctrine ORMOAuth2Tailwind v4

Le contexte

Réserver une salle, un véhicule ou un équipement partagé paraît simple — jusqu'à ce que deux personnes cliquent sur le même créneau à la même seconde. Librebooking est un système open-source de réservation de ressources que j'ai conçu et développé de bout en bout, en m'appuyant sur l'expérience acquise sur une application critique similaire en environnement étatique.

L'objectif : un produit où la fiabilité et la sécurité ne sont pas des options ajoutées après coup, mais des contraintes prises en compte dès la conception.

Les défis techniques

1. Empêcher le double-booking sous charge

C'est le cœur du problème. Une simple vérification de disponibilité avant insertion ne suffit pas : entre la lecture et l'écriture, un autre utilisateur peut réserver le même créneau. J'ai résolu ce problème de concurrence avec un verrou consultatif PostgreSQL (advisory lock) qui sérialise la création de créneaux par ressource. Deux demandes simultanées sur la même ressource sont traitées l'une après l'autre — jamais de collision, même en pic de charge.

2. Contrôle d'accès et traçabilité

Le workflow de modération (approbation, rejet motivé, annulation) est scoppé par groupe de ressources : un modérateur n'agit que sur son périmètre. Chaque action est inscrite dans un journal d'audit complet, indispensable dès qu'on parle de ressources sensibles ou partagées.

3. Authentification flexible

L'application supporte au choix l'authentification locale (email / mot de passe) et le SSO Google OAuth2 — on peut activer l'un, l'autre, ou les deux selon le contexte de déploiement.

Fonctionnalités clés

  • File d'attente : quand un créneau est plein, les utilisateurs s'inscrivent en liste d'attente et sont notifiés automatiquement dès qu'il se libère.
  • Check-in & auto-libération : les créneaux non confirmés sont libérés automatiquement après un délai configurable, via des commandes console planifiées (cron).
  • Abonnement iCal : chaque ressource expose un flux calendrier (.ics) pour Outlook, Google Agenda ou Thunderbird.
  • Notifications email à chaque étape (confirmation, approbation, rejet, rappel).
  • Interface moderne : back-office EasyAdmin, front Tailwind v4 + DaisyUI avec thème clair / sombre, internationalisation FR / EN.

La stack

Symfony 7.4 (LTS), PHP 8.4, Doctrine ORM 3.6, PostgreSQL 16, EasyAdmin 5, Symfony UX (Turbo + Stimulus), FullCalendar, et spatie/icalendar-generator pour les flux iCal.

Ce que ce projet démontre

La capacité à concevoir une application fiable en environnement concurrent, à intégrer la sécurité et la traçabilité dès l'architecture, et à livrer un produit complet, documenté et open-source — de la base de données jusqu'à l'expérience utilisateur.