Quick facts
- Industry
- Fine jewellery e-commerce (USA): wedding bands, engagement rings, anniversary bands and fine jewellery
- Our role
- Ran and optimised the production Magento 2 store, then migrated it to Shopify with custom Shopify apps and a Laravel pricing and variation service
- Stack
- Magento 2, Shopify, Laravel API
Summary
An online store for made-to-order rings and jewellery, where every price is calculated live from metal, ring size, width, stone weight and labour cost. We first ran and tuned the store on Magento 2, then moved the whole business to Shopify, with the complex product logic living in a custom Laravel service.
The problem
Every ring is configurable: several metals (10K, 14K, 18K, platinum), dozens of sizes, widths and stone options, so a single ring has hundreds of possible variants that a fixed-price catalogue cannot handle. On Magento this made pages slow (rendering one ring's options could use up to about 1.2 GB of memory), and duplicate URLs, broken sitemaps and missing structured data were hurting search and Google Shopping. The platform had become hard to run, so the business decided to move to Shopify, but Shopify's standard variant model cannot express hundreds of formula-priced combinations per product.
The storefront is public. The custom Shopify apps and the Laravel admin are private, and we can't share access to the dashboards because of client confidentiality.
Key features
Formula-based pricing engine
Each product type (engagement, wedding, anniversary, his & hers, pendants, classic bands) has its own calculator. Metal weight comes from ring geometry and metal density, stones are priced by carat range from admin-managed tables, and labour, setting, shipping and a per-category margin are added on top.
Laravel variation and pricing service
Metals, sizes, widths, stones and cost tables live in a custom Laravel app instead of in Shopify variants. A fast Laravel API returns the valid options and the live price for any configuration.
Custom Shopify apps
Connect the Shopify storefront and its "design your own" ring, pendant and earring flows to the Laravel service, so shoppers build a piece, see the right price and check out on Shopify.
Magento → Shopify migration
Products, customers and order history moved across, with old Magento URLs mapped and redirected so search rankings carried over.
Production systems connected
Delivery tracking, fulfilment and inventory systems connected to the new store, so made-to-order pieces flow from order to workshop to shipment.
SEO and Google Shopping
Canonical URLs, clean XML and image sitemaps, JSON-LD structured data (product, organisation, breadcrumb, FAQ), and a Google Merchant feed that carries calculated prices, first on Magento and then rebuilt for Shopify.
Challenges
- 01Challenge
Pricing hundreds of metal, size and stone combinations per ring on a platform built for fixed-price variants.
SolutionLaravel became the pricing authority. Shopify holds the product and the order; the custom apps ask the Laravel API for options and price as the shopper configures a piece, so every combination is priced from the current cost tables without creating hundreds of Shopify variants.
- 02Challenge
Changing platform without losing organic traffic built up over years on Magento.
SolutionEvery indexed Magento URL was mapped to its Shopify equivalent with permanent redirects. Canonical rules, sitemaps, structured data and the Merchant feed were rebuilt so search engines saw one clean URL per product from day one.
- 03Challenge
Keeping the Magento store fast while it was still live: option rendering caused PHP timeouts under load.
SolutionHeavy swatch and 360° viewer HTML was pre-rendered into a file cache and served from disk, with a light placeholder on a cache miss. Queue-based crawler commands with CPU limits and Varnish ban-and-rewarm scripts kept the cache full without overloading the server.
Results
- The store now runs on Shopify, with complex configurations and pricing served by the Laravel API.
- Accurate live prices across hundreds of metal, size and stone combinations per product, recalculated from admin-managed cost tables.
- Category pages on Magento served from cache instead of rendering options live on every request.
- SEO carried across the migration: redirects, canonical URLs, clean sitemaps, structured data and a Google Shopping feed with calculated prices.
- About 100 production releases on Magento through a pull-request-based staging workflow.
Stack
- Shopify
- Shopify storefront, custom Shopify apps, Shopify APIs
- Backend
- Laravel pricing and variation service with a REST API, MySQL
- Magento (before)
- Magento 2.4.7, PHP 8, MySQL, Elasticsearch, 15+ custom modules
- Performance
- Varnish full-page cache and warmer, Nginx, PHP-FPM, deferred JavaScript and bundling
- Payments
- Authorize.Net (incl. Apple Pay), Square, Affirm
- SEO / marketing
- Google Merchant feeds, JSON-LD schema, XML image sitemaps, 301 redirect mapping