← Back to portfolio
Symfony WordPress Elasticsearch API Docker

Lindustrie-recrute.fr — UIMM job platform

Official job board for the metallurgy industry — candidates, recruiters and CST advisors.

Lindustrie-recrute.fr is the official job board for the metallurgy industry, operated by UIMM (Union of Metallurgy Industries and Trades). The platform connects candidates, recruiters and CST (Territorial Service Centres) advisors across France. It covers the full industrial recruitment lifecycle and integrates with many external ecosystems: France Travail, APEC, MeteoJob, Broadbean, TextKernel, plus an AI-powered CV generation module (Mistral).

My role

Freelance full-stack developer at Ziofix, working on this project since November 2020 (300+ commits). I operate autonomously on functional enhancements, corrective maintenance and infrastructure topics, from Symfony back-end to WordPress front-end.

Key highlights

  • 300+ commits since November 2020
  • Platform in production nationwide
  • Decoupled WordPress + Symfony API architecture with async workers

Tech stack

  • Public front: WordPress (Bedrock), custom PHP theme, Gulp, Bootstrap
  • Business API: Symfony 4.4, Doctrine ORM, REST API (Swagger)
  • Search: Elasticsearch 7 (FOSElastica)
  • Queues: Symfony Messenger, RabbitMQ / SQS
  • Applications module: React (tracking kanban)
  • Infra: Docker, Kubernetes (Helm), GitLab CI, Varnish
  • Storage: MySQL, S3 (Scaleway)
  • Analytics & GDPR: Matomo, TarteAuCitron (CMP)
  • Security: Cloudflare Turnstile, OAuth

Third-party integrations

  • France Travail — posting and SMOT status synchronisation
  • APEC — partner import/export
  • MeteoJob — partner import/export
  • Broadbean — job distribution
  • TextKernel — CV parsing
  • Mistral — AI CV generation
  • Pelias / ZMaps — geolocation (migration from Google Maps)
  • Matomo & TarteAuCitron — analytics and GDPR compliance
  • Cloudflare Turnstile — form protection

Front-office (enterprises)

  • Candidates — registration, profile, CV library, job alerts, online applications
  • Recruiters — job posting and management, CV library, post-hire surveys, company space

Back-office (administration)

  • Managers / administrators — full back-office (jobs, companies, exports, CST statistics)
  • Advisors — support and job distribution to partners

Major contributions

  • France Travail integration — SMOT status synchronisation between API, MySQL and Elasticsearch
  • France Travail integration — advisor trusted flow evolution and FT status criterion in exports
  • Recruiter survey V2 — post-job module redesign (enriched form, views, response export)
  • Back-office and exports — advanced filters, My Jobs navigation, monthly CST exports
  • Performance and infrastructure — SQL optimisation, Elasticsearch 7, Kubernetes healthchecks, priority Messenger queues
  • Compliance and security — Matomo → TarteAuCitron migration, reCAPTCHA → Cloudflare Turnstile, email unsubscribe link
  • Business features — AI CV module (Mistral), CV library alerts, Pelias / ZMaps geolocation

Quality & infrastructure

  • Critical production bug fixes (lock timeout, archived jobs, sync periods)
  • Heavy SQL query optimisation (ConsolidateMonthlyOffer, CandidateVoter)
  • Elasticsearch 7 migration and maintenance (Painless scripts, indexing)
  • Priority Messenger queue configuration and transport restarts
  • Memory and cache fixes on critical endpoints
  • Ongoing maintenance — labels, popups, salary fields, INSEE postal codes…

Challenges

  • Decoupled architecture — WordPress front consuming Symfony API via auto-generated Swagger client
  • Integration ecosystem — France Travail, APEC, MeteoJob, Broadbean, TextKernel, AI
  • Async processing — exports, synchronisations and ES indexing via Messenger workers
  • Multi-stakeholder platform — candidates, recruiters, CST managers and advisors on one ecosystem

How does a call work?

A free 30-minute intro call to understand your context and see if we're a good fit.

  1. Pick a slot

    Choose a time that works for you on Calendly. You'll receive a confirmation email.

  2. Scoping conversation

    We review your project, technical constraints, timeline and priorities together.

  3. Next steps

    You leave with concrete options: feasibility, technical approach and possible ways to work together.

Duration 30 minutes

No commitment. The goal is to confirm whether I'm the right person for your needs.

Pick a slot