A selection of what I build. Beyond client work, I maintain open-source Model Context Protocol (MCP) servers that connect AI assistants such as Claude Code to real systems — code search, WordPress management, plugin-migration audits — and reference projects that show how I architect and test software. Everything below is public on GitHub.

Open-source & MCP servers

  • project_search (Python) — a fast file-and-code search server for any project, exposed to AI assistants over MCP and designed to minimise token usage during agentic work.
  • wordpress_manager (Python) — exposes a WordPress site to any MCP-compatible AI assistant through the WordPress REST API, so an assistant can read and manage content safely.
  • ckeditor_audit (Python) — audits the migration status of custom CKEditor plugins between any two versions, surfacing what changed and what still needs porting. Built to industrialize an 82-plugin CKEditor 5 v26 → v47.3 migration in production (see below).
  • ckeditor5-simple-space (JavaScript) — a dependency-free CKEditor 5 plugin that reveals simple spaces in the editor with a toolbar toggle, without ever altering the saved HTML. Published on npm (MIT).
  • openidconnect (PHP) — a Symfony 7.4 OpenID Connect implementation with JWT RS256, a JWKS endpoint, discovery and full test coverage.
  • hexagonal-architecture (PHP) — a worked example of hexagonal architecture in a modern, framework-free MVC PHP project.

More on GitHub: design-patterns & collection handling, Vue.js + Symfony4 single-file-component demos, JavaScript and PHP/Symfony unit-testing examples (PHPUnit, Mocha/Chai/Sinon), and Docker setups for PHP/Symfony. ↳ browse all repositories.

Open-source contributions

I also contribute to the tools I use every day. A couple of interactions with widely used open-source projects:

Selected professional work

  • Le Figaro — CKEditor 5 migration & editorial back office (since 2022). Led the migration of the editorial CMS’s rich-text editor — 82 CKEditor 5 plugins in total, 46 of them built in-house — from version 26 to version 47.3 with full feature parity for the newsrooms: rewriting imports, model/view/schema code and upcast/downcast converters. Industrialized the effort with a dedicated MCP audit tool (open-sourced as ckeditor_audit) and a reproducible test harness combining real-editor integration tests with Playwright E2E, TDD-first. In parallel, contributing to strangling the platform’s legacy Symfony monolith toward a DDD / hexagonal / CQRS architecture — 11 bounded contexts extracted so far, boundaries enforced by Deptrac and PHPStan level 10 — and designing a scalable real-time WebSocket back-end (Socket.io + Redis pub/sub, PM2) that ingests Reuters newswire feeds (XML/XSLT) into Elasticsearch. Stack: PHP 8, Symfony 5, React/Redux, Node.js, Elasticsearch, MariaDB.
  • COFRAC — single sign-on & accreditation platform (2021). Designed and delivered an OpenID Connect provider (Authorization Code Flow) on top of OAuth2, plus a code-quality pipeline (PHPStan, PHP-CS-Fixer, PHPMD, GrumPHP) and PHPUnit coverage.
  • France Télévisions — france.tv video platform (2017–2020). Migrated applications to Symfony 4, refactored toward SOLID and hexagonal architecture, rebuilt the front end with Atomic Design / BEM / SASS, and kick-started the accessibility programme.
  • Atexo — MPE public-procurement suite (2008–2017). Long-term development and Symfony migration of MPE, the e-procurement portal for French, Moroccan and Luxembourg public markets, including REST referential APIs over INSEE/SIRENE data.

How I build

A consistent thread runs through all of it: Software Craftsmanship — TDD, Domain-Driven Design, CQRS, hexagonal architecture, design patterns and PSR standards — so the result is software that stays testable, maintainable and a pleasure to evolve. Read more about me or on the blog.