Everything on this page is running in the store you are browsing.
Two levels of categories, collections that cut across them, and brands. A product has variants on any attributes (size, colour, dial, lens, bottle size, kit), each with its own stock, price and photo. Specifications are structured, so shoppers filter by them.
Sale events with a start and end date group automatic discounts under one page and banner. Discounts target categories, collections, brands or products, as a percentage or a fixed amount. Coupon codes, free shipping, personal vouchers issued at sign-up, loyalty points and referral rewards work together with one cap on the total discount.
Three currencies with exchange rates, per-currency rounding and hand-set prices. Tax per country and region, shown included or added. Shipping zones with rates by weight and free-delivery thresholds. Any language, including right-to-left.
Guest or account checkout, a quote that is priced again on the server before the order is made, stock held while the buyer pays, cards through Stripe and cash on delivery with limits per country.
Email and password, Google and passkeys. Saved addresses, a wishlist, order history, back-in-stock requests, reviews with moderation, loyalty points and vouchers.
An order is created only when payment succeeds and is never deleted. Shipments with tracking events, returns with reasons and restocking, refunds, invoices and credit notes.
Every page has its own metadata and a schema.org graph: products with offers and reviews, breadcrumbs, FAQ, organisation. A sitemap, canonical URLs and language alternates are generated from the data.
A Next.js storefront with cached pages, a NestJS API on Fastify (read-only GraphQL for content, REST for everything private or written) and PostgreSQL. The same API serves a mobile app.
The back office (CMS) for staff is in development, followed by a worker that sends emails and runs scheduled work.