CALLJOE.COBook now with Joe

Brand

Alpoe London

A Hatton Garden watch dealer and bespoke jeweller, with a 462-page site, a diamond ring builder that renders the exact ring you design, and live metal prices running through the whole thing.

Brand

Alpoe London

A Hatton Garden dealer with its own ring factory online.

The build

Alpoe London sell authenticated luxury watches and make bespoke diamond pieces from Hatton Garden. Two businesses under one name, and before this they had one thing online: a shop window that couldn't do either job. Watches sat in a spreadsheet. Bespoke work lived entirely in DMs and walk-ins.

So I built them the whole thing. Four hundred and sixty-two pages: every watch its own indexable listing across Rolex, Patek Philippe, Audemars Piguet, Richard Mille, Cartier, Omega, Hublot and Breitling, jewellery categories with workshop films standing in for stock photography, buying guides, a hallmarking explainer, and a sell-your-watch spine aimed at the five brands people actually search to sell.

The centrepiece is the ring builder. A customer picks a band, a head, a stone shape, a metal and a carat up to six, and sees a real photograph of that exact combination from three angles, not a generic solitaire with the specification printed underneath contradicting it. Fifteen bands, fifteen heads, ten shapes, every metal, three views each. Thirty-two thousand renders, 2.8 gigabytes, served from object storage through a CDN so none of it touches the repo or the page weight.

Every route out of the site is a WhatsApp message the counter can act on. A watch enquiry arrives with the reference number and bracelet. A ring enquiry arrives with a link the jeweller opens to see the exact ring the customer designed, because the whole configuration lives in the URL. Nobody types a spec twice, and nothing gets lost in translation between the customer and the bench.

Technically engineered.

The decisions that make this build hold up.

  1. 01

    A ring builder that shows the actual ring

    Fifteen bands crossed with fifteen heads, ten stone shapes and every metal, photographed from three angles. The configuration derives the image path directly, so there is no lookup table to fall out of step and no combination that can render a picture of something else. The 119 valid shape-and-head pairs are enforced in the pickers, so a customer can never walk into a ring the workshop doesn't make.

  2. 02

    The configuration is the URL

    The whole build is a handful of flat values in the address bar. That makes every design shareable, back-button-safe and server-rendered, means a lost WebGL context costs nothing, and turns the WhatsApp enquiry into a link the jeweller opens to see exactly what the customer saw.

  3. 03

    32,115 images that never touch the repo

    The render library is 2.8GB. It is resized hard, hosted on object storage, served through a CDN and given a fallback for any missing URL, so the git history stays clean, deploys stay fast, and a broken path degrades instead of breaking the page.

  4. 04

    Live metal prices without a serverless render per view

    Gold, silver, platinum and palladium in GBP, running across the site. The quote is fetched in the browser against a seeded fallback rather than server-rendered, so the ticker is live but every page stays static and instant, and the strip doesn't reflow when the real figures land.

  5. 05

    A sell spine aimed at intent, not volume

    Five brand pages for the sell-my-watch searches, deliberately not eleven: eleven pages from one template with the noun swapped reads as a doorway set to a person and as duplicate content to a crawler. Each page explains what actually moves that maker's valuation, and none of them quotes a price the desk would then have to break.

  6. 06

    Local search done to the millimetre

    LocalBusiness schema carrying the real Hatton Garden coordinates and one set of opening hours shared between the schema and the booking page, so the two can never contradict each other. Breadcrumbs, product structured data, and a sitemap that doesn't claim 462 pages changed at the last deploy.

The real stack

  1. Next.js 16 + React 19

    462 statically generated pages

  2. Cloudflare R2 + CDN

    32,115 ring renders and the workshop films

  3. Three.js + Blender

    The 3D monogram and the brand lockup

  4. GSAP

    Motion that matches the price of the stock

  5. Fuse.js

    Instant fuzzy search across the whole catalogue

  6. Google Sheets + CSV

    The catalogue the shop already maintains

  7. WhatsApp deep links

    Every enquiry route, pre-filled

  8. JSON-LD structured data

    Product, JewelryStore, FAQ and breadcrumb schemas

Two businesses, one site, and neither one compromised.

The watch side sells the way dealers sell, one authenticated piece and one conversation at a time. The bespoke side now takes a customer from an idea to a specification the workshop can price, before anyone has walked through the door.

Where my services came in

Book a call

Loading calendar…

No time that suits? Message Joe on WhatsApp or email hello@calljoe.co.

Chat with Joe