ShaafVorthryss Télécharger le CV
EnglishEspañolPortuguêsFrançaisالعربية

Shaaf · Ingénieur logiciel · Royaume-Uni, en télétravail partout dans le monde

Des processus complexes. Des logiciels qui fonctionnent.

Je conçois et développe des intégrations, des outils internes et des processus intégrant l’IA. Services Python, interfaces React et traitement des données, avec des démonstrations exécutables et des résultats vérifiables.

Python · SQL · FastAPI · TypeScript · React · Ingénierie des données · Intégration IA et LLM · n8n · Docker · Linux

Du problème à la livraison, un chemin clair

Présentez le processus actuel, les outils et le résultat attendu. Nous convenons d’un premier jalon utile, puis développons selon des critères d’acceptation explicites.

Relier les systèmes métier

API, données CRM et processus récurrents. Définir la source de référence, gérer les doublons et rendre les erreurs visibles.

Créer des outils opérationnels

Outils internes, tableaux de bord et applications web avec une interface utilisable et des résultats contrôlés.

Intégrer l’IA au travail réel

Traitement de documents, recherche de connaissances et fonctions reliées aux outils, avec évaluation ciblée et documentation de prise en main.

Projets choisis

Explorez le travail. Vérifiez le résultat.

Des projets personnels, avec des données synthétiques de démonstration clairement identifiées. Découvrez le laboratoire, l’application web et les résultats de traitement des données.

JavaScript · State machine · Idempotency · Recovery

Laboratoire de reprise : provoquez une panne et inspectez la reprise

Une démonstration exécutée dans le navigateur : identité des événements, file de tâches et connecteur CRM simulé. Testez un doublon, un délai dépassé, une écriture interrompue ou une erreur permanente. Inspectez l’état et téléchargez la trace.

  • 13 tests réussis, avec détection d’états volontairement corrompus
  • 200 événements synthétiques uniques : 150 effets réussis, 50 cas à examiner, aucun effet en double
  • Le navigateur et les tests exécutent le même moteur ; code et tests téléchargeables
0effets en double dans le test de 200 événements

TypeScript · React · FastAPI · pytest · Playwright · CI

Order Desk : une application, trois stacks, une seule suite de tests

Une petite application web de commandes avec une API JSON en Python, SQLite et un front-end en TypeScript strict, reconstruite en React 19 et sur un serveur FastAPI. Les mêmes tests d’API, de base de données et de navigateur jugent chaque version.

  • Version initiale réparée : 90 tests API, base de données, navigateur et outils réussis
  • Sur une version volontairement défaillante, échouent exactement les tests qui protègent ses 6 bugs introduits, dans chaque version
  • Pipeline local reproductible : types, compilations et suites de tests ; configuration CI hébergée incluse
3 stacksTypeScript, React et FastAPI, jugés par une seule suite de tests

Python · PDF · XML · OCR · Qualité des données

Traitement de documents et de données

Jeux de données synthétiques de factures, clients et ventes transformés en résultats contrôlés. Ce sont des démonstrations avec recomptage indépendant, pas des missions clients.

  • 3 factures PDF : 11 lignes sur 11 exactes et une surfacturation de 10,00 £ signalée
  • 16 factures électroniques mexicaines et brésiliennes (CFDI, NF-e) : les 9 problèmes introduits ont tous été trouvés
  • 299 fiches clients en arabe et en anglais nettoyées, dont 242 numéros de téléphone au format international
  • 1 774 lignes de ventes brutes transformées en un rapport hebdomadaire de deux pages
10,00 £écart de 10,00 £ volontairement introduit et détecté
Une facture avant l'extractionLa même facture sous forme de lignes de tableur vérifiéesRapport hebdomadaire des ventes de deux pages

Autres projets

Python · Données web · Données structurées

Moteur de comparaison de prix

