All work

Case study — E-commerce

Maison DIVINO

An online store for oil-painting iPhone cases — designed and coded from scratch, with a film-led home page, a 3D viewer for every phone, and a checkout built on Stripe.

Project
The studio's own brand
Scope
Design, development, payments, hosting
Year
2026
Live site
maisondivino.com ↗
maisondivino.com
The Maison DIVINO home page. Headline: A painting you can hold. A painted polo-scene iPhone case stands on a rail at sunset.

The brief

Sell a phone case the way you'd sell a painting.

Maison DIVINO is the studio's own brand. It makes iPhone cases printed with oil-painting scenes — polo, clay courts, regattas, the Riviera — finished with a raised brushstroke texture.

The product is tactile and visual, so the website had to do what a product grid can't: show the texture, show the case on the customer's exact phone, and place each design in the world it was painted from.

That ruled out a store template. The storefront was written by hand, which kept every detail — from the film on the home page to the way the cart is priced — under the studio's control.

10
Painted designs
16
iPhone models
160
Design–phone pairings
0
Templates used

The collection

A catalogue that reads like a gallery wall.

Ten designs on a quiet, paper-toned grid. Names set in a display serif, prices kept small, nothing competing with the paintings.

maisondivino.com — The collection
The collection grid on maisondivino.com: ten iPhone cases with painted scenes, each priced at fifty dollars.

What was built

Three things a template couldn't do.

01

Filmed where each painting belongs

Every design has its own scene: the polo case on a field at dusk, the motorboat case on a lake. Short film loops play in place of static product shots.

Each video ships in wide and tall cuts with a poster frame, so phones load a small file and the page never waits on the film.

Close-up of the raised brushstroke texture on the Il Polo case.
02

Your phone, your case, in 3D

Sixteen iPhone models have sixteen different camera layouts. A 3D viewer built with Three.js lets customers pick their phone and turn the case in their hands before buying.

Each case is cut for its own phone — the camera, the buttons, the port — so what the customer turns on screen is what arrives in the box.

// /api/checkout — simplified // Prices never come from the browser. for (const item of bag.items) { const product = CATALOG[item.design]; lines.push({ name: product.name, amount: product.price, // server-side model: item.model, }); } return stripe.checkout(lines);
03

A checkout that can't be talked down

The bag is priced on the server, from the catalogue — never from numbers sent by the browser. A Cloudflare Pages Function builds the order and hands the customer to Stripe Checkout.

Card details go straight to Stripe. The store never sees them, and there is no separate server to maintain.

Art direction

One scene per design.

Under the surface

Quiet palette, fast pages.

The interface stays out of the way: warm paper tones, near-black ink, one display serif. The colour comes from the paintings.

Images are served as WebP in several sizes, with tiny blurred previews that appear instantly while the full picture loads. The site runs on Cloudflare Pages, with security headers set at the edge.

White#FFFEFB
Paper#F8F6F1
Linen#E6E0D5
Stone#807B74
Ink#1D1C1A

Stack

  • HTML & CSSHand-written
  • JavaScriptNo framework
  • Three.js3D viewer
  • Stripe CheckoutPayments
  • Cloudflare PagesHosting
  • Pages FunctionsCheckout logic
  • WebP & MP4Media pipeline
  • Edge headersSecurity

Status: the storefront is live at maisondivino.com in preview. Checkout is built and switches on at launch.

Your project

Want a site built with this much care?