Brand
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.
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.
What it changed
Before
Bespoke ring enquiries came in as 'something like this' with a screenshot attached.
After
They arrive as a link the jeweller opens on the shop floor: band, head, shape, metal, carat, stone size in millimetres.
Before
Stock lived in a spreadsheet and nowhere a customer could find it.
After
The same spreadsheet publishes the catalogue. Add a watch, the page and the sitemap entry appear on their own.
Before
The sell-your-watch side of the business relied on people already knowing the shop.
After
Five dedicated pages hold the highest-intent searches in the trade, the ones typed by somebody with the watch in a drawer.
Before
Gold moved, and the prices quoted on the shop floor drifted from the ones online.
After
A live metal ticker runs across the site, so the counter and the website are quoting the same market.
How it's built
The decisions that make this build hold up.
01 / 06
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.
02 / 06
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.
03 / 06
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.
04 / 06
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.
05 / 06
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.
06 / 06
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.
462 statically generated pages
32,115 ring renders and the workshop films
The 3D monogram and the brand lockup
Motion that matches the price of the stock
Instant fuzzy search across the whole catalogue
The catalogue the shop already maintains
Every enquiry route, pre-filled
Product, JewelryStore, FAQ and breadcrumb schemas
Need a fast, scalable web app built from scratch?
Learn moreUnclear on what to build next or how to prioritise?
Learn moreNeed to show a product that doesn't exist yet, or can't be photographed?
Learn morePosting nothing, or posting content that reads like a robot wrote it?
Learn moreThe 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.
Got an idea or a problem to solve? Book a call and let's figure it out together.
Book a Discovery Call