
ProfMatch
Défi Informatique · équipe de 4Affecte les professeurs aux cours à partir de leurs CV, avec une justification lisible pour chaque proposition.
- Next.js
- FastAPI
- PostgreSQL
- Celery
- Docker
Applications métier et SaaS
Mon but : que ce qui arrive en production soit ce qui avait été demandé.
Le code de six d'entre elles est public. SafeOttawa et ZenGadget restent ouvertes, sans compte.

Affecte les professeurs aux cours à partir de leurs CV, avec une justification lisible pour chaque proposition.

Rendez-vous multi-cliniques : la réception et les patients réservent les mêmes créneaux, sans double réservation possible.

Itinéraires les plus sûrs pour piétons et cyclistes, à partir des données ouvertes de la Ville d'Ottawa.
Faites en propre conçues, livrées et exploitées depuis septembre 2024
Gestion d'interventions terrain, multi-locataire, avec une migration SQL Server vers PostgreSQL sans interruption.
Une description dictée à la voix devient un devis PDF structuré, unités et taux de TVA validés.
Transforme un échange client en publications à valider ; le fournisseur d'IA se remplace sans réécrire l'application.
Boutique en ligne bilingue, seize pages, sans serveur ni base de données.
Deux plateformes livrées à des clients nommés chez Jant Tech, à Dakar, de l'analyse à la mise en production.
Jant Tech, Dakar · 2022 – 2024 · développeur full-stack · logiciel d'entreprise, non public

Souleymane a rejoint Jant Tech en 2022 et a travaillé trois ans sur nos plateformes clientes.
Sur la plateforme de gestion des opérations de la Nouvelle Minoterie du Sénégal, il a livré l'intégralité du périmètre défini avec le client, de l'approvisionnement en blé jusqu'à la livraison de la farine. Il a modélisé le suivi de production par équipe, une contrainte que peu de développeurs prennent au sérieux : dans une usine qui tourne vingt-quatre heures, un relevé saisi la nuit doit tomber dans le rapport du bon poste.
Jant Tech, Dakar · 2022 – 2024 · analyste fonctionnel, puis développeur · logiciel d'entreprise, non public

J'ai encadré techniquement Souleymane sur la plateforme comptable de notre client distributeur de carburants, une trentaine de stations-service.
Ce qui m'a marqué d'abord, c'est qu'il a commencé par le métier : avant d'écrire une ligne, il a conduit le recueil du besoin auprès du service comptable et rédigé les spécifications fonctionnelles, cinq modules et une matrice de droits couvrant neuf rôles, du directeur général aux agents comptables.
Il ne sépare pas ces deux moments : il spécifie en sachant qu'il devra exécuter, et il développe en sachant pourquoi la règle existe. C'est ce qui manque le plus souvent chez un développeur de son ancienneté.
Défi Informatique 2026, Collège La Cité · équipe de 4 · 3 semaines




Un service des ressources humaines reçoit des CV en PDF et doit affecter des professeurs à des cours. L'application lit les CV, propose les affectations selon quatre critères pondérés, et porte une justification lisible sur chaque recommandation.
Le tri se fait à la main : quelqu'un lit chaque CV, en retient des compétences, les rapproche des cours à pourvoir. C'est long, ce n'est pas reproductible, et personne ne peut expliquer six mois plus tard pourquoi telle personne a obtenu tel cours.
La commande vient du service des ressources humaines du Collège La Cité. Trois semaines, quatre développeurs. J'ai proposé le cadre le premier jour, commits conventionnels, branches protégées, revues obligatoires, parce qu'à quatre sur trois semaines, ce qui n'est pas posé au début ne se pose plus.
Le front est servi par Vercel sous profmatch.soultaka.com, l'API a tourné en conteneurs sur un serveur que j'administre, derrière son propre nom et son certificat. Migrations de schéma versionnées, file de tâches et cache séparés du service web, intégration continue sur chaque poussée.
La démonstration publique n'était pas une copie d'écran : chaque visiteur obtenait son propre espace, alimenté, effacé au bout d'une heure, et limité à quelques espaces par visiteur. Les données de l'établissement, elles, restaient en lecture. Le serveur est en pause depuis le 27 septembre 2026 ; le code est public.
Le modèle rate la section « Profil » des CV alors qu'elle est bien présente, et ce champ alimente le critère sémantique, qui est donc calculé sans lui. Une perte de qualité silencieuse, la pire espèce.
Les routeurs de gestion courante sont peu couverts par les tests, malgré les 83 % globaux : la couverture dit la moyenne, pas où sont les trous.
Et l'historique du dépôt me crédite de la quasi-totalité des commits alors que nous étions quatre : j'intégrais le travail de l'équipe, et ça ne se lit pas dans les statistiques.
Une question sur ProfMatch ? Écrire
Lauréat InnovaCode 2026



