Migration Strategy¶
Principle¶
The Laravel application remains the behavioral reference until parity for a migrated slice is demonstrated. The target platform is built incrementally rather than through an unverified big-bang rewrite.
Stages¶
- Freeze legacy census — routes, controllers, models, jobs, integrations, configuration and runtime dependencies.
- Freeze foundation vocabulary — tenant/business-unit/capability/site/plan contracts.
- Create target schemas and API contracts for the first migration slice.
- Implement platform control plane and tenant isolation before tenant-owned business data.
- Migrate a narrow vertical slice (e.g. legacy properties + enquiries) end to end.
- Differential test Laravel vs target for request validation, price/availability semantics, side effects and customer behavior.
- Expand vertical/capability coverage while preserving the parity matrix.
- Migrate public frontend to managed Site Engine.
- Migrate admin/provider workflows to tenant console.
- Cut over integrations/jobs with reconciliation and rollback procedures.
- Production cutover by tenant/site/domain, not by hope.
- Retire Laravel only after all active parity rows are accepted or explicitly retired.
Data migration principles¶
- Preserve stable business identities and legacy references for reconciliation.
- Run migrations idempotently where possible.
- Record source row identity, target identity, migration version and validation status.
- Reconcile counts and financial/booking totals.
- Never infer tenant ownership silently; first tenant mapping must be explicit.