Dorian Laroche Faleu · Développeur web et mobile · Buea, Cameroun

Je construis des produits
qui tiennent en production.

Étudiant en troisième année à l'Université de Buea et développeur chez Cestad Consulting. Quatre projets que j'ai conçus tournent aujourd'hui en ligne. Deux ont été livrés à un client allemand : une place de marché qui encaisse des paiements et émet des factures conformes, et une plateforme d'examen pour une certification technique allemande. Les deux autres sont mes produits : une plateforme SaaS multi-clients que des agences revendent sous leur marque, et une solution de commerce mobile ouverte à quatre-vingt-trois pays.

Projets en production
4
Livrés en Allemagne
2
Tests automatisés
327
Pays desservis
83

Projet client · Allemagne

Studenten-Jobportal

Une place de marché à deux faces, développée pour un client allemand : des particuliers et des entreprises publient une mission, des étudiants postulent, la plateforme encaisse, prélève sa commission et reverse. Conception et développement complets, du schéma de base de données à la mise en ligne. En ligne sur studenten-jobportal.de.

  • Next.js 15
  • React 19
  • TypeScript
  • Supabase
  • Stripe Connect
  • PostgreSQL
Page d'accueil de Studenten-Jobportal

Le site est en ligne : studenten-jobportal.de

Le problème

Un étudiant qui cherche quelques heures payées et un particulier qui a besoin d'aide pour un déménagement se trouvent difficilement. Les petites annonces ne garantissent ni le paiement, ni l'identité, ni le recours en cas de litige. Les deux camps prennent un risque qu'aucun des deux n'a les moyens d'assumer.

Ce que j'ai construit

Publication guidée

Un tunnel en cinq étapes calcule le coût en temps réel, catégorie par catégorie, et enregistre un brouillon à chaque étape. Une entrée « Sonstiges » dans chaque famille laisse décrire un besoin que le catalogue n'a pas prévu.

Paiement séquestré

Stripe Connect en charges destinées : le client paie, l'argent n'est reversé à l'étudiant qu'après validation. Les webhooks sont idempotents — un même événement rejoué ne crée jamais un second virement.

Coordonnées masquées

Adresses e-mail, téléphones et liens restent invisibles dans la messagerie tant que la réservation n'est pas confirmée. Sans cela, les deux parties contournent la plateforme et personne n'est plus couvert.

Facturation conforme

Factures PDF générées en mémoire avec les mentions du § 14 UStG : TVA à 19 %, date de prestation, numérotation continue. Aucun binaire externe, donc aucun hébergeur exclu.

Vérification d'identité

Pièce d'identité et certificat de scolarité déposés dans un espace privé, contrôlés à la main. Une photo de profil est exigée des étudiants : qui entre chez quelqu'un montre son visage.

Administration complète

Quinze écrans : modération, attribution, remboursements, litiges, rédaction du blog, journal d'audit. Chaque action sensible exige un motif écrit et laisse une trace.

Trois décisions techniques

Trois couches d'autorisation, pas une

Le middleware filtre les routes, des gardes serveur vérifient chaque action, et les politiques RLS de PostgreSQL rejouent les mêmes règles dans la base. Une faille dans une couche ne suffit donc pas : la base refuse ce que le code aurait laissé passer.

Des machines à états, pas des booléens

Missions, candidatures et réservations suivent des transitions déclarées et testées. L'interface n'affiche un bouton que si la transition est permise — elle ne propose jamais ce que le serveur refuserait.

L'argent en entiers

Les montants sont stockés en centimes, les taux en pour mille. Aucun flottant ne touche à un euro : une commission de 12,5 % s'écrit 125, et le total recalculé donne toujours le même résultat.

Qualité

169tests unitaires — tarification, permissions, transitions, factures
29tests de bout en bout, parcours complet client ↔ étudiant
298pages générées au build, sans erreur
0erreur TypeScript, mode strict

Contraintes allemandes

Le marché visé impose ses propres règles, et les ignorer coûte cher. Le site respecte le salaire minimum en vigueur, affiche un Impressum conforme au § 5 DDG, applique le droit de rétractation, prévoit les déclarations fiscales des plateformes (PStTG) et héberge ses données à Francfort — aucun transfert hors Union européenne à documenter.

