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