Robert Sodjinou

Ingénieur logiciel — systèmes métier où l'erreur coûte cher.

Je conçois et construis des systèmes où une erreur se paie : santé, comptabilité en partie double, conformité réglementaire, applications qui doivent fonctionner sans réseau. Deux piles back-end, Laravel et NestJS, avec React côté interface. Je travaille à distance, en sous-traitance pour des agences et des éditeurs européens.

ronasdev@gmail.com WhatsApp LinkedIn GitHub YouTube

Disponible 5 jours par semaine · octobre 2026

Spécialité
Systèmes métier à forte contrainte
Back-end
Laravel (PHP) · NestJS (TypeScript)
Interface
React · React Native · Electron
Données
PostgreSQL · MySQL · Prisma
En production
Depuis 2021 · clients européens et africains
Travail
À distance · fuseau UTC+1
Langues
Français · anglais professionnel

Réalisations

UPINC-IMS — système d'information hospitalier

Universal Polyclinic, Libéria · en production

La contrainte

Sept métiers — réception, médecins, infirmiers, laboratoire, pharmacie, caisse, administration — travaillant sur les mêmes dossiers patients. Et pas d'internet fiable. Une clinique ne s'arrête pas parce que la connexion tombe.

La décision

Une application de bureau, une base PostgreSQL sur un poste serveur, les postes connectés par le réseau local. Le contrôle d'accès est posé sur chaque point d'entrée de l'API, pas seulement dans l'interface : masquer un bouton n'a jamais protégé une donnée.

Ce que ça tient

La clinique tourne coupée du monde. Chaque action est attribuée à quelqu'un, et « qui a consulté ce dossier » a une réponse.

Le poste laboratoire d'UPINC-IMS
Le poste laboratoire : la file de travail, l'état de chaque analyse, et l'étape de validation avant qu'un résultat devienne officiel. À gauche, les douze modules — un par métier.

Electron · React · PostgreSQL · Knex · JWT — back-end en migration d'Express vers NestJS

Amayo.fr — un SaaS construit de zéro, et exploité

amayo.fr · 2 038 utilisateurs · en production depuis le 15 septembre 2026

La contrainte

Un logiciel de gestion de contenu en direct pour les églises : projection sur écrans, sorties vidéo vers OBS et vMix, Bible, chants, abonnements Stripe, temps réel. Il sert le dimanche matin, en direct, devant une assemblée — un écran noir ne se rattrape pas à midi.

La décision

Conception et développement complets : l'API, la base, l'interface, le temps réel, la facturation, et une application de bureau distincte que les églises installent dans leur régie pour diffuser sur leurs écrans physiques. Puis une mise en production traitée comme une opération : inventaire de la base ligne à ligne — il a montré que l'administration affichait « 94 abonnés Stripe » là où il y en avait 33 — répétition générale sur une base jetable, runbook minuté, point GO / NO-GO, retour arrière possible en cinq minutes, et une règle de conduite : une seule personne tape, une autre relit et coche.

Ce que ça tient

Deux mille utilisateurs, un millier de sessions actives, des abonnements qui se renouvellent. Et je l'exploite au quotidien : supervision, incidents, migrations, évolutions. Cinq pannes certaines ont été attrapées avant l'ouverture — dont un webhook Stripe dont la signature n'aurait jamais été valide, et dont personne ne se serait aperçu avant des semaines.

La console de régie d'Amayo
La console de régie : à gauche ce qui est préparé, à droite ce qui est projeté sur l'écran de l'assemblée. Entre les deux, un bouton — et aucun droit à l'erreur.

NestJS 11 · Prisma 6 · PostgreSQL 16 · React 18 · Socket.IO · Electron · Stripe · Vitest · Playwright · Docker

Vimaiz — garder le contrôle d'un logement à distance

vimaiz.com · entretien de logements en location saisonnière, France

La contrainte

Un propriétaire loue son logement à plusieurs centaines de kilomètres. Entre deux voyageurs, quelqu'un doit y entrer, le préparer, et repartir. Un intervenant absent, un logement pas prêt, une anomalie découverte trop tard — et le propriétaire l'apprend par le voyageur suivant.

La décision

Rendre vérifiable ce que personne n'a pu voir. Aucun intervenant ne reçoit de mission tant que ses documents ne sont pas validés. Arrivée, début, durée, liste de contrôle et anomalies sont enregistrés, et il faut trois photos avant, trois après, géolocalisées — sans elles, la mission ne peut pas se clore. L'intervenant n'est pas choisi à la main : un score pondéré décide, après des filtres d'éligibilité stricts. Et le paiement est idempotent : une mission déjà liée à un identifiant Stripe n'est jamais recréée.

Ce que ça tient

