Aller au contenu principal
Physio Xpert, SaaS médical pour kinésithérapeutes
En cours
SAAS

Étude de cas

Physio Xpert, SaaS médical pour kinésithérapeutes

Plateforme de rééducation en production, conçue et développée en solo pour des kinésithérapeutes. Un bilan clinique lève des alertes médicales, ces alertes déterminent les exercices prescrits, et chaque séance ajuste la difficulté selon la tolérance du patient. Une API Java/Spring Boot, un back-office praticien Next.js et une application mobile patient React Native sur iOS et Android.

Durée
Depuis septembre 2025
Équipe
1 personne
Statut
En cours
Partager sur TwitterPartager sur LinkedInPartager sur FacebookCopier le lien
Voir le site

En chiffres

4 658

Tests automatisés

API Java, exécution vérifiée

310

Routes API

Toutes sous /api/v1

HDS

Hébergement

Scalingo, région France

Le contexte

Physio Xpert est une plateforme de rééducation destinée aux kinésithérapeutes, en production sur app.physio-xpert.com. Le praticien fait passer un bilan clinique, la plateforme en déduit des alertes médicales, ces alertes déterminent les exercices prescrits, et le patient exécute ses séances depuis une application mobile en signalant sa tolérance à chaque exercice.

J’ai conçu et développé l’ensemble seul depuis septembre 2025 : l’API, le back-office praticien, l’application mobile patient, le schéma de données, l’hébergement et la chaîne de tests. Trois contraintes expliquent à peu près toutes les décisions techniques qui suivent.

La logique clinique doit évoluer sans redéploiement. Les critères d’alerte suivent la pratique, pas les cycles de release : ils vivent en données, modifiables par les praticiens eux-mêmes depuis le back-office.

Ce sont des données de santé. Hébergement certifié, chiffrement, consentement explicite et traçabilité des accès forment un cadre réglementaire qui se pose à la conception, pas à la livraison.

Un seul développeur, sur la durée. Chaque brique doit rester compréhensible et modifiable par une seule personne dans cinq ans, ce qui exclut autant la sur-ingénierie que le raccourci.

La chaîne de décision clinique

C’est la pièce à comprendre en premier : tout le reste de l’architecture existe pour que cette chaîne soit juste, traçable et modifiable sans redéploiement.

Du bilan clinique à la séance suivante

praticien

Bilan clinique

Passation d'un bilan dont le contenu est configuré, pas codé.

plateforme

Moteur de décision

Les réponses sont confrontées aux critères cliniques en vigueur.

plateforme

Alertes médicales

Red flags (contre-indication) et yellow flags (vigilance).

plateforme

Prescription d'exercices

Les alertes filtrent et pondèrent le programme proposé.

patient

Séance guidée

La séance est exécutée sur mobile, avec retour de tolérance.

Le retour de tolérance renourrit la progression : la séance suivante est ajustée à la hausse, maintenue ou allégée. C'est une boucle, pas un tunnel : un même patient repasse par ce cycle à chaque séance.

Deux propriétés de cette chaîne ont structuré le reste du travail. D’abord, un maillon est configuré, pas codé : un praticien fait évoluer ses bilans et ses critères d’alerte sans que je déploie quoi que ce soit. Ensuite, la sortie du dernier maillon revient dans le premier : la progression n’est pas une fonction pure d’un bilan initial, c’est une machine à états qui accumule l’historique du patient.

Le point de départ, et pourquoi il a changé

Le produit n’a pas démarré sur la pile qu’il porte aujourd’hui. La première version était un MVP React + Supabase : une base managée, l’authentification et les règles d’accès fournies par la plateforme, et un front qui parlait directement à cette base. Pour valider la chaîne de décision clinique auprès de praticiens, c’était le chemin le plus court, et il a rempli son rôle.

Ce qui a mis fin à ce montage n’est pas une limite technique, c’est le cadre réglementaire. Dès que la plateforme manipule des dossiers patients réels, l’hébergement doit être certifié HDS, et la donnée de santé impose un consentement horodaté, une rétention explicite et un journal d’accès complet. Ces exigences se posent au niveau du serveur qui répond à chaque requête, pas d’un client. Un front qui interroge la base directement n’a nulle part où les faire tenir.

