← Back to portfolio
Symfony EasyAdmin Docker Playwright API

AFTRAL Client Portal

Full redesign of the professional training enterprise portal — AFTRAL & UGAP.

AFTRAL (Association for Transport and Logistics Training) is a professional training organisation. The Client Portal is the web platform that enables client companies to manage their entire training journey: session search, booking, order tracking, employee management and access to documents (agreements, invitations, invoices…). This is a complete redesign of a legacy portal, designed to serve two distinct environments: AFTRAL (public enterprise client space) and UGAP (beneficiary space for public buyers, with specific business rules and workflows).

My role

Symfony backend developer since late 2020, in collaboration with the Ziofix team. Over 200 functional tickets delivered — development, maintenance, security and quality across the full application lifecycle.

Key highlights

  • 200+ functional tickets delivered since late 2020
  • Two business contexts (AFTRAL / UGAP) on a single codebase
  • Service maintained in production for thousands of enterprise users

Tech stack

  • PHP 8.2, Symfony 6.4, Doctrine ORM
  • EasyAdmin 4, Twig, Gulp, Sass, JavaScript
  • PHPStan (max level), PHP_CodeSniffer, PHPUnit
  • Playwright (E2E tests)
  • Docker, Redis, MinIO (S3), Gotenberg (PDF)
  • GitLab CI

Third-party integrations

  • AMMON — training ERP (orders, sessions, documents, user and company synchronisation)
  • Selligent — order and invoice management (UGAP platform)
  • TSA / TSH — session and training result aggregation
  • Hermes — messaging and notifications
  • Docubase — document management
  • Google Maps — geocoding and cartography
  • reCAPTCHA v3 — form protection

Front-office (enterprises)

  • Global training search — inter/intra sessions, filters by theme, location, dates, product type (including e-learning)
  • Geolocation — centre search by radius, Google Maps cartography and directions
  • Cart and ordering — seat booking, trainee management, price validation (UGAP), funding selection
  • My orders — current and past orders, trainee updates, purchase order number, cancellation
  • Employee tracking — training history, results, renewal alerts
  • Documents — download agreements, invitations, invoices, certificates
  • Multi-company management — parent/subsidiary hierarchy, company switching, favourites
  • E-learning — catalogue and remote training requests
  • SSO authentication — Google OAuth login for partner companies (e.g. Veolia)

Back-office (administration)

  • User, company, product, centre and session management
  • UGAP price repository, red lists, client types
  • CSV exports — sessions, orders, employees, statistics
  • Notifications and document alerts
  • EasyAdmin dashboard for daily administration

Major contributions

  • E-learning integration — catalogue and remote training paths on the client portal
  • Google OAuth SSO — single sign-on for partner companies (Veolia)
  • Session geolocation — radius search, company geocoding, Google Maps API call optimisation
  • Foreign company management — support for non-French companies (international phone numbers, specific rules)
  • Multi-company visibility — parent/subsidiary hierarchy management on the front-office
  • UGAP workflows — cart price validation, agreements, seller emails, pricing repository, business error messages
  • AMMON synchronisation — user, company and hierarchy sync, API tokens, document upload
  • Exports and reporting — past orders, sessions, employees, accounts without orders, user statistics
  • Global search — e-learning filters, themes/sub-themes, input alerts, product/centre pagination

Quality & infrastructure

  • Security — dependency updates (CVE), authentication hardening, session management
  • Code quality — PHPStan max level compliance, coding standards
  • Playwright E2E tests — maintenance and fixes for the end-to-end test suite
  • Scheduled tasks (cron) — company synchronisation, geocoding, Selligent imports
  • Observability — Monolog configuration, Matomo tracking on trainee autocomplete
  • Environments — environment variable configuration (preprod, prod), Redis, MinIO

Challenges

  • Multi-platform — single codebase, two business contexts (AFTRAL / UGAP) with different rules, workflows and integrations
  • Integration ecosystem — orchestration of many external services (AMMON, Selligent, TSA…) with error handling, timeouts and data consistency
  • Volume and business complexity — fine-grained rights per company, red lists, OPCO funding and professional training regulatory constraints
  • Scalability — progressive redesign while maintaining production service for thousands of enterprise users

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