Répond en code à « quel est le prix le plus bas, et qui le vend ? » : trouve les boutiques, lit les données produit structurées, sépare les prix hors TVA et dans d'autres devises, et respecte robots.txt.

  • A répondu à une vraie question de prix au Royaume-Uni en 49 secondes, avec les 7 faits vérifiés
  • Les boutiques qui bloquaient la lecture automatique ont été signalées, jamais devinées

Python · Registres publics · Validation des données

Vérification d'entreprises à grande échelle

A vérifié une liste d'entreprises britanniques auprès de Companies House et sur leurs propres sites avant tout contact, selon les règles britanniques PECR. Les recherches dans les registres couvrent aussi la France (Sirene) et l'Australie (ABN).

  • 256 entreprises vérifiées : 132 confirmées
  • 23 adresses erronées et 4 entreprises inactives repérées avant tout contact

Python · Recherche · Sources officielles

Moteur de recherche multilingue

Recherche dans la langue de chaque pays, lit les pages et PDF officiels, note chaque source et cite chaque résultat avec son lien.

  • 6 exécutions réelles sur 6 ont passé leurs contrôles (Japon, Pologne, Brésil)

Swift · SwiftUI · macOS

Application macOS d'opérations

Une application de barre de menus qui réunit les e-mails de 3 comptes, les alertes, les validations et le travail terminé dans un seul panneau.

  • Temps de chargement du panneau e-mail ramené de 64 s à 0,6 s
  • Un autotest à la compilation appuie sur les 32 boutons : 0 échec

Debian · Docker · n8n

Serveur Linux auto-hébergé

Un serveur toujours actif avec des flux n8n, un moteur de recherche privé (SearXNG), un service de surveillance et un serveur de modèles locaux.

  • Contrôles de santé toutes les 15 minutes et un résumé quotidien
  • Watchdog testé : un service arrêté a redémarré seul en 41 s

La plateforme

Un système conçu et construit en indépendant

Un projet indépendant reliant tâches persistantes, outils, recherche documentaire et vérification. J’y étudie l’orchestration, la reprise après incident et la transformation des sorties de modèles en résultats contrôlés. Les chiffres ci-dessous proviennent d’expériences précises et enregistrées.

2 175
tests automatisés réussis, avec 0 échec, lors de l’exécution complète du 28 octobre 2026
33 s
pour reprendre le travail seule après un redémarrage complet de la machine
20 / 20
réponses aux faits intervertis repérées par sa vérification
0,49 s
réponse médiane à une question simple, contre 869 s avant
Pièce par pièce
  1. Moteur de tâches

    Transforme une demande en étapes et exécute chaque étape avec un outil. Chaque résultat est enregistré avec une somme de contrôle, si bien que toute réponse peut être rattachée à ce qui a été lu.

    Python · state machines · durable records

  2. Couche d’outils

    26 outils derrière un seul registre : recherche web, lecteurs de pages et de PDF, OCR, registres d’entreprises, prix, tableaux, fichiers et agenda. Chaque outil déclare ce qu’il peut faire, et l’envoi d’un e-mail attend la validation d’une personne.

    Plugin registry · typed parameters · approval classes

  3. Vérification des faits

    Le code extrait des enregistrements de chaque résultat d’outil. Un fait dans une réponse ne tient que si un seul enregistrement contient à la fois sa valeur et ce qu’il décrit : un chiffre interverti ou inventé est refusé.

    Typed validation · evidence binding

  4. Méthodes en code

    Quand le code peut répondre, aucun modèle n’est sollicité. La comparaison de prix, la vérification d’entreprises, les comptages et le travail sur tableaux tournent comme des méthodes fixes ; une vraie question de prix au Royaume-Uni a pris 49 secondes.

    Deterministic pipelines · structured data

  5. Recherche

    Un moteur de recherche sur 83 589 passages de documentation technique, qui combine le classement par mots-clés et les embeddings vectoriels, et un moteur de recherche qui interroge chaque pays dans sa propre langue.

    SQLite FTS5 · BM25 · embeddings · rank fusion

  6. Fiabilité

    Un superviseur relance le travail en échec avec des pauses de plus en plus longues entre les essais. Les tâches attendent la fin des coupures internet au lieu d’échouer, et arrêter, mettre en pause et reprendre s’appliquent au tour suivant.

    Supervision · back-off · durable jobs

  7. Maîtrise des ressources

    Les tâches lourdes ne démarrent que si la mémoire, la chaleur et la batterie le permettent. Si l’utilisateur lance un jeu, la tâche en cours s’efface aussitôt et reprend ensuite.

    Admission control · scheduling

