Le covoiturage où l’on ne monte qu’avec ses collègues.
Une application de covoiturage en cercle fermé pour le personnel des maisons de repos belges. Une infirmière ne voit que les trajets publiés depuis son propre établissement — jamais un inconnu, jamais un profil venu d’ailleurs. Ce n’est pas un réglage de confidentialité : le cercle est appliqué dans la base de données, en français, en néerlandais et en anglais, de jour comme à trois heures du matin.
- IOS ET ANDROID
- CERCLE FERMÉ
- TROIS LANGUES
- SUPABASE · RLS
- STRIPE CONNECT
- MODE NUIT
- BACK-OFFICE
01 — Le cercle
Le cercle est fermé dans la base, pas dans l’écran.
Une collègue rejoint son établissement à l’inscription, et ne voit ensuite que les trajets publiés depuis cet établissement. Ce n’est pas un filtre appliqué à une liste : c’est la forme du schéma, et une requête qui sortirait du cercle ne renvoie rien.
Une clé de tenant sur chaque ligne
Trajets, demandes, avis, messages, conversations, signalements et notifications portent tous un identifiant d’établissement dénormalisé. Un établissement appartenant à un seul groupe, cette égalité indexée suffit à décrire le cercle entier — sans jointure ligne à ligne.
La clé publique voyage dans l’application
La clé anonyme est livrée dans le bundle : n’importe qui peut l’extraire. Elle n’est sûre que parce que la Row Level Security de PostgreSQL est active, et c’est pour cette raison que l’isolation vit dans la base plutôt que dans le code de l’écran.
Un établissement doit être revendiqué
Publier et rejoindre exigent une maison de repos réellement revendiquée, pas un nom saisi à la volée. Le cercle a donc une porte, et cette porte a un propriétaire.
La conséquence est assumée
Un compte sans établissement voit une application vide. Il n’existe aucun fil global à parcourir, et ce vide est le produit qui fonctionne, pas une panne.

02 — Le rôle
Conductrice le lundi, passagère le mardi — en même temps.
La plupart des applications de covoiturage demandent de choisir un mode. Une infirmière qui conduit le lundi et monte avec quelqu’un le mardi est les deux dans la même semaine, donc le mode ne pouvait que cacher la moitié de ses engagements. Il a été supprimé.
Le rôle appartient au trajet
On est conductrice de celui de lundi et passagère de celui de mardi, simultanément. C’est le verbe qui déclare le rôle : publier fait la conductrice, rejoindre fait la passagère.
Le mode cachait ce qu’il fallait traiter
En mode passager, le trajet qu’elle avait elle-même publié disparaissait de l’accueil, et l’onglet qui contenait les demandes reçues perdait son bouton de navigation : la demande d’une collègue n’avait plus aucun chemin pour être vue.
Et il ne survivait pas au redémarrage
Le rôle n’était persisté nulle part — ni sur l’appareil, ni en base. Chaque lancement à froid le remettait silencieusement sur passager, pendant que le tunnel d’inscription promettait de pouvoir en changer à tout moment.
Quatre onglets fixes pour tout le monde
Trajets, Recherche, Messages, Profil, plus un bouton Publier satellite. Rien n’apparaît, ne se déplace ni ne change de sens selon la personne — ce que les guides d’Apple comme de Google demandent, et que le mode enfreignait.

03 — La vérification
Un badge, et non une porte.
Le matricule d’une collègue est vérifié contre le registre du personnel fourni par l’employeur. Pendant un temps, tant que cette vérification n’avait pas abouti, elle ne pouvait ni publier ni rejoindre. C’était défendable pour un déploiement négocié avec un employeur. Pour une application publique, la règle se refermait sur elle-même.
La chaîne bouclait sur rien
Pas de registre chargé, donc personne de vérifié ; personne de vérifié, donc personne ne publie ni ne rejoint ; personne ne publie, donc il n’y a rien à parcourir. Or un registre est un livrable de l’employeur — l’ingénierie ne peut pas le produire.
Le glossaire avait raison depuis le début
« Collègue vérifié » y est défini comme un badge de confiance depuis sa rédaction. C’est la règle en base qui avait dérivé, dans une migration qui l’avait transformée en autorisation. Une migration l’a ramenée à ce que le glossaire disait.
Personne, chez Progix, ne peut juger un matricule
Le back-office proposait d’accorder la vérification à la main. Une collègue saisit le numéro 44182 ; un opérateur le regarde et n’a aucun moyen de savoir s’il est réel — c’est précisément pourquoi le registre existe. Ce chemin manuel a été retiré.
Ce qu’il reste est instantané
Un matricule correspond au registre de son groupe, ou il n’y correspond pas. Aucune file d’attente, aucune décision humaine. Sans registre chargé, personne n’est vérifié dans ce groupe — un coût réel, accepté en connaissance de cause, et supportable uniquement parce que le badge n’ouvre plus aucune porte.

04 — L’argent
La carte est prise au moment où l’on demande, pas quand on accepte.
Le passager participe aux frais, plafonné par l’employeur. La question qui décide de tout n’est pas le montant : c’est le moment exact où la carte est réellement débitée — et la première implémentation avait répondu de travers.
Le défaut, mesuré et non supposé
Le paiement était créé dans l’acceptation de la conductrice. Le passager n’est pas à l’écran à ce moment-là et l’application n’a aucune surface pour saisir une carte : l’intention partait sans moyen de paiement et rien ne la confirmait jamais. Rejoué contre le vrai compte le 26 juillet 2026, le résultat tenait en une ligne — montant reçu : zéro.
Et le grand livre y croyait
Le code ne relisait pas ce statut. Il décrémentait la place et écrivait deux écritures — un paiement au débit du passager, un gain au crédit de la conductrice — pour de l’argent qui n’avait pas bougé et ne bougerait jamais.
Autoriser en rejoignant, capturer en acceptant
La carte est autorisée là où le passager se trouve, au moment où il demande sa place, et n’est capturée que si la conductrice accepte. Une demande refusée ou expirée libère l’autorisation sans jamais avoir prélevé.
Le plafond protège le modèle
Le partage des frais est vérifié côté serveur à la publication, jamais dans le client. C’est ce plafond qui garde le trajet dans le partage de frais plutôt que dans le transport commercial — et donc le paiement hors du champ des licences qui iraient avec.
La commission vaut zéro, et c’est une valeur
Le taux est un réglage unique en base, à 0 % aujourd’hui : le montant revient intégralement à la conductrice. Le portefeuille suit les mouvements en double entrée, dans un journal qui ne s’écrit qu’en ajout.

- 88
- décisions d’architecture écrites, datées et opposables
- 30
- écrans, de l’inscription au portefeuille
- 3
- langues, l’application entière et pas seulement l’interface
- 228
- fichiers de test automatisés
Comptage direct des fichiers sources, dépôt ProgixDev/rijdsamen au commit 4081187 (25 août 2026). Aucune donnée d’usage n’est publiée : elle appartient au client.