Les outils de navigation optimisent le temps ou la distance. Aucun ne dit à un piéton que l'intersection suivante concentre trois fois plus de collisions que la précédente. SafeOttawa transforme 94 406 collisions publiées par la Ville en itinéraires classés par risque.
Un piéton et un cycliste ne cherchent pas le trajet le plus court, mais celui dont ils reviendront. La Ville d'Ottawa publie ses collisions ; personne ne les met entre les mains de qui traverse.
94 406 collisions deviennent 1 895 zones à risque, et ces zones deviennent un coût que le calcul d'itinéraire additionne au kilomètre.
Front servi par Vercel sous safeottawa.soultaka.com, certificat automatique, calcul d'itinéraire par un moteur OSRM et fond de carte OpenStreetMap.
La chaîne a été rejouée en ligne, y compris un signalement rejeté avec sa raison : une validation qui n'a jamais refusé quoi que ce soit n'est pas une validation.
Ni tests ni analyse statique sur ce projet. C'est un prototype de fin de semaine qui a survécu, et ça se voit : il a gagné un concours, il n'a pas de filet.
Un prix ne rend pas un dépôt propre. Si SafeOttawa devait servir tous les jours, la première semaine passerait à écrire ce qui manque.
Une question sur SafeOttawa ? Écrire
Projet intégrateur · équipe de 3 · 205 tests automatisés



Une clinique coordonne ses rendez-vous entre le téléphone, un agenda papier et un tableur. La réception détient le seul agenda qui fait foi. Deux personnes peuvent vendre la même place en même temps.
Le médecin ne voit pas sa journée sans la demander. Le patient ne peut rien réserver lui-même. Et une annulation se perd en route : le créneau libéré n'est presque jamais réutilisé.
Projet intégrateur, équipe de trois. J'ai porté le socle technique et intégré les branches des deux autres. Sur un projet d'équipe, l'intégration est souvent la part que personne ne veut prendre.
Front sous mediplan.soultaka.com, API en conteneurs sur un serveur que j'administre, migrations de schéma versionnées, intégration continue verte. Serveur en pause depuis le 27 septembre 2026 ; le code est public.
La démonstration donnait à chaque visiteur sa propre clinique, alimentée, effacée au bout d'une heure, avec les trois rôles, administration, médecin, patient, sans se reconnecter.
Le jeton vit dans le stockage local du navigateur, sans jeton de rafraîchissement ni liste de révocation : un compte désactivé garde l'accès jusqu'à l'expiration, au plus une heure.
Huit erreurs d'accessibilité subsistent sur des éléments cliquables non atteignables au clavier. Et la police d'icônes pèse 3,9 Mo à elle seule : le paquet initial dépasse le budget que je m'étais fixé.
Une question sur MediPlan ? Écrire
Projet personnel · 2026



Plusieurs entreprises de maintenance utilisent le même logiciel sans jamais se voir. Le cloisonnement tenait en HTTP et tombait dans le canal temps réel, et c'est le genre de défaut qu'aucun écran ne montre.
Une entreprise de maintenance suit ses interventions au téléphone et sur papier. Le logiciel doit servir plusieurs entreprises à la fois, et aucune ne doit jamais apercevoir les données d'une autre.
C'est un projet personnel, donc le sujet était choisi : je voulais l'isolation multi-locataire, parce que c'est là que les erreurs coûtent le plus cher et se voient le moins.
Front sous techmaint.soultaka.com, API en conteneurs sur le serveur que j'administre, canal temps réel authentifié. Serveur en pause depuis le 27 septembre 2026 ; le code est public.
La démonstration était la preuve de l'architecture : le bac à sable du visiteur n'est pas un dispositif ajouté, c'est le filtre du produit qui le rend possible. Deux bacs simultanés n'ont aucun identifiant commun.
Le suivi de position des techniciens est une simulation pilotée depuis le navigateur : il n'y a aucune source GPS réelle. Le canal temps réel, lui, fonctionne et transporte de vraies diffusions ; c'est la donnée qui est simulée.
Le géocodage est hors service depuis que la clé de l'API cartographique a expiré. Il n'y a ni limitation de débit ni jeton de rafraîchissement, la logique métier vit encore dans les contrôleurs, et aucune liste n'est paginée.
Une question sur TechMaint ? Écrire
Projet personnel