Le code est privé. Je le présente en entretien et peux partager les sources sous accord de confidentialité.

Résolution de problèmes

Cas techniques enregistrés

Enquêtes techniques sélectionnées : défaillance observée, réparation et contrôles enregistrés.

Une question simple qui a pris 869 secondes

Ce que j’ai trouvé
Une question courte tapée dans l’application en pleine tâche a attendu derrière le modèle principal, occupé, et a mis 869 secondes à obtenir une réponse.
Ce que j’ai fait
Les questions sont désormais triées avant toute exécution. Les calculs et les questions sur le système reçoivent une réponse du code, et les questions courtes sans recherche vont à un petit modèle rapide.
Résultat
20 questions générales sur 20 traitées, avec une réponse médiane de 0,49 s.

Une IA incapable de trouver un prix après 24 essais

Ce que j’ai trouvé
Deviner à partir des résultats de recherche n’a jamais produit un prix qu’elle pouvait justifier.
Ce que j’ai fait
J’ai remplacé la devinette par une méthode en code : trouver les boutiques, lire leurs données produit structurées, comparer à l’identique et signaler ce qui n’a pas pu être lu.
Résultat
Une vraie question de prix au Royaume-Uni résolue en 49 secondes, les 7 faits vérifiés.

Un panneau e-mail qui abandonnait au bout de 64 secondes

Ce que j’ai trouvé
Le lecteur ouvrait chaque message en entier, un par un et sur un seul des trois comptes, alors que le panneau n’attendait que 25 secondes au plus.
Ce que j’ai fait
Ne lire que les en-têtes, un appel par compte, fusionnés du plus récent au plus ancien.
Résultat
De 64 s à 0,6 s sur les 3 comptes ; un test de régression le garantit.

Une vérification qui laissait passer des réponses interverties

Ce que j’ai trouvé
J’ai testé ma propre vérification en intervertissant des chiffres entre réponses. Les 20 réponses interverties sont passées : elle confirmait que les chiffres existaient, pas à quelle affirmation ils appartenaient.
Ce que j’ai fait
Je l’ai reconstruite autour d’enregistrements extraits par le code. Un fait ne tient plus que si un seul enregistrement contient sa valeur et ce qu’il décrit.
Résultat
0 réponse intervertie sur 20 passe.
Autres cas

Une tâche de fond qui ignorait un jeu

Ce que j’ai trouvé
Un jeu a été lancé alors qu’une tâche de fond occupait 7,6 Go de mémoire. Le nouveau travail a été retenu, mais la tâche en cours a continué jusqu’à être arrêtée à la main.
Ce que j’ai fait
La tâche en cours vérifie désormais à chaque tour et s’efface dès qu’un jeu est en cours. Cela ne compte pas comme un échec.
Résultat
La tâche s’arrête au tour suivant et reprend à la fin du jeu.

Une coupure de trois heures qui a gâché 21 essais

Ce que j’ai trouvé
Pendant une coupure internet de trois heures, le système a continué de lancer du travail : 21 essais locaux et 9 appels au cloud ont échoué sans connexion, et 13 tâches ont été marquées bloquées.
Ce que j’ai fait
Il vérifie désormais la connexion deux fois avant de lancer un travail qui a besoin d’internet. Le travail attend tant que le lien est coupé, et un essai qui n’a échoué qu’à cause de la coupure n’est pas compté.
Résultat
Le travail se met en pause pendant une coupure et reprend au retour de la connexion.

Un bouton stop qui créait une tâche appelée « stop »

