From 1004d9d2e40c96d6fe8061d09145898ba1782245 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 16:52:49 +0200 Subject: [PATCH 01/21] feat: build portfolio homepage --- src/pages/index.astro | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/index.astro b/src/pages/index.astro index c04f360..8599dee 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,11 +1,11 @@ --- import Welcome from '../components/Welcome.astro'; import Layout from '../layouts/Layout.astro'; - -// Welcome to Astro! Wondering what to do next? Check out the Astro documentation at https://docs.astro.build -// Don't want to use any of this? Delete everything in this file, the `assets`, `components`, and `layouts` directories, and start fresh. --- - - + + From 1e300fd6e77361a3ffd20a6b7b04b57d234e3352 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 16:52:52 +0200 Subject: [PATCH 02/21] feat: add portfolio metadata --- src/layouts/Layout.astro | 55 ++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 21bfe59..05de5d0 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -1,23 +1,40 @@ +--- +interface Props { + title?: string; + description?: string; +} + +const { + title = 'Thibaud Willm — Senior Backend Engineer', + description = 'Senior Backend Engineer spécialisé dans les systèmes complexes, les paiements et la fiabilité.', +} = Astro.props; +--- + - - - - - - - - Astro Basics - - - - + + + + + + + {title} + + + + - From 8dabe380123f32cc4ffa03edc8d6a9419d24fbe7 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 16:52:57 +0200 Subject: [PATCH 03/21] feat: add backend engineer portfolio content --- src/components/Welcome.astro | 338 ++++++++++++++--------------------- 1 file changed, 131 insertions(+), 207 deletions(-) diff --git a/src/components/Welcome.astro b/src/components/Welcome.astro index 6652a75..3964f18 100644 --- a/src/components/Welcome.astro +++ b/src/components/Welcome.astro @@ -1,210 +1,134 @@ ---- -import astroLogo from '../assets/astro.svg'; -import background from '../assets/background.svg'; ---- - - +
+ + +
+

Senior Backend Engineer · PHP/Laravel · Go

+

Je construis des systèmes backend que l’on peut comprendre, tester et exploiter sereinement.

+

+ Dix ans d’expérience sur des plateformes SaaS, des systèmes de paiement et des services distribués. + J’aime les problèmes complexes, les frontières explicites et les compromis qui tiennent en production. +

+ +
+ +
+
10 ansde développement logiciel
+
Go + PHPbackend de production
+
Paiementsintégrations et fiabilité
+
ICownership sans management
+
+ +
+
+

Sélection de travaux

+

Des projets qui montrent comment je pense.

+
+ +
+ + +
+
02Go · Production · Distributed systems
+

Session Keeper

+

+ Microservice Go conçu de bout en bout pour sortir la gestion des sessions d’une plateforme + de paiement multi-SaaS et réduire le coût et la latence du système. +

+
  • Architecture DDD/hexagonale
  • Environ 150 ms de latence moyenne
  • Coûts du périmètre divisés environ par trois
+ Voir le dépôt ↗ +
+ +
+
03PHP · Laravel · Payments
+

LaraWebhook

+

+ Package Laravel conçu seul pour traiter des webhooks multi-services avec signatures, + idempotence, retries, replay, audit trail et stockage configurable des payloads. +

+
  • Tests unitaires, fonctionnels et d’architecture
  • CI, documentation et qualité statique
  • Projet réalisé en environ 80 heures
+ Voir le dépôt ↗ +
+
+
+ +
+

Ma manière de travailler

La complexité mérite de la structure. Pas de la cérémonie.

+
+
Comprendre avant d’abstraire

Je cherche le problème réel, les invariants et les frontières avant de choisir une architecture.

+
Rendre les échecs testables

Retries, timeouts, concurrence et incohérences ne doivent pas rester des accidents impossibles à reproduire.

+
Rester hands-on

Je prends l’ownership des sujets complexes, j’aide les autres à gagner en autonomie et je reste dans le code.