Projet client · Allemagne

TGA-Planung

Une plateforme d'apprentissage pour les professionnels allemands du génie technique du bâtiment. Son cœur est un simulateur d'examen conforme à la norme DIN 14675, qui régit les installations d'alarme incendie et d'alarme vocale — un domaine où la certification conditionne le droit d'exercer. En ligne sur tga-elektrotechnik.de.

  • Next.js
  • React

Le problème

Se préparer à une certification DIN 14675 se fait à coups de classeurs et de questionnaires papier. Le candidat révise sans jamais savoir où il en est : il découvre ses lacunes le jour de l'examen, quand il est trop tard. Et les supports existants sont dispersés entre normes, notices de fabricants et documents internes d'entreprise.

Ce que j'ai construit

Simulation d'examen chronométrée

Soixante-dix questions, quatre-vingt-dix minutes — les conditions réelles de l'épreuve. Le chronomètre fait partie de l'exercice : réviser sans contrainte de temps ne prépare pas à l'examen que l'on passe.

Aucune inscription exigée

Le candidat lance une simulation immédiatement, sans créer de compte. Chaque formulaire d'inscription placé avant la valeur fait partir des visiteurs — et impose des obligations sur des données que rien n'oblige à collecter.

Correction immédiate

Le résultat tombe à la fin de la série, question par question. Un test dont on ne connaît pas la correction n'apprend rien ; c'est la justification de la réponse qui fait progresser.

Deux domaines séparés

Électrotechnique et génie climatique ont leurs propres parcours. Un technicien qui prépare une certification n'a pas à traverser la matière d'un métier voisin pour trouver la sienne.

Base de connaissances et articles

Une section de fond et des articles techniques accompagnent les simulations. C'est aussi ce qui rend le site trouvable : les praticiens cherchent des réponses précises, pas une page de présentation.

Boutique intégrée

Une section marchande avec panier complète la plateforme, adossée au même socle que le reste du site — pas une boutique externe greffée, donc une seule identité visuelle et aucun second outil à maintenir.

Conformité allemande

Le site présente un Impressum et une déclaration de protection des données, tous deux accessibles depuis le pied de page — les deux pages qu'un site commercial destiné au marché allemand doit rendre disponibles.

Produit · Plateforme SaaS multi-clients

LeadKlar

Une plateforme que des agences web revendent sous leur propre marque : chacune ouvre un espace par client final, y dépose les informations de ce client, et pose une balise sur son site. L'assistant répond aux visiteurs à partir de ces seules informations, les qualifie, recueille leurs coordonnées avec consentement, et passe la main à un humain dès qu'il n'a pas de réponse validée. Conception et développement complets. En ligne sur www.leadklar.com.

  • Next.js 16
  • React 19
  • TypeScript
  • Supabase
  • PostgreSQL RLS
  • Stripe
  • Resend

Le problème

Une agence web sait vendre un site, pas construire une infrastructure conversationnelle. Et les assistants génériques du marché ont un défaut rédhibitoire pour ses clients : ils inventent. Un tarif approximatif ou une condition de financement imaginée engage l'entreprise qui affiche l'assistant, pas l'éditeur qui l'a fourni.

Ce que j'ai construit

Refus d'inventer

L'assistant ne répond qu'à partir de fragments validés, qu'il cite. Sans source, il l'admet et propose un conseiller plutôt qu'une approximation. Vérifié en production : interrogé sur un financement absent de sa base, il refuse de le confirmer.

Cloisonnement strict

Agences et espaces clients sont isolés par des politiques RLS appliquées dans la base elle-même. Une agence qui demande l'espace d'une autre reçoit un 404, pas une page vide : l'existence même de la ressource ne lui est pas révélée.

Widget embarquable

Une seule balise à coller. Le script fait 5 Ko, sans dépendance, et n'ouvre l'iframe qu'au premier clic. Les origines autorisées sont déclarées par espace : une balise copiée sur un autre site ne s'affiche pas.

Consentement avant collecte

Aucune coordonnée n'est enregistrée sans accord explicite du visiteur, horodaté. Les empreintes d'adresse IP sont tronquées puis hachées : suffisant pour limiter les abus, insuffisant pour réidentifier une personne.