Un artisan du bâtiment rédige ses devis à la main ou dans un tableur : chaque ligne, chaque unité, chaque taux. C'est long, et l'erreur d'arrondi se paie chez le client. Ici, il décrit les travaux à voix haute et relit un devis structuré.
Le devis est le premier document que le client voit d'un artisan. Il est écrit le soir, après la journée de chantier, et c'est là que les erreurs entrent.
L'application prend la parole comme elle vient, une description parlée, et rend une structure : lignes, unités, quantités, taux, totaux.
Front sous devis-btp.soultaka.com, API sur le serveur que j'administre, rendu PDF côté serveur. Serveur en pause depuis le 27 septembre 2026 ; le code est public.
La chaîne complète a été rejouée en ligne : inscription, devis, PDF.
Le canal temps réel fonctionne et il est authentifié, mais aucun écran ne l'utilise : j'ai construit une capacité avant son usage.
Le schéma de base n'est pas versionné par des migrations, ce qui va tant que je suis seul dessus, et plus du tout dès qu'on est deux.
Une question sur Devis BTP ? Écrire
Projet personnel · compte requis




Transformer un appel client enregistré en publications, sans réécrire ce que le client a dit. Le fournisseur d'IA a changé en cours de route, et l'application n'a pas eu à changer.
Un indépendant qui vend ses services parle mieux qu'il n'écrit. L'appel client contient déjà les mots justes : les objections, les angles, le ton.
L'application ingère la conversation, en extrait ce qui a été dit, et propose des publications, sans jamais présenter comme une citation ce qui n'en est pas une.
Front sous growth-engine.soultaka.com, API et file de tâches sur le serveur que j'administre, authentification par jeton vérifié côté serveur. Serveur en pause depuis le 27 septembre 2026 ; dépôt privé, accès sur demande.
La chaîne complète a été rejouée en ligne : inscription, connexion, huit gabarits chargés, session tenue par cookie.
La transcription audio n'est pas disponible : la dépendance pèse deux gigaoctets et je ne l'ai pas embarquée. C'est un arbitrage, pas un oubli, et il est écrit dans le dépôt.
Il n'y a pas d'ordonnanceur : les publications planifiées attendent qu'on les déclenche. Une capacité annoncée par l'écran doit exister derrière, ou disparaître de l'écran.
Une question sur Growth Engine ? Écrire
Travail de cours · équipe de 3



Une boutique complète, seize pages, deux langues, un panier qui survit au rafraîchissement, sans serveur ni base de données. La contrainte était l'énoncé du cours ; elle est devenue l'exercice intéressant.
Travail de cours en programmation web avancée, en équipe de trois : une boutique complète, sans backend ni base de données.
Tout l'état vit donc dans le navigateur. Le panier doit survivre au rafraîchissement, le thème et la langue aussi, sans provoquer d'incohérence au premier rendu, le défaut classique d'une page pré-rendue qui découvre les préférences après coup.
Servi par Vercel sous zengadget.soultaka.com. Aucune fonction serveur, aucune base : le site entier est un ensemble de pages pré-rendues, installable comme application.
Les tests vérifient la présence des choses, pas leur comportement : ils cassent sur un renommage et laissent passer un vrai défaut. C'est le pire rapport entre le coût et la garantie.
Et le contenu produit n'est pas traduit, seule l'interface l'est. Une boutique bilingue dont les fiches ne le sont pas est bilingue à moitié.
Une question sur ZenGadget ? Écrire
Je commence par le métier. Sur la plateforme comptable du distributeur de carburants, j'ai recueilli le besoin auprès du service comptable et rédigé les spécifications, cinq modules et neuf rôles, avant d'écrire une ligne. Puis je développe ce que j'ai spécifié, je mets en production et j'exploite : les sept applications de cette page ont été conteneurisées, servies sous TLS et déployées en intégration continue par moi.
Par des tests automatisés qui tournent à chaque livraison, 205 sur MediPlan, 448 sur ProfMatch avec 83 % de couverture, et par des revues de code en équipe. Chaque étude de cas se termine par ce que je referais autrement : ce qui a été raté est écrit, pas caché.
Quatre des sept sont solo. ProfMatch, MediPlan et ZenGadget ont été livrées en équipe de trois ou quatre, et avant cela j'ai passé deux ans dans l'équipe d'un éditeur à Dakar, sur deux plateformes livrées à des clients nommés.
C# et .NET avec Angular, trois ans en entreprise. Ensuite React, Next.js, Python et FastAPI sur mes propres applications. Le besoin, le modèle de données et les tests ne dépendent d'aucune pile.
Une autre question ? Écrire
Un poste à pourvoir, une question sur une application, ou l'envie de vérifier une chose écrite plus haut : écrivez-moi. Je réponds sous 24 heures.
souleymane.diallo.tech@gmail.comMontréalfrançais et anglais