Le propriétaire absent voit ce qu'il a payé, horodaté et localisé. L'intervenant a de quoi se défendre. Un litige a une procédure, pas un formulaire de contact. Et l'argent ne sort pas tout seul : un retrait crée une transaction en attente que l'administration valide.

La demande d'intervention sur Vimaiz
La demande d'intervention : logement, créneau, surface, et l'estimation affichée avant tout engagement.

Laravel 12 · Inertia 2 · React 19 · Filament · Stripe Payment Intent · Reverb · Leaflet

Pécule — une comptabilité où l'on ne peut pas créer d'argent

Mutuelle d'épargne et de crédit · système propre

La contrainte

Cotisations, prêts, remboursements, intérêts. Chaque franc doit être justifiable des années plus tard, devant des membres qui comptent.

La décision

Comptabilité en partie double : aucun solde n'est stocké comme une valeur modifiable. Un solde est toujours la somme de ses écritures. On ne peut structurellement pas créer d'argent, parce qu'il n'existe aucun chemin de code pour écrire un montant sans sa contrepartie.

Ce que ça tient

Tout écart s'explique en remontant les écritures. Une erreur ne se corrige pas en modifiant le passé : elle se contre-passe, et les deux restent visibles — parce qu'un membre a le droit de voir qu'on a corrigé, et pourquoi.

L'espace membre de Pécule
Chaque mouvement laisse une écriture équilibrée, horodatée, impossible à effacer. Débit égale crédit, toujours.

Laravel · PostgreSQL · React

Kajou — synchroniser sans jamais perdre un kilo

Collecte d'anacarde, Bénin · hors ligne d'abord

La contrainte

L'agent pèse la récolte sous un hangar et paie le producteur en espèces, sur place. Il n'y a pas de réseau. Un producteur payé deux fois, ou pas payé, c'est un conflit dans un village — pas un ticket de support.

La décision

On synchronise des opérations, jamais des états. Chaque pesée est un fait immuable, et rejouer une opération n'a aucun effet. Le serveur ne croit ni l'horloge ni le calcul de l'appareil : il recalcule. Et aucun conflit ne se résout automatiquement — « le dernier qui écrit gagne » est une façon élégante de perdre les kilos d'un paysan. Tout cas ambigu crée une tâche d'arbitrage, les deux versions côte à côte.

Ce que ça tient

Un appareil peut rester hors ligne des jours, tomber en panne, être remplacé : rien ne se perd et rien ne se compte deux fois. Un trou dans la séquence est détecté au lieu d'être ignoré.

L'écran de pesée de Kajou, hors ligne
La pesée sous le hangar, sans réseau : sacs, poids brut, prix appliqué, montant à remettre. Le bordereau s'imprime sur place.

NestJS · PostgreSQL · React · PWA hors ligne · IndexedDB

Attesta — prouver qu'aucune facture n'a bougé

Conformité de facturation électronique · EN 16931

La contrainte

Une administration ne demande pas de montrer les factures. Elle demande de prouver qu'aucune ne manque et qu'aucune n'a été modifiée. Deux questions distinctes, deux pièges distincts.

La décision

Deux mécanismes séparés. La numérotation s'incrémente sous verrou de ligne, dans une transaction qui s'annule si la validation échoue : une facture refusée ne consomme pas de numéro. L'intégrité repose sur un chaînage d'empreintes calculé sur une forme canonique du modèle, pas sur le fichier XML — sinon une mise à jour de bibliothèque réordonne un attribut et toutes les factures deviennent « altérées » d'un coup.

Ce que ça tient

Le contrôle rend un verdict binaire et désigne la première pièce en défaut, pas les trois cents suivantes qui n'en sont que la conséquence. Une facture modifiée directement en base, en contournant l'application, est détectée.

Une facture validée dans Attesta
Une facture validée, ses champs normalisés selon la norme européenne, et l'empreinte qui prouve qu'elle n'a pas bougé depuis.

NestJS · PostgreSQL · TypeScript strict · signature et chaînage d'empreintes

Également : Supreme Music (Laravel) · Relève, moteur de planification sous contraintes — 16 règles métier, 411 tests, 28 invariants vérifiés contre PostgreSQL · RonasDev, chaîne technique et formation de développeurs depuis 2021.

Ce que je fais bien

Travailler avec moi

PrestationTarif
Journée de développement, en sous-traitance150 €
Journée d'architecture, de conception ou d'audit200 €
Forfait projetdès 1 000 €
Accompagnement technique mensuel600 € / mois

Écrire

ronasdev@gmail.com

WhatsApp +229 01 60 93 48 17 LinkedIn GitHub YouTube

Dites en trois lignes ce que vous construisez et ce qui coince. Je réponds sous 24 heures ouvrées.