Legacy Modernization: PHP 5 → 8, MySQL 5.7 → 8.4, CentOS → Rocky
A multi-year, codebase-wide modernization of Educational Travel Adventures' platform — PHP 5.6 to PHP 8, MySQL 5.7 to MySQL 8.4 LTS, and CentOS 7 to Rocky Linux 9 — done in production, without freezing the company.
Problem
A 40-person travel business was running on a stack whose security and support runway was visibly running out: PHP 5.6 long past EOL, MySQL 5.7 past its window, and CentOS 7 about to age out. Every other piece of the platform — payments, ACH, the customer portal, internal Tourbot, the guides PWA — had to keep shipping the entire time.
What I Built
Directed and executed an enterprise-wide PHP 5 → 8 migration across the codebase, removing magic quotes, deprecated `mysql_*` calls, and dynamic-property warnings; declaring properties on long-lived models; tightening type signatures. Wrote and shipped the MySQL 5.7 → 8.4 migration plan and the CentOS 7 → Rocky Linux 9 cutover, including production deployment notes, schema-compatibility audits, and per-server runbooks. Coordinated cross-database export/import for customer accounts, dual-running the old and new database servers during transition. Modernized server roles in step (db deprecation, ACH host migration, manager-tourbot Docker host). Mentored the developer working alongside me on the same codebase.
Result
A current, supported stack — PHP 8, MySQL 8.4 LTS, Rocky Linux 9 — across the production fleet, completed without an outage that customers or staff would have noticed. The same migration also unblocked downstream work: containerized manager sandboxes, an AI-agent orchestrator, and the modernized customer portal all assume the new baseline.
PHP 8
MySQL 8.4
Rocky Linux
CentOS
Migration
Refactoring
Production Ops