DONJ Jewellery: Medusa + Next.js Headless Rebuild with a 100K+ Diamond Marketplace & Custom Ring Builder
A full ecommerce rebuild for DONJ Jewellery, replacing the legacy WordPress and WooCommerce storefront with a modular headless platform using Medusa v2 and Next.js 16.
The new platform brings the ring builder, live diamond inventory, multi-currency pricing, deposits, payments, search, content and customer accounts under one backend pricing authority—so the price shown to the customer stays aligned from diamond selection through payment.
DONJ Jewellery – Headless Ecommerce Rebuild, Ring Builder & Live Diamond Marketplace
Jewellery & Luxury Retail
Medusa v2 · Next.js 16
Canada
Key Metrics / Project Facts
1.1s
PDP load time, from 4.2s100K+
Live diamonds in the marketplace2.8%
Mobile conversion, from 1.2%0
Pricing disputes / month, from 12The Challenge
DONJ's original WordPress and WooCommerce storefront still functioned, but the architecture had accumulated performance, pricing, content and integration constraints. The rebuild needed to solve the underlying commerce system—not simply redesign the interface.
The monolithic WordPress + WooCommerce storefront suffered from slow page loads, plugin conflicts and limited scalability.
The PHP / jQuery engagement-ring builder had become difficult to maintain and was prone to pricing bugs.
The diamond feed was hardcoded inside templates, making supplier changes and lab-grown expansion difficult.
The store operated in CAD while the live diamond feed priced in USD, creating a complex multi-currency pricing problem.
High-ticket ring purchases had no deposit or partial-payment workflow.
Marketing depended on developers for homepage and content updates.
Frontend and backend pricing could drift, creating a trust problem when displayed and charged prices did not match.
The legacy architecture lacked server-side rendering, strong Core Web Vitals and structured-data support.
How We Rebuilt the Commerce Platform
Next.js 16 renders the customer-facing storefront while Medusa v2 owns commerce logic, pricing and integrations. This separation gave DONJ a modular platform without allowing different parts of the stack to calculate independent prices. Product configuration, currency conversion, upgrades, cart totals and payment amounts all resolve back to the same backend authority.
Replatformed the storefront from WordPress + WooCommerce to a headless Next.js 16 frontend with Medusa v2 as the commerce backend.
Made Medusa the single pricing authority so the display price, cart price, order price and gateway charge resolve from the same backend logic.
Integrated PostgreSQL, Nivoda, Algolia, Converge and PayPal as independent services around a modular commerce core.
Built custom commerce modules for the engagement-ring builder, deposit schedules, upgrades, customer accounts and live diamond purchasing.
Separated content from the old WordPress runtime using Gutenberg-style blocks rendered by typed React components.
Introduced a layered caching and search architecture so the 100K+ diamond catalog could be browsed and filtered quickly.
Backend as the Single Pricing Authority
Nothing prices a product independently on the storefront. Next.js presents the experience; Medusa controls commerce logic and communicates with the database, payment gateways, diamond supplier and search layer.
Display price = cart price = order price = gateway charge.
Ten Core Commerce Systems Delivered
The build combined complex configuration, live supplier data, search, pricing, payments, content and customer-account functionality into one coordinated platform. The key architectural principle remained the same across all ten systems: one backend source of truth.
Engagement Ring Builder
Customers design a ring in three steps: select a diamond from the live Nivoda feed, choose a setting by metal and style, then review the configuration, add upgrades and check out. A single backend price-derivation function applies discounts, converts the USD diamond price at the locked exchange rate and returns one whole-dollar total.
The rebuilt flow keeps display price = cart price = order price = gateway charge.100K+ Diamond Marketplace
A scheduled job imports more than 100,000 Nivoda stones into Medusa with certificate numbers, measurements and delivery data. Shoppers can filter by shape, carat, color, clarity and cut, view GIA / IGI certificates and 360° media, compare stones and then move a selected diamond into the ring builder.
Multi-Currency, Whole-Dollar Pricing
The store base currency is CAD while the diamond feed prices in USD. Exchange rates are cached server-side for one hour. Ring pricing, diamond conversion and upgrade calculations are rounded consistently so values do not drift between storefront and checkout.
Example documented in the source: a CAD 2,885.17 calculated ring is shown and charged as CAD 2,885.Deposit & Partial Payment Plans
For high-ticket orders, a custom Medusa module splits the order into whole-dollar installments. Each installment is floored and the final payment absorbs the rounding remainder so the schedule always adds back to the exact order total.
The pay-now flow unlocks each later installment only after the previous payment clears.| Order Total | Deposit | Example Schedule |
|---|---|---|
| $1,000 | 30% | 3 × $300 + $100 |
| $9 | 50% | $4 + $5 |
Converge + PayPal Payments
Converge hosted Lightbox handles Canadian cards while keeping card data away from DONJ's servers. PayPal supports international shoppers and returning-customer vaulting. Both gateways use the backend-calculated order amount.
CMS Blocks & Marketing Autonomy
Content lives in Medusa through Gutenberg-style blocks and is rendered by typed React components. Hero banners, product grids, trust content and educational modules can publish without the previous WordPress runtime or routine developer involvement.
Wishlist & Customer Accounts
Logged-in wishlists persist and sync across devices while guests receive a session-based version. Customer accounts include order history, addresses, deposit schedules with pay-now actions and support for transferring an order between accounts for gifting.
Ring Upgrades
Engraving, rush delivery, insurance and gift packaging are priced as percentages of the effective ring price. Grouped upgrades are mutually exclusive where required, and the same pricing logic is used across frontend and backend.
Algolia Search & Discovery
Products, diamonds and categories are indexed nightly into Algolia, powering autocomplete, faceted filtering and 'did you mean' suggestions across category and diamond discovery experiences.
Transactional Email & Reminders
Resend sends order confirmations, shipping updates and deposit reminders using custom MJML templates, with scheduled jobs tracking which reminders have already been delivered.
Fixing the Infrastructure Beneath the Storefront
Layered Caching, Not One Switch
Inventory synchronization, search indexing, page rendering, client-side queries and browser assets each use the cache layer that best matches the data.
Security by Architecture
The rebuild reduced dependence on aging plugins and shifted controls into the application, payment and infrastructure layers.
What Changed After the Rebuild
The project produced measurable improvements across speed, mobile conversion, pricing accuracy, high-ticket payment flexibility and marketing autonomy.
A Cross-Functional Delivery Team
Pricing decisions were documented before implementation.
Every currency and rounding decision was logged in a running DECISIONS.md before development. Backend modules and APIs were implemented first, followed by frontend features, visual regression testing, staging UAT against real Converge and PayPal sandboxes, and then production release.
Project Delivery & Technology
Headless Commerce Architecture
Full-Stack Ecommerce Development
Custom Engagement Ring Configurator
Third-Party API Integration
Custom Payment & Deposit Modules
Search & Discovery Integration
Performance Engineering
DevOps, QA & UAT
Medusa v2 · Next.js 16 · PostgreSQL
Nivoda · Algolia · Converge · PayPal · Resend
Docker · PM2 · Turborepo · React Query
Jewellery & Luxury Retail
Headless was not the goal. Reliable commerce was.
The platform evolved through documented decisions, one shared pricing authority and a focus on whole-dollar accuracy. The architecture is modular enough to change payment providers, diamond suppliers or CMS components without rewriting the commerce core.
Marketing owns content. Engineering owns correctness. Customers get one consistent experience from a lower-ticket jewellery purchase through a high-value custom engagement ring.
Because in jewellery, even a one-dollar pricing mismatch can become a broken promise.