← back home

The full work history

— 11 roles, newest first.

9+
years shipping
11
roles held
65
technologies used

stack:

TypeScriptNode.jsJavaScriptReactVue.jsNext.jsNuxt.jsPHPSymfonyLaravelPostgreSQLMySQLRedisDDDVitestViteAWSVercelJSNADJSNSD

Timeline

I'm now at →
Senior Software Engineer
Sep 2025 — now
Carrefour | Remote — tap for details

Maintenance and hardening work on an existing production app:

fixing bugs, refactoring legacy code, and security hardening (SQL injection prevention, brute-force protection), rather than greenfield building.

Carrefour Bank (AI document verification) A more substantial build:

an AI-powered document verification pipeline where users upload identity/financial documents (ID, RIB, Passport, Permis, tax notices), and the system auto-verifies and extracts data using Gemini. Key pieces:

  • Dedicated, document-type-specific prompts to check validity and expiration dates

  • Redis caching keyed on a per-file hash to avoid reprocessing duplicate uploads (cutting cost and latency)

what I learned

Built an AI document verification pipeline for Carrefour Bank using Gemini Users upload ID, RIB, Passport, Permis, tax notices Document-specific prompts per type to validate and extract fields (incl. expiration dates) Redis caching by file hash to skip reprocessing duplicate uploads — cut cost and latency

node-jsphprest-fulljavascripttypescriptsassaivue-jslaravelredisdockergeminiapi
Technical Development Lead
Jul 2023 — Jun 2025
FMC | Remote — tap for details

About FMC Production

FMC Production is a French company specializing in the live and on-demand broadcast of scientific content on the web, building training platforms for Learned Societies and Laboratories.

My Role — Tech Lead, Web Team

As Tech Lead for the web development team, I led the design and delivery of an e-learning solution ("Solution E-learning") with an integrated payment system for purchasing training/formations, working in close collaboration with a UX team based in France.

Core features delivered across the platform:

  • Live events & replays — broadcasting and on-demand playback of scientific/medical congresses

  • Watch-time tracking & KPIs — event tracking on live and replay sessions (connection time, watch duration, drop-off points, session completion) to generate per-company/per-client engagement KPIs and attendance reporting

  • Chat & notification system — real-time interaction and event alerts for attendees

  • Authentication — simple login plus SSO integration

  • Payment system — enabling purchase of formations/training content

  • Mailing — email campaign and notification infrastructure

  • Search management — content/event discovery across the platform

  • Dashboard — admin/user-facing management interface

Platforms shipped under this role:

node-jsphptailwindcssnext-jsreactapi-platformsymfonygitlabsocket-iovps
Senior Frontend Developer
Apr 2023 — Jun 2023
Carrefour Links | Remote — tap for details

Carrefour Links Project

Category Management Collaboration to provide 360° view on their category (performance + projects)

Provide access to useful & quality CRF performance data

node-jstypescripttailwindcssstorybookvue-jsapifastifygoogle-cloudpostgresql
Full Stack Engineer
Mar 2022 — Oct 2022
Tarkett Group | Remote — tap for details

Tarkett's e-commerce website https://tarketthome.com

phpmysqljavascriptjestnext-jscypressssrnuxtvue-jsreactsymfonywc3awselasticsearchci-cd
Senior Full-Stack Engineer
Mar 2022 — Jan 2025
DropTeam | Remote — tap for details

Architecting TypeScript/Node services and Next.js + Nuxt frontends for product teams.

Own the boundary between design system and app code, push for DDD-flavored modules and high test coverage on anything that touches money or auth.

what I learned

That a well-drawn module boundary saves more time in review than any lint rule — once the domain layer stopped importing framework code, onboarding new contractors got a lot faster.

dddnode-jsjavascripttypescriptjestapireactawsmaterial-uieslint
Frontend Web Developer
Apr 2021 — Feb 2022
Nestle Group | Hybride — tap for details

Nespresso's e-commerce platform

• Front-End development (Typescript, VueJS)

• Work in agile setting (Scrum)

• Development of dynamic and reusable UI.

• Code refactoring.

• Unit Testing and E2E.

• SEO improvement.

• Accessibility.

• Analytics (Google Analytics)

tailwindcssjestgitlabci-cdeslintsonarjiraconfluencenightwatchpostcssrestfulgtmseoaccessibility
Back End Developer
Jan 2021 — Aug 2021
Nesspresso | Hybride — tap for details

Nespresso's e-commerce platform (Next).• Back side development (PHP, DRUPAL)• Work in agile setting

phpdrupalvueapigitlabjiraconfluencesolare-ecommercephpunitakamaiacquia
EOS Software Engineer
Feb 2020 — Feb 2020
SQLI | Hybride — tap for details

• SIAM Migration & Theming.

• Live video management.

• Social Network binding.

Technical Environment:

phpdrupalhtml5sassdockerapigitlabjquerytwig
Full-Stack Developer
Jun 2019 — Feb 2022
Digital Agency · On-site — tap for details

Built and scaled Symfony + Vue apps on Postgres & Redis for a dozen client products. Owned CI pipelines, caching layers and API design, and mentored two junior devs through their first production incidents.

what I learned

Cache invalidation is a people problem before it is a code problem — most of the stale-data bugs traced back to two teams disagreeing on what a cache key should represent.

SymfonyVue.jsRedisPostgreSQL
Web Developer
Sep 2017 — May 2019
Product Startup — tap for details

Shipped Laravel/MySQL backends and my first React frontends for an early-stage SaaS. Learned to move fast without breaking the important things, under a founder who reviewed every PR personally.

what I learned

Ship the boring version first. The feature that took two days to "do right" almost always got redesigned within a month anyway once real users touched it.

LaravelReactMySQL
Junior Developer
Sep 2016 — Aug 2017
First job · On-site — tap for details

Started out fixing bugs in a legacy PHP admin panel, then graduated to small features. Learned Git, code review etiquette, and how to read a stack trace without panicking.

what I learned

Asking "why" about an existing pattern before changing it saved me from breaking things I didn't know were load-bearing more than once.

PHPjQueryMySQL