Ce que j’ai trouvé
Dans le chat de l’application, « stop », « pause » et « annule ça » devenaient de nouvelles tâches. 10 messages courants sur 12 devenaient des tâches.
Ce que j’ai fait
Les commandes sont désormais reconnues et écrites comme un ordre unique que l’exécuteur suit au tour suivant : stop arrête le travail en cours, pause le laisse finir, reprendre relance, et une tâche annulée ne démarre jamais.
Résultat
Vérifié en conditions réelles : un arrêt complet n’a rien laissé tourner.

Une bonne réponse refusée, puis une mauvaise

Ce que j’ai trouvé
Un agent d’IA a correctement compté 20 personnes différentes dans une liste de contacts. Un contrôle par mots l’a refusée ; la nouvelle tentative a donné 19.
Ce que j’ai fait
J’ai construit un contrôle typé qui recompte à partir des données sources selon la règle de la demande elle-même. Les bonnes réponses passent quelle que soit leur formulation ; les mauvaises sont refusées avec la cause indiquée (ici, la ligne d’en-tête retirée deux fois).
Résultat
Testé sur les données réelles, relu deux fois de façon indépendante, aujourd’hui en production.

Des alertes notées comme affichées que personne n’a vues

Ce que j’ai trouvé
L’application confondait « envoyé » et « vu » : le système d’exploitation avait désactivé les alertes, et le journal les notait quand même comme affichées.
Ce que j’ai fait
Vérifier d’abord la vraie autorisation, ne marquer une alerte comme affichée qu’une fois acceptée par le système, garder les autres en attente et prévenir clairement l’utilisateur quand les alertes sont désactivées.
Résultat
Les deux alertes perdues ont été délivrées et confirmées à l’écran ; un test de régression le garantit.

Compétences

Ce que j'apporte à une équipe

Des compétences larges et concrètes sur toute la pile, chacune mise en œuvre dans un projet réel présenté plus haut.

Backend, API et front-end

Services Python et API REST (aussi avec FastAPI) avec stockage SQL, et front-ends typés en TypeScript et React. Avec reprises, idempotence et gestion des pannes.

Python · FastAPI · TypeScript · React · API REST · JSON · SQL / SQLite · Bash · JavaScript

Ingénierie des données

Des données désordonnées transformées en résultats propres et vérifiés : nettoyage, dédoublonnage, validation, rapprochement, extraction de PDF et de XML, OCR et rapports.

Pipelines de données · Qualité des données · PDF et XML · OCR · Rapports

Intégration de l'IA et des LLM

Des agents qui utilisent de vrais outils étape par étape, des modèles locaux et embarqués, la recherche d’information et l’évaluation sur des tests réservés, avec du code qui vérifie chaque réponse.

Agents d'IA · Utilisation d'outils · Ollama · MLX · Recherche d'information · Évaluation

Automatisation et intégration

Des flux de travail et des intégrations qui relient systèmes et sources de données de façon fiable, y compris la collecte respectueuse de données web et les registres publics.

n8n · Intégration d'API · Données web · Registres publics

Tests et QA

Des tests automatisés à chaque niveau, des tests de régression écrits à partir de vraies pannes et des contrôles de mise en production qui bloquent une version défaillante.

pytest · Playwright · Tests d'API · Tests de base de données · Contrôles de mise en production · CI/CD

Fiabilité et DevOps

Services toujours actifs : supervision et redémarrages, contrôle d’admission, contrôles de mise en production avec retour arrière, surveillance, traces, conteneurs et sauvegardes.

Debian · Docker · systemd · SSH · Git · OpenTelemetry

Plateformes Apple

Une application macOS native en Swift et SwiftUI, ainsi que des outils en ligne de commande pour l'OCR, la reconnaissance vocale et Core ML sur l'appareil.

Swift · SwiftUI · Vision · Speech · Core ML

Sécurité

Circuits de validation, listes de commandes autorisées, isolement des processus, journaux d’audit signés et un coffre de données fondé sur le consentement, plus la pratique de l’OWASP dans un labo isolé.

macOS Seatbelt · Semgrep · OWASP · Juice Shop · WebGoat