La migration n’a donc pas été un déplacement de code, c’est une réécriture totale du moteur de l’application. Tout ce qui vivait dans Supabase, le schéma, les règles d’accès et la logique de décision clinique, a été réécrit derrière une API Java / Spring Boot sur un PostgreSQL hébergé chez Scalingo, seul point d’entrée des deux clients. Ce qui est resté, c’est l’interface : le back-office praticien est toujours en React, et c’est l’ajout de l’application mobile patient qui a étendu la partie front plutôt qu’il ne l’a remplacée.

Mener cette bascule seul, sur un produit déjà utilisé, a été le morceau le plus formateur du projet. Elle explique aussi la forme actuelle de l’architecture : si les deux interfaces ne parlent qu’à l’API, c’est parce que l’inverse a été essayé et ne pouvait pas tenir sur des données de santé.

Les choix techniques

API

Java et Spring Boot

Typage fort de bout en bout et écosystème dont la maintenance et la documentation seront encore là dans dix ans : deux propriétés qui comptent davantage que la concision sur un produit de santé.

Découpage

Monolithe modulaire, un seul processus

Chaque module métier a sa frontière, vérifiée au build : une dépendance interdite casse la compilation au lieu de partir en revue. L'isolation des microservices, sans leur coût d'exploitation pour une équipe d'une personne.

Logique clinique

Configurée, pas codée

Bilans et critères d'alerte sont de la donnée versionnée, éditée depuis le back-office et applicable immédiatement. Le produit cesse de dépendre de mes cycles de release.

Hébergement des données

Sortie de Supabase, base hébergée derrière l'API

Le MVP interrogeait Supabase depuis le front. Consentement horodaté, rétention et journal d'accès se posent côté serveur : la conformité HDS a imposé de rapatrier le schéma et les règles d'accès derrière l'API.

Mobile

React Native et Expo

L'application patient affiche des exercices et collecte un retour de tolérance : rien qui exige du natif. Une base de code pour iOS et Android divise par deux la surface à maintenir.

L’architecture qui en découle

Vue d'ensemble
Scalingo · certifié HDS · région Francemigrations versionnéesécriture systématiqueBack-office praticienNext.js · React · TypeScriptApplication patientReact Native · iOS et AndroidAPI REST versionnéeJava · Spring Boot · monolithe modulairePostgreSQLschéma versionné · dossiers chiffrésJournal d'accèschaque lecture de dossier tracée
Faites défiler le schéma horizontalement.
Les deux interfaces ne parlent qu'à l'API : aucune n'accède à la base.

Les 310 routes de l’API vivent toutes sous /api/v1. Le back-office et l’application mobile se mettent à jour à des rythmes différents, et une application installée sur un téléphone ne se redéploie pas d’un git push : le versionnement de l’API n’est pas une précaution théorique.

Ce que la chaîne de tests couvre

Travailler seul change la méthode : sans relecteur, la seule chose qui peut contredire un raisonnement, c’est un test. La couverture n’est donc pas répartie uniformément : elle est concentrée là où une erreur silencieuse aurait des conséquences cliniques ou réglementaires.

Golden

Progression et charge d'entraînement

La pièce la plus sensible : c'est elle qui décide si un patient monte en charge ou lève le pied. Elle est verrouillée par des corpus de référence rejoués à chaque exécution, dont un couvrant 19 440 transitions. Toute divergence casse la suite ; le nouveau comportement attendu doit être justifié explicitement.

Unitaire

Évaluation des critères cliniques

Chaque opérateur de comparaison et chaque combinaison de réponses doit produire l'alerte attendue, y compris sur les cas dégradés : réponse absente, valeur hors bornes, critère référençant une question retirée du bilan.

Intégration

Autorisation, route par route

L'autorisation est déclarée explicitement sur chaque route plutôt que déduite de la présence d'un jeton. Un test par route vérifie qu'un praticien étranger au dossier est refusé, pas seulement qu'un utilisateur authentifié est accepté.

Intégration

Persistance et migrations

Les tests tournent contre un vrai PostgreSQL démarré en conteneur, pas contre une base en mémoire qui accepterait des requêtes que la production refuse. Le schéma est reconstruit depuis zéro à chaque exécution : une migration qui ne rejoue pas est détectée avant la mise en ligne.

Intégration

Cycle de vie RGPD

Recueil et retrait du consentement, suppression douce, purge effective au terme de la rétention, complétude du journal d'accès. Ce sont des exigences vérifiables : elles sont vérifiées.

