All case studies
E-commerce modernization from a legacy storefront
Migrated an aging monolithic storefront to a Next.js and Node.js platform, so frontend and backend could ship and scale independently.
The problem
An aging OpenCart-era architecture made every change risky. Catalogue pages were slow, checkout broke under campaign traffic, and the team could not deploy the storefront without touching backend code.
Challenges
- The old database schema had to keep serving orders during migration
- SEO rankings on thousands of product URLs could not be lost
- Campaign traffic spikes were 20x normal load for short windows
What we built
- Next.js storefront with server rendering and incremental revalidation for catalogue pages
- Node.js commerce API in front of the legacy database, then progressively behind a new schema
- Redis-backed cart and inventory read cache
- Redirect map preserving every legacy product URL
Architecture
- Strangler-fig migration: the new API served traffic route by route while the legacy system stayed live
- PostgreSQL as the destination store, with dual-write and reconciliation during cutover
- Docker images and a staging environment identical to production
- Grafana and Prometheus dashboards for checkout funnel and error rates
Next.jsNode.jsPostgreSQLRedisDockerAWSGrafana
Key engineering decisions
Strangler-fig instead of a big-bang rewrite
Route-by-route migration meant the retailer kept selling throughout, and any single step could be rolled back in minutes.
Cache reads, never writes
Inventory reads are cached aggressively; stock decrements always hit PostgreSQL inside a transaction. Fast pages, no oversells.
Results
- Catalogue pages render fast enough to pass Core Web Vitals thresholds
- Checkout stayed up through campaign peaks
- Frontend and backend now deploy independently, several times a week
Request a set of drawings for your own project.
One business day for a reply from an engineer, not a sales pipeline. Tell us the problem and we'll tell you honestly if we're a fit.
