Migrating a Live Travel System from PHP to Angular, One Step at a Time
How I moved Tirta Jaya VIP's entire operation off a legacy PHP monolith in five months, without stopping a business that handles hundreds of transactions a day.
Tirta Jaya VIP is a travel company in Malang. In 2024 I spent five months moving its whole operation (fleet scheduling, ticket reservations, garage maintenance and the cashier) off a slow legacy PHP monolith and onto a new platform. I did the project myself, from analysing the old system to running the new one in the cloud, and I wrote it without AI assistance.
The constraint: the business could not stop
The system handles hundreds of transactions a day, and holiday seasons add booking surges on top of that. A single "big switch" from the old system to the new one would have put every one of those bookings at risk if anything went wrong. So the first architecture decision was not about frameworks at all: the migration would be incremental.
Why incremental
- Operations kept running on the old system while each new part came online.
- Each stage was verified before the next one began, so any problem stayed small and contained.
- Staff learned the new system gradually instead of all at once.
The target architecture
- Angular SPA + Node.js API: separating frontend and backend removed full page reloads and let each module evolve independently.
- Socket.io: dispatchers see departure and route status changes live, without refreshing.
- PostgreSQL table partitioning: journey history grows into millions of rows, and partitioning keeps history queries fast.
- GCP with load balancing, auto-scaling and auto-recovery: capacity rises automatically during booking spikes, and unhealthy instances recover without manual work.
- An audit trail in the cashier module: every financial transaction can be traced, which makes reconciliation straightforward.
Results
Page load times dropped by 90% compared with the PHP system, the platform runs at 99.95% cloud uptime, and all four areas of the business now run on a single platform.
What I would tell someone starting a similar migration
- Decide how you will migrate before you decide what you will migrate to.
- Plan for your busiest day, not your average day.
- Make money traceable from day one. An audit trail is much harder to add later.