Legacy
Symfony 3.4
Bundle monolith (Backend / Frontend), PHP 5.5-era runtime, Doctrine 2, AppKernel. Starting point of the migration, now replaced.
Production
Symfony 7
PHP 8.3, Doctrine ORM 3, Security, Messenger, Mailer, Twig, Stimulus / Turbo. Same domain, new foundation — shipped to production.
Business problem
A critical shop-floor application is not thrown away. Symfony 3.4 is unmaintained: hiring, security, dependencies and change all get expensive. Orders, production jobs, operators, catalogue and client spaces need a current Symfony, while keeping the behaviour of the existing system.
Architecture
Legacy was split into two Symfony 3 bundles. Production keeps the same surfaces, with an Application layer (job, operator, product, order managers) over Doctrine entities, plus an API for partners. This is not greenfield: the existing schema and journeys constrained every module.
- LegacySymfony 3.4 · Backend / Frontend bundles · Doctrine 2 · historical PHP
- DomainProduction jobs · operators · catalogue · orders · funeral-home clients · reports
- ProductionPHP 8.3 · Symfony 7.1 · Doctrine 3 · Messenger · Mailer · monitoring
- UIShop-floor back-office · frontend workspace · API · Twig + Stimulus / Turbo
Strengths
Read the legacy before replacing it
Understand the bundles, shop-floor jobs and client journeys, then port them module by module — not a blind rewrite.
A generation jump, not cosmetic
From Symfony 3.4 / PHP 5.5+ to PHP 8.3 / Symfony 7 / Doctrine 3. Rector, PHPStan and PHP CS Fixer hold the line during the port.
Three surfaces, one domain
Shop floor (operators, jobs, production), client / funeral-home workspace, order API. The product stays bilingual FR/EN.
Quality built into the migration
GitHub Actions CI (PHP 8.3, PHPStan, CS-Fixer), application monitoring, Messenger and Mailer on the new stack — where 3.4 had no future.
My role
Legacy analysis, port to Symfony 7, data model, back-office, business frontend, API and quality (PHPStan, Rector, CI).
Deliverables and results
Public and verifiable
- Public company site: collection-souvenir.com.
Delivered as part of my mission
- Migration shipped: PHP 8.3, Symfony 7.1, Doctrine 3 in production.
- CI: PHPStan and PHP CS Fixer on PHP 8.3.
Stack
Legacy
- PHP 5.5+
- Symfony 3.4
- Doctrine 2
- SF3 bundles
Production
- PHP 8.3
- Symfony 7.1
- Doctrine ORM 3
- Messenger
- Twig
- Stimulus
- Turbo
Quality
- PHPStan
- PHP CS Fixer
- Rector
- PHPUnit
- GitHub Actions