E2E

Parcours back-office

En navigateur réel : connexion, création de dossier, passation d'un bilan, lecture des alertes levées, prescription. Le parcours complet, pas des écrans isolés.

Build

Frontières entre modules

Les dépendances autorisées entre modules métier sont déclarées et vérifiées à la compilation. Un raccourci pris un vendredi soir ne compile pas.

Le volume n’est pas l’argument, même s’il se cite volontiers : 4 658 tests sur l’API, dont j’ai vérifié l’exécution réelle plutôt que le simple décompte. L’argument, c’est qu’aucune de ces zones ne peut changer de comportement en silence.

Ce que les données de santé imposent

La conformité n’est pas une couche ajoutée avant la mise en ligne, c’est une série de contraintes posées dans les premières migrations. Le consentement est une donnée explicite et horodatée, pas une case cochée ; la suppression est douce, avec une rétention de 30 jours ; chaque lecture de dossier patient est journalisée. Ces exigences appartiennent au schéma parce qu’un journal d’accès ajouté après coup laisse un trou historique impossible à combler. L’hébergement suit la même logique : la plateforme tourne chez Scalingo, certifié HDS, en région France. Une certification est un prérequis légal, arbitré avant d’être un choix d’infrastructure.

Le même principe s’applique aux dépendances externes. Un outil de supervision remonte volontiers un nom ou une réponse clinique dans un contexte d’erreur : les données sensibles sont donc masquées avant tout envoi, à la source plutôt qu’au filtrage.

Où en est le produit

La plateforme est en production et continue d’évoluer : une API de 310 routes couverte par 4 658 tests, un back-office praticien, une application mobile patient sur iOS et Android, et un hébergement chez Scalingo, certifié HDS, en France, le tout maintenu par une seule personne.

L’ouverture aux patients reste devant nous. C’est aussi pourquoi cette page ne cite aucune métrique d’usage : il n’y en a pas encore, et un chiffre de volume mis à la place ne mesurerait que ce que j’ai produit.

Le pari central se vérifie sur la durée : les praticiens font évoluer leurs bilans et leurs critères d’alerte sans passer par moi. C’est exactement ce que le moteur de décision devait rendre possible.

Ce qu’en dit le client

Missionné pour le développement et la mise en conformité du MVP de notre application santé (React + Supabase), il a fait preuve d'une rigueur technique et d'une autonomie remarquables sur un sujet exigeant : une app de rééducation manipulant des données de santé, avec toutes les contraintes de sécurité et de conformité que cela implique. […] Nathan a été un véritable partenaire de construction sur ce projet, pas seulement un prestataire. Je recommande sans réserve.
Nicolas, kinésithérapeute libéralAvis client, 29 août 2026

L'interface

Accueil de l'application patient, avec ses dossiers en cours et la séance du jour
Liste des dossiers du patient, un par zone du corps, chacun démarrant par un bilan
Check-in du matin, avec les curseurs de raideur, de douleur et de qualité du sommeil
Étape de préparation de la séance, matériel disponible et positions tenables
Séance générée, sept exercices adaptés à la phase en cours
Écran de progression du patient, avec les phases franchies et l'évolution de la douleur

L'application patient ouvre sur la séance du jour et le parcours en quatre phases

Un dossier par zone du corps, et chacun commence par un bilan clinique

Le retour de tolérance du matin : il ajuste automatiquement l'intensité de la séance

Avant de prescrire, la séance demande le matériel disponible et les positions tenables

La séance produite par le moteur, adaptée à la phase, à la durée et au matériel déclarés

La progression se lit phase par phase, alimentée par le retour de tolérance du patient

1 / 6

Leçons apprisesLeçons apprises

Design

La conformité est une contrainte de conception

Design

Sur des données de santé, consentement, traçabilité et rétention se posent dans le schéma dès les premières migrations. Ajoutés après coup, ils laissent des trous qu'aucun correctif ne comble.

Design

Configurer plutôt que coder ce qui bouge

Design

La logique clinique évolue au rythme de la pratique, pas des releases. L'exprimer en données plutôt qu'en code rend le produit autonome de son développeur.

Process

Seul, le test remplace le relecteur

Processus

Sans binôme pour contredire un raisonnement, la suite de tests devient le seul garde-fou. Elle mérite le même soin que le code qu'elle protège.

Navigation

Articles

Projets

Actions