01Vue d'ensemble
Sur ces neuf mois, le travail a couvert l'ensemble du cycle de vie d'un produit logiciel : conception de la base de données, développement du back-end et des interfaces, déploiement chez le client, formation des équipes utilisatrices et support terrain. Cinq systèmes ont structuré la majorité du temps ; un livrable plus ponctuel complète le tableau.
Le fil conducteur de ces projets : des applications PHP/MySQL orientées métier (restauration, hôtellerie, santé, gestion commerciale, prospection, transport), développées et maintenues en responsabilité individuelle pour la plupart, avec une montée en gamme progressive vers des stacks plus modernes — Spring Boot, Flutter, React/TypeScript — sur le projet InterUrbain. Chaque fiche qui suit présente le projet dans le même ordre : à quoi il sert, comment il est construit, ce qui a été livré concrètement, puis les points utiles à connaître pour qui reprend le code.
02XFood
XFood — gestion restaurant & hôtellerie
Plateforme PWA multi-tenant de gestion pour restaurants et résidences hôtelières : commandes, cuisine, caisse, réservations de villas, boutique en ligne, fidélité et marketing.
Contexte
XFood répond à un besoin concret des restaurants et résidences hôtelières partenaires : remplacer la prise de commande papier et les allers-retours entre salle, cuisine et caisse par un flux numérique unique, consultable en temps réel par chaque poste. Le client final scanne un QR code sur sa table (ou dans sa villa), commande depuis son téléphone sans rien installer, et l'établissement suit la commande de bout en bout depuis un panneau d'administration unique. La même base de code sert aussi bien un restaurant qu'une résidence avec hébergement, ce qui explique la présence des deux univers — restauration et hôtellerie — dans un seul produit.
Acteurs et rôles
Sept profils utilisent le système, un côté client et six côté personnel de l'établissement — chacun avec un écran taillé pour son poste plutôt qu'un panneau générique unique :
| Acteur | Espace | Ce qu'il fait dans le système |
|---|---|---|
| Clientconvive / résident | Interface publique (PWA) | Scanne le QR code de sa table ou de sa villa, consulte le menu ou la boutique, commande et paie sans rien installer, réserve une villa via un formulaire multi-étapes, suit ses points de fidélité et laisse un avis. |
| Serveurserveur | Espace Serveur | Crée et gère les commandes prises en salle, suit les réservations, marque les commandes comme servies une fois délivrées en table. |
| Cuisinecuisine | Écran Cuisine | Visualise en temps réel les commandes entrantes avec alerte sonore, fait progresser chaque commande (en préparation, prête) sans autre saisie que le changement de statut. |
| Caissiercaissier | Espace Caisse | Consulte les commandes à encaisser, traite les paiements, imprime les tickets et factures, sort les totaux de recette par période (jour, semaine, mois, période personnalisée). |
| Réceptionnistereception | Espace Réception | Gère le check-in des villas, les réservations hôtelières et les codes WiFi remis aux résidents, coordonne le service en chambre. |
| Adminadmin | Panneau d'administration | Gère le menu (catégories, plats, prix), les villas et chambres, les promotions, les campagnes SMS et notifications, les avis clients, et consulte le tableau de bord statistique. |
| Super Adminsuper_admin | Panneau d'administration | Accès total incluant la configuration système et la gestion des comptes du personnel — seul profil habilité à créer les autres comptes internes. |
Architecture
L'application est structurée en trois zones : un panneau d'administration (admin/)
en PHP procédural où chaque rôle du personnel (serveur, cuisine, caissier, réceptionniste,
admin) a son propre écran ; une API REST (api/, une vingtaine de points d'entrée
JSON) qui sert de pont entre la base de données et le reste ; et une interface client
(user/) en HTML/CSS/JS pur, installable comme une application (PWA), avec un
Service Worker qui met en cache les pages statiques mais exclut volontairement toutes les
routes d'API pour ne jamais servir de données périmées hors ligne. La synchronisation entre
la cuisine, la salle et la caisse se fait par Server-Sent Events — un flux serveur→navigateur
qui pousse les nouvelles commandes en direct, avec un système de sondage (polling) en secours
si la connexion se coupe.
Chaque déploiement client est une copie de cette même base, avec sa propre base de données et ses propres réglages (menu, tarifs, villas le cas échéant). Il n'y a pas aujourd'hui de mécanisme central qui propage un correctif à tous les clients à la fois — une évolution du cœur de produit demande de la répercuter manuellement sur chaque déploiement, un point important pour la suite (voir plus bas).
Fonctionnalités livrées
- Gestion de commandes temps réel — sur place, à emporter, livraison — avec statuts synchronisés entre serveur, cuisine et caisse
- Écran cuisine avec alertes sonores et flux d'affichage dédié
- Caisse avec filtres de période, totaux de recette, tickets et factures A4
- Réservations de villas (5 unités) avec formulaire multi-étapes, codes WiFi et interface réception
- Boutique e-commerce intégrée avec panier persistant
- Programme de fidélité à paliers (Bronze → Platine), avec règles métier réelles (seuils, fusion de comptes par téléphone)
- Marketing : promotions configurables, campagnes SMS, notifications push ciblées
- Commande par QR code par table ou par villa, détection automatique à l'ouverture
- Tableau de bord statistique : ventes, meilleurs plats, prévision de fréquentation par moyenne historique glissante
Déploiement et accompagnement client
Au-delà du code, ce projet a représenté une part importante de travail terrain : installation et configuration chez chaque client (écrans, QR codes, accès réseau), formation des équipes (serveurs, cuisine, caisse, réception), assistance en cas d'incident de connexion, et suivi de campagnes ponctuelles — par exemple le suivi des scans QR pour Dolce Vita. Le produit est aujourd'hui déployé et actif chez :
03MediNova
MediNova — plateforme de gestion médicale
Plateforme web médicale multi-portails (patient, médecin, réception, centre d'appels, administration), avec dossier patient informatisé, module urgences, assistant vocal IA et centre d'appels téléphonique intégré. Né comme projet de mémoire, repris et développé comme produit XNOVA en production.
Contexte
MediNova est une plateforme de gestion médicale complète, née comme projet de fin d'études puis reprise et développée comme solution XNOVA à part entière, déployée en production. L'objectif est de donner à un centre médical un outil unique qui couvre tout le parcours de soin — de la prise de rendez-vous jusqu'au compte-rendu de consultation — pour tous les métiers présents dans une clinique : patients, médecins, personnel d'accueil, centre d'appels et administration. Chaque catégorie d'utilisateur a son propre espace, avec ses propres écrans et ses propres droits.
Acteurs et rôles
Le système distingue nettement qui peut faire quoi. Sept profils sont définis en base de données, dont deux niveaux d'administration :
| Acteur | Espace | Ce qu'il fait dans le système |
|---|---|---|
| Patientpatient | /user | Prend, modifie et annule ses rendez-vous ; consulte et met à jour sa fiche (identité, assurance) ; échange par messagerie avec son médecin ; reçoit des rappels par notification ; consulte son dossier médical et ses ordonnances ; laisse un avis après consultation ; peut aussi réserver ou être orienté par la voix via l'assistant IA. |
| Médecindoctor | /medecin | Consulte son planning du jour et déclare ses absences ; ouvre le dossier et l'historique de chaque patient ; rédige le compte-rendu de consultation, les prescriptions et les résultats d'examens ; signe ses documents avec un tampon numérique ; discute avec ses patients par messagerie ; s'il est de garde aux urgences, prend en charge les patients de la file d'attente. |
| Réceptionnistereceptionist | /reception | Crée et réaffecte des rendez-vous rapidement, gère la file d'attente à l'accueil ; aux urgences, admet un patient dans la file de garde — y compris un patient anonyme ou inconscient — et ajuste son niveau de gravité au fil de son état. |
| Centre d'appelscallcenter | /accueil | Prend les rendez-vous par téléphone pour des patients qui n'utilisent pas l'application ; peut aussi signaler un passage aux urgences (par exemple l'arrivée annoncée d'une ambulance). |
| Administrateuradmin | /admin | Gère les comptes et les droits des utilisateurs, les services médicaux et motifs de consultation ; consulte les statistiques d'activité et le journal d'audit ; envoie des notifications ciblées et publie les actualités de la clinique. |
| Super administrateursystem_admin | /admin | Seul profil habilité à modifier l'identité visuelle de l'application (nom, logo, couleur, coordonnées de contact) — un réglage global qui s'applique à toutes les pages sans toucher au code. |
| Qualitéqualite | /admin | Profil de suivi de la qualité de service, avec accès aux mêmes outils de reporting et d'audit que l'administration. |
Architecture
L'application est un back-end PHP natif (aucun framework, une seule dépendance externe :
la librairie minishlink/web-push pour les notifications) qui expose 36 points
d'API JSON, consommés par les cinq portails ci-dessus. Chacun est une PWA installable, avec
son propre écran de connexion. La base de données centralise aussi les réglages d'identité
visuelle (app_settings) : nom de l'application, logo, couleur principale —
modifiables depuis l'espace super-administrateur sans toucher au code, et appliqués côté
client via un composant JS qui remplace les textes au chargement de chaque page.
Deux intégrations tierces étendent l'application au-delà du web classique : Vapi, un
service d'assistant vocal IA, permet à un patient de prendre ou annuler un rendez-vous en
parlant simplement à voix haute ; Twilio gère un serveur vocal interactif (IVR) pour
la prise de rendez-vous par téléphone classique, pour les patients sans smartphone. Ces deux
services sont appelés depuis des points d'API dédiés (api/vapi/, api/twilio_*)
plutôt qu'intégrés au cœur de l'application, ce qui limite l'impact si l'un des deux services
tiers change ou doit être remplacé.
Fonctionnalités livrées
- Rendez-vous : prise, modification, annulation, planning médecin, gestion des absences
- Dossier patient : coordonnées, assurance, historique, photo
- Dossier Patient Informatisé (DPI) : compte-rendu de consultation, prescriptions, résultats d'analyses biologiques, examens d'exploration fonctionnelle (ECG, EMG, EEG, endoscopie), documents signés et tamponnés numériquement par le médecin, consultables par le patient depuis son espace
- Messagerie médecin ↔ patient liée au suivi de consultation
- Notifications push pour les rappels de rendez-vous
- Assistant vocal IA (Vapi) : prise de RDV et consultation de créneaux par la voix
- Centre d'appels IVR (Twilio) pour la prise de rendez-vous téléphonique
- Module Urgences : admission express (y compris patient anonyme), file d'attente triée par gravité puis par heure d'arrivée, prise en charge par le médecin de garde, alerte sonore à chaque nouvelle admission
- Identité visuelle personnalisable : nom, logo, couleur, sans redéploiement de code
- Avis patients, journal d'audit, statistiques d'activité, actualités de la clinique
Le module Urgences mérite une explication à part : il a été conçu spécifiquement parce que le fonctionnement normal de MediNova repose sur un rendez-vous planifié à l'avance, ce qui n'a pas de sens pour un patient qui arrive sans prévenir. Le service dispose donc de son propre circuit — admission express par la réception (avec prise en charge des cas anonymes ou non identifiés grâce à des champs facultatifs et un calcul automatique d'âge approximatif), file d'attente triée par gravité clinique plutôt que par ordre d'arrivée, et un tableau dédié pour le médecin de garde qui n'a pas besoin d'un planning horaire pour être considéré disponible : être connecté suffit.
Comptes de démonstration
Chaque acteur dispose d'un compte de test dédié pour accéder directement à son espace.
04InterUrbain
InterUrbain — digitalisation du transport routier interurbain
Marketplace de réservation de trajets interurbains, composée de quatre dépôts : une API centrale, une application mobile voyageur, un dashboard transporteur et un dashboard d'administration plateforme. Le projet le plus large en diversité technique de la mission.
Contexte
InterUrbain vise à digitaliser la réservation de trajets en bus entre villes, sur le modèle d'une place de marché : un voyageur compare et réserve un trajet auprès de la compagnie de son choix, chaque compagnie de transport gère ses propres lignes et gares depuis son espace, et la plateforme XNOVA supervise l'ensemble (compagnies, trajets, réservations). C'est le projet le plus large en diversité technique de la mission : il réunit une API back-end, une application mobile grand public, et deux interfaces web de gestion distinctes, développées en autonomie sur les quatre dépôts.
Acteurs et rôles
Trois acteurs se partagent la plateforme, chacun avec sa propre application dédiée — c'est la raison pour laquelle le projet compte quatre dépôts distincts plutôt qu'une seule application avec des permissions internes :
| Acteur | Application dédiée | Ce qu'il fait dans le système |
|---|---|---|
| VoyageurCLIENT | App mobile (Flutter) | Recherche et compare des trajets entre villes, choisit son siège, règle son paiement, reçoit un reçu électronique et un QR code de billet, consulte l'historique de ses réservations, cumule des points de fidélité, note son trajet après le voyage. |
| Compagnie de transportTRANSPORTEUR | Dashboard Transporteur (web) | Fait enregistrer sa compagnie sur la plateforme (validation par l'admin), déclare ses gares, crée et modifie ses trajets et leurs disponibilités, consulte les réservations reçues sur ses lignes, répond ou consulte les avis laissés par ses voyageurs, suit ses statistiques d'activité. |
| Administrateur plateformeADMIN | Dashboard Admin (web) | Valide l'inscription des nouvelles compagnies de transport, supervise l'ensemble des compagnies, voyageurs, trajets et gares actifs sur la plateforme, consulte les réservations tous acteurs confondus, gère le scoring/évaluation des compagnies, ajuste les réglages globaux de la plateforme. |
Architecture
Le back-end est une API Spring Boot classique en couches (entités, dépôts, services, contrôleurs), avec une authentification par jeton JWT qui distingue les trois rôles ci-dessus. Le modèle de données couvre les compagnies, les trajets, les gares, les réservations, les paiements, les avis et le programme de fidélité. L'API est documentée via Swagger, ce qui permet à n'importe quel front (mobile ou web) de découvrir les points d'entrée disponibles sans lire le code source du back-end. Les trois applications front — mobile voyageur, dashboard transporteur, dashboard admin — consomment cette même API, chacune filtrée selon son rôle.
Fonctionnalités livrées
- API : modèle métier complet (utilisateurs, compagnies, trajets, gares, réservations, paiements, avis, fidélité), authentification JWT, upload de fichiers, documentation Swagger, déploiement cloud (Railway/Render) et envoi d'e-mails transactionnels
- App voyageur (Flutter) : recherche et comparaison de trajets, sélection de siège, choix du moyen de paiement, reçus, historique, carte de fidélité, profil
- Dashboard Transporteur : gestion de la compagnie, des gares et des trajets (création, édition, liste), suivi des réservations et des avis clients avec statistiques
- Dashboard Administrateur : vue d'ensemble compagnies, voyageurs, trajets, gares, réservations, scoring et réglages globaux de la plateforme
05XGescom (SYGESCO)
XGescom — gestion commerciale multi-agences
Système de gestion commerciale pour PME/TPE structurées en réseau d'agences : ventes, stocks, caisse, approvisionnements et reporting, avec trois niveaux d'accès hiérarchiques.
Contexte
XGescom (nom de code interne : SYGESCO) répond à un besoin de PME et TPE organisées en réseau d'agences : suivre les ventes, le stock et la caisse de chaque agence individuellement, tout en donnant à l'entreprise mère une vue consolidée sur l'ensemble de son réseau. C'est une base de code existante qui a été reprise, sécurisée et modernisée durant la mission — le travail a porté autant sur l'ajout de fonctionnalités que sur la remise à niveau de la sécurité et de l'interface.
Acteurs et rôles
L'application repose sur une hiérarchie claire, chaque acteur ayant son propre espace de connexion et son propre périmètre de données — un Admin Agence ne voit jamais les chiffres d'une autre agence, et un Admin Entreprise ne voit que les agences qui lui appartiennent. Le Super Administrateur représente l'éditeur de la solution ; l'Admin Entreprise représente la direction générale du client ; l'Admin Agence est le responsable opérationnel du point de vente. Trois métiers viennent ensuite compléter l'équipe d'agence avec des accès spécifiques à leur activité : Commercial, Gestionnaire de stock et Comptable/Financier.
| Acteur | Portée | Ce qu'il fait dans le système |
|---|---|---|
| Super Adminéditeur de la solution | Toutes les entreprises | Gère les entreprises clientes, attribue les licences, définit le nombre maximal d'agences autorisées par entreprise, suspend une entreprise en cas de non-respect des conditions d'utilisation. |
| Admin Entreprisedirection générale client | Toutes les agences de son réseau | Crée et administre les agences de son réseau, centralise le suivi consolidé des activités de son entreprise, recherche la disponibilité d'un produit par code-barres ou désignation sur l'ensemble de son réseau. |
| Admin Agenceresponsable du point de vente | Son agence uniquement | Supervise les ventes, la gestion des produits, les stocks, les clients, les statistiques et les bons de livraison de son agence. |
| Commercialespace ventes | Son agence uniquement | Crée des devis, enregistre les ventes, gère les commandes, consulte les informations et les soldes de ses clients. |
| Gestionnaire de stockespace produits | Son agence uniquement | Assure les approvisionnements, le suivi des niveaux de stock, les inventaires et la gestion des alertes de rupture. |
| Comptable / Financierespace caisse | Son agence uniquement | Suit les mouvements de caisse, les règlements fournisseurs et réalise les clôtures journalières de son agence. |
Architecture
L'application n'utilise pas de framework MVC : c'est une architecture « par page »,
où chaque fichier PHP gère sa propre session, sa configuration et sa vue, et où les
formulaires soumettent leurs données en AJAX vers des scripts de traitement dédiés
(traitements/*.php) qui renvoient un simple indicateur succès/échec. La base
de données compte une trentaine de tables, migrées durant la mission du moteur MyISAM vers
InnoDB pour de meilleures garanties d'intégrité.
Fonctionnalités livrées
- Devis/proforma et facturation, avec suivi d'acompte, de solde et d'échéance
- Gestion de stock : approvisionnements fournisseurs, péremption/casse, inventaire réel
- Mouvements de caisse et clôture de caisse par agence
- Suite de reporting (une trentaine d'états) : alertes stock, top produits/clients, bilan de ventes — export PDF et format ticket
- Campagnes SMS marketing
- Refonte complète de l'interface vers un design de type SaaS premium (thème Indigo pour le Super Admin, Émeraude pour l'espace Entreprise)
- Formulaires de création déplacés en fenêtres modales, avec confirmations visuelles claires
- Recherche de disponibilité produit par code-barres ou désignation, sur toutes les agences de l'entreprise
Audit et sécurisation
Un audit de sécurité complet a été mené et corrigé de bout en bout, validé par des requêtes HTTP réelles sur les trois espaces : migration de l'authentification SHA1 vers bcrypt avec rehachage transparent à la connexion, protection CSRF sur tous les formulaires, passage à 100% en requêtes préparées PDO contre les injections SQL, échappement systématique des sorties contre les failles XSS, et validation réelle du type de fichier à l'upload (pas seulement l'extension). Un bug critique a été identifié et corrigé pendant cette phase : le fichier de configuration ne démarrait jamais la session PHP, ce qui rendait toutes les vérifications CSRF du projet silencieusement inopérantes sans qu'aucune erreur ne soit visible.
Environnement de démonstration
La plateforme est accessible en ligne à sygesco.xnova-ci.com, avec un jeu de
données réaliste (75 ventes, 35 bons de livraison, 18 devis, 20 produits, 12 clients grands
comptes) permettant de tester chaque profil dans des conditions proches de l'exploitation
réelle. Chaque acteur dispose de son propre compte de test :
/adminspace//customerspace/06XCRM Terrain
XCRM Terrain v2.7 — prospection commerciale
Plateforme de suivi de la prospection terrain jusqu'à la facturation : fiches de visite, rendez-vous, devis, factures et pipeline commercial, pour équipes commerciales mobiles.
Contexte
XCRM Terrain digitalise le travail des commerciaux qui visitent des prospects sur le terrain. Avant l'outil, une visite se traduisait par des notes éparses difficiles à centraliser et à transformer en devis, puis en facture. L'objectif du produit est de faire tenir tout le cycle de vente — de la première visite jusqu'au paiement — dans un seul outil, accessible depuis un téléphone en visite comme depuis un poste au bureau.
Acteurs et rôles
Trois profils cloisonnés se partagent l'application, avec une étanchéité stricte des données entre commerciaux :
| Acteur | Portée | Ce qu'il fait dans le système |
|---|---|---|
| Super Administrateuradmin | Toute l'équipe | Voit l'activité de tous les commerciaux, crée et gère les comptes, rédige les devis et proformas, émet les factures, suit le pipeline global des affaires. |
| Managerchef d'équipe | Son équipe | Profil hybride : suit les statistiques et le classement de son équipe tout en pouvant lui-même remplir une fiche terrain comme un commercial. |
| Commercialterrain | Ses propres visites uniquement | Saisit ses fiches terrain, qualifie ses rendez-vous, demande des devis, consulte son propre historique — sans aucune visibilité sur les données des autres commerciaux. |
Architecture
Contrairement à XGescom, ce projet est construit en MVC classique — contrôleurs,
modèles et vues nettement séparés, avec des migrations de schéma automatiques gérées
dans Database.php.
Le cœur du produit est un enchaînement métier explicite, pensé pour refléter le déroulement réel d'une vente : le commercial remplit une fiche terrain après une visite ; s'il y a un rendez-vous, il le qualifie ensuite (effectué, reporté, gagné, perdu) et peut demander un devis en un clic — ce qui déclenche une alerte visuelle immédiate côté admin ; l'admin rédige le devis, le prospect l'accepte, et une facture peut alors être émise directement à partir du devis accepté. Si le commercial marque le rendez-vous « Gagné », le devis correspondant passe automatiquement à l'état « Accepté » — une automatisation qui évite une étape de ressaisie manuelle.
Fonctionnalités livrées
- Fiche terrain : saisie structurée de la visite (entreprise, interlocuteur, besoin)
- Rendez-vous : qualification effectué/reporté/gagné/perdu, demande de devis en un clic
- Devis / proforma : rédaction par l'admin, alerte automatique sur demande en attente
- Facturation émise à partir d'un devis accepté
- Pipeline : suivi façon Kanban des affaires en négociation, gagnées, perdues
- Tableau de bord : classement des commerciaux, taux de conversion, statistiques par produit
Comptes de démonstration
07Autres livrables
Travail plus ponctuel que les cinq systèmes précédents, mais réel et déployé.
Site vitrine XNOVA refonte
Modernisation du site institutionnel de l'entreprise — celui qui présente XNOVA et ses solutions (XFood, SYGESCO…) à ses futurs clients. Le travail a porté sur un nouveau design, une intégration responsive et une mise en avant plus claire des produits maison.
08Dépôts et environnements techniques
L'ensemble du code est versionné sur GitLab. Chaque dépôt contient sa propre documentation technique (README, guides d'installation, notes d'architecture) destinée à orienter le prochain développeur sur les technologies et outils utilisés — à consulter en premier lieu avant toute intervention sur un projet.
09Compétences transverses
Le profil qui ressort de ces neuf mois n'est pas celui d'un développeur cantonné à une couche technique : c'est un profil qui suit le projet du code jusqu'à son usage réel chez le client.
Développement
- PHP (procédural & MVC), API REST
- MySQL / MariaDB, PDO, modélisation de schéma
- Java / Spring Boot, JWT, Swagger
- Flutter / Dart, Riverpod
- React / TypeScript, Vite
- PWA : Service Worker, Web Push, SSE
Déploiement & ops
- Mise en production (Hostinger, Railway, Render)
- Docker / docker-compose
- Configuration client sur site (réseau, écrans, QR codes)
- Audit et remédiation de sécurité (CSRF, XSS, injections)
Produit & terrain
- Formation des équipes utilisatrices
- Support et résolution d'incidents terrain
- Recueil de besoins et priorisation fonctionnelle
- Intégrations tierces : Twilio (IVR), Vapi (voix IA), Mapbox