Facturation et droits

Abonnements Stripe avec webhooks signés, quotas d'espaces par palier, et ouverture manuelle d'accès pour les accords réglés par virement. Un impayé referme les droits sans supprimer les données.

Supervision

Journal d'audit horodaté, suivi du coût de traitement par espace avec plafond journalier, webhooks sortants signés et leur journal de livraison, relance automatique des échecs.

Trois décisions techniques

La réponse est contrainte par un schéma, pas découpée après coup

La sortie n'est pas du texte libre que l'on analyse ensuite : elle est contrainte à un schéma JSON côté serveur. Le degré de confiance, les fragments cités et la demande de transfert humain sont des champs typés, pas des phrases à interpréter.

Le widget vit dans une iframe, servie par mon domaine

Le CSS du site hôte ne peut pas l'atteindre, et ses appels restent de même origine. L'autorisation d'affichage est portée par l'en-tête frame-ancestors, calculé par requête selon les origines déclarées pour cet espace.

Le coût est mesuré à chaque réponse

Jetons consommés, latence et coût estimé sont enregistrés message par message. Un plafond journalier par espace coupe la dépense avant qu'un site à fort trafic ne la fasse déraper — le tarif ne dépend pas de la bonne volonté du visiteur.

Vérifications

404renvoyé sur l'espace d'une autre agence, aucune fuite
0divulgation sous injection de prompt, testée en production
14routes API, dont deux tâches planifiées
5 Kole script embarqué chez le client final

Produit · Commerce mobile, 83 pays

BAOBAY

Une plateforme où un commerçant ouvre sa boutique en ligne en trente minutes, depuis son téléphone : il dépose ses produits, partage un lien, et reçoit les commandes sur WhatsApp. Chaque boutique porte le logo, la couleur et le nom de son propriétaire — pas ceux de la plateforme. Conception et développement complets, du modèle de données à la mise en ligne. En ligne sur baobay.org.

  • FastAPI
  • Python 3.13
  • SQLAlchemy 2
  • PostgreSQL
  • Jinja2
  • CSS sans framework
  • Pillow
  • Campay

Le problème

Au Cameroun, le commerce se fait sur WhatsApp. Le vendeur publie ses articles en photo, le client demande chaque prix un par un, envoie sa commande en texte libre, et le vendeur recopie tout à la main. Les solutions existantes coûtent le prix d'un site sur mesure — hors de portée de quelqu'un qui vend des vêtements ou des repas.

Ce que j'ai construit

Une vitrine qui est la sienne

Le commerçant choisit une couleur ; toutes les nuances en sont dérivées avec un contraste vérifié, jusqu'à la teinte de la barre du navigateur. Son nom est le titre de l'onglet, son logo le favicon. La plateforme n'apparaît qu'en pied de page.

Tarif selon le pays

L'abonnement suit le pouvoir d'achat du marché, pas un taux de change : 5 000 FCFA au Cameroun, 1 000 shillings au Kenya, 14,90 € en France. Un prix unique converti serait inabordable ici et dérisoire ailleurs.

Paiements du pays

Soixante-douze moyens de paiement, proposés dans l'ordre d'usage local : M-Pesa d'abord au Kenya, Pix au Brésil, UPI en Inde. Proposer « Visa » en premier à Nairobi serait aussi incongru que proposer M-Pesa à Paris.

Aperçu vivant à la création

Pendant que le commerçant remplit le formulaire, une maquette de sa vitrine se construit à côté : le nom, l'adresse, le logo et la couleur s'y appliquent en direct, calculés par le serveur — jamais par une seconde formule qui divergerait.

Images traitées à l'arrivée

Réduction côté serveur, au point de passage unique de tout envoi : 1,8 Mo devient 247 Ko. L'orientation EXIF est appliquée, et les coordonnées GPS que les téléphones inscrivent dans les photos sont retirées avant publication.

Alerte de commande

Un son, un bandeau et un compteur sur le titre de l'onglet — ce que voit un commerçant passé sur WhatsApp. La notification à distance exigerait une entreprise vérifiée ; c'est la meilleure alerte possible sans aucun document.