International

Prêt pour l'international

Mes projets traversent déjà les frontières. Je construis des logiciels qui traitent correctement les documents, registres, langues et devises d’autres pays, et je travaille à distance avec des équipes partout.

  • Amérique latineFactures électroniques CFDI du Mexique et NF-e du Brésil lues depuis le XML et vérifiées ligne par ligne ; recherche en portugais pour le Brésil.
  • Moyen-Orient et Afrique du NordFiches clients en arabe et en anglais nettoyées et dédoublonnées, avec des numéros de téléphone au format international.
  • EuropeRecherches dans les registres d'entreprises du Royaume-Uni (Companies House) et de France (Sirene) ; recherche en polonais.
  • Asie-PacifiqueRecherche en japonais ; recherches d'entreprises en Australie (ABN).
  • Argent et taxesDes prix gardés dans leur propre devise, avec et sans TVA, et jamais convertis au jugé.
  • HorairesFuseau britannique (GMT/BST). Les heures communes et le rythme de communication sont convenus pour chaque mission.

À propos

À propos de moi

Je suis un ingénieur logiciel autodidacte basé au Royaume-Uni. Depuis mi-2026, j’ai conçu, construit et j’exploite en indépendant la plateforme présentée plus haut, ainsi que les projets qui l’entourent.

Vorthryss est mon activité indépendante d’ingénierie. Je conçois les idées et l’architecture, compare les approches et utilise des outils d’IA pour implémenter, critiquer et tester. Je reste responsable du périmètre, des choix de conception et des critères d’acceptation.

J’aime les problèmes où le logiciel rencontre le monde réel : des données en désordre, des documents d’autres pays, des machines qui redémarrent en pleine tâche. Je fais de petits changements testés et je note ce qui a changé et pourquoi.

  • Python · TypeScript · SQL · Swift · Bash
  • Une plateforme complète construite et exploitée en indépendant depuis mi-2026
  • Documents, données et registres de 7 pays
  • Autorisé à travailler au Royaume-Uni

Expérience

Ce que je construis

Ingénieur logiciel indépendant

Projets personnels · En télétravail depuis le Royaume-Uni · Juin 2026 – aujourd'hui

  • J’ai conçu l’architecture et dirigé l’implémentation, la critique et les tests assistés par IA d’une plateforme de tâches persistantes avec une interface macOS native.
  • J’ai livré 58 versions via un contrôle de mise en production : version liée au commit, vérification préalable, série de tests de référence, reçu et retour arrière en une commande.
  • Tests développés avec l’aide de l’IA : l’exécution complète enregistrée du 28 octobre 2026 a réussi 2 175 tests sans échec.
  • J'ai construit des outils de données et de vérification utilisés sur de vraies tâches : comparaison de prix, vérification d'entreprises, recherche multilingue et extraction de documents.
  • J'exploite un serveur Linux auto-hébergé avec Docker, des flux n8n, de la surveillance et des sauvegardes.

Principes

Ma façon de travailler

De petites étapes testées

J’accompagne les changements de tests pertinents et j’en inspecte le résultat. Les versions permettent un retour arrière.

Corriger la cause

Quand quelque chose casse, je trouve la cause, je la corrige et je transforme la panne en test pour qu’elle ne revienne pas en silence.

Ne jamais deviner

Quand il n’y a pas de trace, j’écris « inconnu » plutôt qu’une supposition plausible.

Des traces écrites

Ce qui a changé, pourquoi, et la preuve à côté, pour que chacun puisse reprendre le travail.

Contact

Travaillons ensemble

Un processus à connecter, une application à terminer ou une fonction IA à fiabiliser ? Envoyez l’objectif, les technologies actuelles et un exemple du résultat attendu. Je suis aussi ouvert aux postes d’ingénierie logicielle à distance.

shaaf@vorthryss.com

  • Autorisé à travailler au Royaume-Uni
  • Basé au Royaume-Uni · en télétravail partout dans le monde
  • Je travaille en anglais