10K+ products, millions of rows — full OpenCart to Laravel migration
An active marketplace stuck on legacy OpenCart — slow, no mobile, hitting its ceiling. We moved tens of thousands of products and millions of data rows to a fresh Laravel architecture with zero data loss. Mobile apps shipped in parallel.
- Multi-phase (migration + mobile)
- Elvin Sharifov + backend / mobile contractors
- Engineering · Product design · Mobile app
- Live
Starting point
Hamısıburada.az was a working marketplace — daily traffic, live order flow, existing SEO. The system sat on an aging OpenCart install: customisations on top of customisations, performance sinking, new features getting slower to ship by the week. There was no mobile app at all.
The risk is worth spelling out: tens of thousands of products, dozens of sellers, categories, price history, order archives, SEO URLs, customer profiles. Every one of those had to keep behaving the same way after the move — zero data loss, zero SEO loss, minimum downtime.
Decisions
- Laravel — new stack. Modern PHP, healthy ecosystem, Eloquent, queues, Horizon, Telescope. Everything OpenCart did, we rebuilt as proper modules in Laravel.
- Idempotent migration scripts — runnable repeatedly, validated in dry-run mode. Count assertions at every stage.
- SEO URLs preserved — old URLs bound to new ones via 301 redirects. Sitemap and canonicals rewritten.
- Mobile apps shipped in parallel — the REST API was written by the same team, so endpoints never diverged between web and mobile.
Execution
Migration ran in three phases: schema mapping, batch import, live switch. The switch day had a four-hour read-only window — new orders were declined for that window rather than risk dual writes. Once the switch was done, no data was missing.
“The most valuable tool in migration work is dry-run. Every script ran in staging dozens of times before it touched real data.”
Native iOS and Android were written separately; the API uses Laravel API resources. Push notifications, in-app payment, category filters, favourites — all in the first release.
Result
- Full Laravel architecture — new features now ship in days, not weeks.
- Zero data loss, zero SEO ranking loss (old URLs preserved via 301).
- iOS + Android launched — mobile order flow runs at web parity.
- The team now runs releases themselves — we sit in an advisory seat post-handover.