+
+
+ + +
From ba7d989dc9ae34e1948735c28848035a97d99351 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 16:54:00 +0200 Subject: [PATCH 04/21] fix: mark Session Keeper as private project --- src/components/Welcome.astro | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/Welcome.astro b/src/components/Welcome.astro index 3964f18..a360129 100644 --- a/src/components/Welcome.astro +++ b/src/components/Welcome.astro @@ -54,7 +54,7 @@ de paiement multi-SaaS et réduire le coût et la latence du système.

  • Architecture DDD/hexagonale
  • Environ 150 ms de latence moyenne
  • Coûts du périmètre divisés environ par trois
- Voir le dépôt ↗ + Projet professionnel · dépôt privé
@@ -118,6 +118,7 @@ .project p, .principles p { color:#aeb8c4; line-height:1.65; } .project ul { padding-left:20px; color:#c4ccd5; line-height:1.8; } .project-link { display:inline-block; margin-top:14px; color:#63e6be; font-weight:700; } + .project-link.muted { color:#71808f; font-weight:500; } .principles { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; } .principles > div { padding:24px 0; border-top:1px solid #33404c; } .principles strong { font-size:1.1rem; } From 8f47cc9b616b7fd0b7f03eb169323cf18c50bdd5 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 17:01:04 +0200 Subject: [PATCH 05/21] fix: remove proprietary Session Keeper from public portfolio --- src/components/Welcome.astro | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/components/Welcome.astro b/src/components/Welcome.astro index a360129..8f04ebf 100644 --- a/src/components/Welcome.astro +++ b/src/components/Welcome.astro @@ -47,18 +47,7 @@
-
02Go · Production · Distributed systems
-

Session Keeper

-

- Microservice Go conçu de bout en bout pour sortir la gestion des sessions d’une plateforme - de paiement multi-SaaS et réduire le coût et la latence du système. -

-
  • Architecture DDD/hexagonale
  • Environ 150 ms de latence moyenne
  • Coûts du périmètre divisés environ par trois
- Projet professionnel · dépôt privé -
- -
-
03PHP · Laravel · Payments
+
02PHP · Laravel · Payments

LaraWebhook

Package Laravel conçu seul pour traiter des webhooks multi-services avec signatures, @@ -118,7 +107,6 @@ .project p, .principles p { color:#aeb8c4; line-height:1.65; } .project ul { padding-left:20px; color:#c4ccd5; line-height:1.8; } .project-link { display:inline-block; margin-top:14px; color:#63e6be; font-weight:700; } - .project-link.muted { color:#71808f; font-weight:500; } .principles { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; } .principles > div { padding:24px 0; border-top:1px solid #33404c; } .principles strong { font-size:1.1rem; } From 7dbfb5184fbc82157a7034f7800ea971a76a3656 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 17:04:51 +0200 Subject: [PATCH 06/21] feat: add LaraWebhook case study --- src/pages/projects/larawebhook.astro | 50 ++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/pages/projects/larawebhook.astro diff --git a/src/pages/projects/larawebhook.astro b/src/pages/projects/larawebhook.astro new file mode 100644 index 0000000..7dfea0b --- /dev/null +++ b/src/pages/projects/larawebhook.astro @@ -0,0 +1,50 @@ +--- +import Layout from '../../layouts/Layout.astro'; +--- + + +

+ ← Retour au portfolio +

Projet open source · PHP · Laravel

+

LaraWebhook

+

Un package Laravel conçu pour traiter les webhooks comme des messages potentiellement retardés, dupliqués ou rejoués.

+ +
+

Le problème

+

Les intégrations webhook doivent gérer les signatures, les retries, les doublons, les erreurs transitoires et la nécessité d’enquêter sur ce qui s’est réellement passé.

+
+ +
+

Ce que le package propose

+
    +
  • validation de signatures multi-services ;
  • +
  • idempotence protégée contre les courses concurrentes ;
  • +
  • retries synchrones et asynchrones ;
  • +
  • replay et audit trail séparés de la déduplication ;
  • +
  • stockage none, redacted ou full des payloads ;
  • +
  • dashboard, API, notifications et documentation.
  • +
+
+ +
+

Ce que le projet démontre

+

Le projet a été conçu et implémenté seul en environ 80 heures, avec des tests unitaires, fonctionnels et d’architecture, PHPStan, Pint, Pest, CI et automatisation des releases.

+

Il s’agit d’une démonstration technique personnelle, sans adoption externe connue.

+ Voir le dépôt GitHub ↗ +
+
+ + + From a3b9384915c4e13b49075cb61189ed4a94cc7109 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 17:04:55 +0200 Subject: [PATCH 07/21] feat: add Payment Sandbox case study --- src/pages/projects/payment-sandbox.astro | 53 ++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/pages/projects/payment-sandbox.astro diff --git a/src/pages/projects/payment-sandbox.astro b/src/pages/projects/payment-sandbox.astro new file mode 100644 index 0000000..7086491 --- /dev/null +++ b/src/pages/projects/payment-sandbox.astro @@ -0,0 +1,53 @@ +--- +import Layout from '../../layouts/Layout.astro'; +--- + + +
+ ← Retour au portfolio +

Projet open source · Go · Payments

+

Payment Sandbox

+

Tester une intégration de paiement, ce n’est pas seulement vérifier des statuts HTTP.

+ +
+

Le problème

+

Un paiement peut réussir alors que la réponse HTTP est perdue. Un webhook peut arriver deux fois, en retard ou dans le désordre. Deux captures concurrentes peuvent entrer en collision. Ces situations sont difficiles à reproduire avec un mock HTTP classique.

+
+ +
+

La réponse

+

Payment Sandbox modélise les workflows métier du paiement et les comportements asynchrones qui les entourent. Les scénarios sont déterministes, observables et reproductibles, afin de tester les intégrations sans dépendre d’un prestataire réel.

+
    +
  • réponses perdues et retries avec idempotency key ;
  • +
  • webhooks retardés, dupliqués, invalides ou désordonnés ;
  • +
  • courses concurrentes sur capture et remboursement ;
  • +
  • états temporairement incohérents et replay déterministe.
  • +
+
+ +
+

Choix d’architecture

+

Le projet utilise un modular monolith, du DDD et une architecture hexagonale ciblée. L’objectif n’est pas de distribuer artificiellement le système, mais d’isoler les frontières qui apportent une vraie valeur : domaine, persistance, horloge, génération d’aléas, jobs durables et livraison HTTP.

+
+ +
+

État du projet

+

Le projet est en phase de conception et d’implémentation précoce. Les contrats publics et le format des scénarios ne sont pas encore stabilisés.

+ Voir le dépôt GitHub ↗ +
+
+
+ + From 5a521b2c6b43ac0f7db1f794cbef7759f6536f0b Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 17:04:59 +0200 Subject: [PATCH 08/21] ci: validate pull requests --- .github/workflows/validate.yml | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/validate.yml diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..d3e2e6e --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,35 @@ +name: Validate Pull Request + +on: + pull_request: + branches: + - main + +permissions: + contents: read + +jobs: + build: + name: Build Astro site + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: Setup Node.js + uses: actions/setup-node@v5 + with: + node-version: 22 + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build + run: pnpm build From 18b62366d4206fda4253099f85019d1065def592 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 17:05:11 +0200 Subject: [PATCH 09/21] feat: link project case studies --- src/components/Welcome.astro | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Welcome.astro b/src/components/Welcome.astro index 8f04ebf..a879e61 100644 --- a/src/components/Welcome.astro +++ b/src/components/Welcome.astro @@ -43,7 +43,7 @@ aux réponses perdues, aux webhooks dupliqués ou désordonnés et aux courses concurrentes.

  • Scénarios déterministes et reproductibles
  • Événements asynchrones, idempotence et replay
  • Modular monolith, DDD et architecture hexagonale ciblée
- Voir le dépôt ↗ + Lire le case study ↗
@@ -54,7 +54,7 @@ idempotence, retries, replay, audit trail et stockage configurable des payloads.

  • Tests unitaires, fonctionnels et d’architecture
  • CI, documentation et qualité statique
  • Projet réalisé en environ 80 heures
- Voir le dépôt ↗ + Lire le case study ↗
From c7c6e9b6f6591a2d7c0ac3a235b9bb6fd6b12c20 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 17:05:29 +0200 Subject: [PATCH 10/21] feat: add target role and work preferences --- src/components/Welcome.astro | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/components/Welcome.astro b/src/components/Welcome.astro index a879e61..29b5df1 100644 --- a/src/components/Welcome.astro +++ b/src/components/Welcome.astro @@ -3,7 +3,7 @@ TW. @@ -59,6 +59,15 @@ +
+

Ce que je cherche

Un rôle d’IC backend dans une équipe qui croit à son produit.

+
+
Cible

Senior Backend Engineer ou Senior Software Engineer à dominante backend, avec un ownership technique réel.

+
Environnement

Produit utile, SaaS B2B, fintech, sécurité, conformité ou systèmes critiques. Remote réel depuis Strasbourg.

+
Ce que je ne cherche pas

Management hiérarchique, coordination permanente, feature factory ou rôle principalement frontend.

+
+
+

Ma manière de travailler

La complexité mérite de la structure. Pas de la cérémonie.

@@ -107,7 +116,7 @@ .project p, .principles p { color:#aeb8c4; line-height:1.65; } .project ul { padding-left:20px; color:#c4ccd5; line-height:1.8; } .project-link { display:inline-block; margin-top:14px; color:#63e6be; font-weight:700; } - .principles { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; } + .profile-grid, .principles { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; }\n .profile-grid > div { padding:24px 0; border-top:1px solid #33404c; }\n .profile-grid strong { font-size:1.1rem; }\n .profile-grid p { color:#aeb8c4; line-height:1.65; } .principles > div { padding:24px 0; border-top:1px solid #33404c; } .principles strong { font-size:1.1rem; } footer { display:flex; justify-content:space-between; gap:20px; margin:110px 0 28px; padding-top:24px; border-top:1px solid #202832; color:#7f8b98; font-size:.85rem; } @@ -115,7 +124,7 @@ .page { padding:0 18px; } .nav-links { gap:12px; font-size:.8rem; } .hero { padding:76px 0 60px; } - .signal-grid, .projects, .principles { grid-template-columns:1fr; } + .signal-grid, .projects, .profile-grid, .principles { grid-template-columns:1fr; } .signal-grid article { border-right:0; border-bottom:1px solid #202832; } .featured { grid-column:auto; } footer { flex-direction:column; margin-top:76px; } From 0a2c4a5e71dc32164a0155863f150736212cb108 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 17:12:16 +0200 Subject: [PATCH 11/21] i18n: translate layout metadata to English --- src/layouts/Layout.astro | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 05de5d0..8045603 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -6,12 +6,12 @@ interface Props { const { title = 'Thibaud Willm — Senior Backend Engineer', - description = 'Senior Backend Engineer spécialisé dans les systèmes complexes, les paiements et la fiabilité.', + description = 'Senior Backend Engineer focused on complex systems, payments and reliability.', } = Astro.props; --- - + From 78fea9a1010bba7e9b3132e8ffd52caf6db63de6 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 17:12:19 +0200 Subject: [PATCH 12/21] i18n: translate homepage metadata to English --- src/pages/index.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.astro b/src/pages/index.astro index 8599dee..63cb442 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -5,7 +5,7 @@ import Layout from '../layouts/Layout.astro'; From b5e66de7417aa4867a296edfc3140fbe5675a079 Mon Sep 17 00:00:00 2001 From: Proxynth Date: Sun, 23 Aug 2026 17:12:23 +0200 Subject: [PATCH 13/21] i18n: translate portfolio homepage to English --- src/components/Welcome.astro | 73 ++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/src/components/Welcome.astro b/src/components/Welcome.astro index 29b5df1..5b218eb 100644 --- a/src/components/Welcome.astro +++ b/src/components/Welcome.astro @@ -1,37 +1,38 @@
-