Trois décisions techniques

Les montants en unité mineure de leur devise

Chaque somme est un entier dans la plus petite unité de sa monnaie : centimes pour l'euro, francs pour le FCFA qui n'a pas de subdivision. Cette règle a permis d'ouvrir à soixante et une devises sans réécrire une seule ligne de données existante — le FCFA n'ayant pas de décimale, les montants déjà enregistrés restaient exacts.

Un référentiel plutôt que des colonnes

Les moyens de paiement étaient cinq booléens — MTN, Orange, Airtel, carte, livraison. Ils sont devenus des codes texte adossés à un catalogue de quatre-vingt-trois pays. Ajouter M-Pesa ne demande plus de migration de base, et la conversion depuis les anciennes colonnes se fait boutique par boutique, sans réécriture massive.

La suppression est logique, jamais physique

Une boutique supprimée disparaît du public et du plan du site, mais ses commandes et ses paiements restent en base. Les effacer priverait le commerçant de ses justificatifs en cas de litige et briserait les références de sommes déjà encaissées et comptabilisées.

Qualité

129tests, verts à chaque livraison
83pays, 61 devises, 72 moyens de paiement
85 %de poids en moins sur les images stockées
0dépendance JavaScript côté client

Ce que le terrain a imposé

Le produit visait un marché où la connexion est chère et le téléphone est le seul ordinateur. Les photos sont donc réduites dans le navigateur avant l'envoi, et de nouveau sur le serveur pour que rien n'y échappe. L'interface reste utilisable sur un écran de 320 pixels, et l'encaissement peut se faire à la main tant que l'immatriculation nécessaire aux agrégateurs de paiement n'est pas obtenue — une contrainte réglementaire locale qui décide du calendrier bien plus que la technique.

Savoir-faire

Ce que je sais faire

Interface

  • React 19, Next.js 15 (App Router, Server Components)
  • TypeScript strict
  • Tailwind CSS, Radix UI
  • Accessibilité : navigation clavier, ARIA, contrastes
  • Responsive, du mobile 320 px au grand écran

Serveur

  • Server Actions, validation Zod
  • PostgreSQL, Row Level Security
  • Supabase (base, authentification, stockage)
  • Sessions signées HMAC-SHA256
  • Limitation de débit, journal d'audit

Intégrations

  • Stripe Connect, webhooks signés et idempotents
  • Resend — e-mails transactionnels, SPF, DKIM, DMARC
  • Génération de PDF (pdf-lib)
  • Géocodage, recherche par rayon

Assistants conversationnels

  • Sorties contraintes par schéma JSON
  • Réponses ancrées sur des sources citées
  • Transfert humain plutôt qu'approximation
  • Résistance à l'injection de prompt
  • Mesure du coût par réponse, plafonds de dépense

Méthode

  • Vitest, Playwright
  • Git, déploiement continu
  • SEO technique : sitemap, données structurées, pages locales
  • RGPD : droit à l'effacement, minimisation, consentement

Parcours

Qui je suis

Je suis en troisième année à l'Université de Buea, au Cameroun, et je travaille comme développeur web et mobile chez Cestad Consulting. Je conçois et réalise des applications de bout en bout : le schéma de la base, la logique métier, l'interface, les tests, puis la mise en ligne.

Ce qui m'intéresse dans un projet, ce n'est pas d'empiler des écrans, mais de faire tenir les règles : un paiement qui ne part qu'une fois, une autorisation que la base refuse même si le code se trompe, une facture qui reste conforme quand la loi l'exige.

Je travaille à distance, pour des clients européens comme africains. Je suis ouvert aux missions freelance et aux collaborations longues.

Ce que je livre

Les trois produits présentés plus haut ont été menés seul, de la modélisation de la base jusqu'à la mise en ligne : schéma et politiques de sécurité, logique métier, interface, tests, déploiement continu, nom de domaine et messagerie transactionnelle. Dans chaque cas, ce sont des systèmes qui manipulent de l'argent ou des données personnelles — le genre de code où une erreur se voit.

Voir mes prestations et tarifs →

Contact

Parlons-en

Une question sur le projet, une proposition, une collaboration : écrivez-moi, je réponds sous un jour ouvré.