Email me
← Projects

Web

Static Shopify storefront

A shop that loads like a brochure site, on a store the client already pays for

Active Started 27 May 2026 Updated 20 Jul 2026
Built with
  • astro
  • typescript
  • shopify
  • graphql
Artist storefront with painting catalogue, product view, cart, and inventory panel

A client sells original paintings through a gallery’s shared Shopify store. She wanted her own site — her name, her work, her writing — and the obvious route was to give her a Shopify plan and a theme.

That route has two problems, and neither is technical.

It’s a second monthly bill. Her products already live in a store that works and takes payments. A personal Shopify plan would duplicate that cost to solve a presentation problem, and small businesses feel a recurring charge far more sharply than a one-off build.

It splits the inventory. Two stores means two places a painting can be listed and one place it can be sold, which is a stock bug waiting to happen with one-of-a-kind work. Whichever store you don’t update is the one telling a customer something is available.

So the site isn’t a Shopify store. It’s a static site that reads the store she already has.

How it works

  • The catalogue arrives at build time. The build authenticates against the Shopify Admin API, pulls the collection, and generates a real HTML page per painting. No client-side product fetch, nothing to wait for.
  • The cart runs in the browser. A public Storefront API token lets the page create a real Shopify cart and add lines to it. The browser stores the cart’s id and nothing else, so prices and stock are Shopify’s answer rather than a stale copy of one.
  • Checkout is Shopify’s. Payment, tax and fulfilment stay where they already work. Nobody needs me to reimplement any of that.

The result is a site with no theme runtime, no app scripts, and no cart JavaScript running before you touch anything — while still taking money.

Where it fits

This is the most involved integration built on top of my client site platform — the shared component library the site itself is made of. The platform is the general case; this is the awkward specific one that proved it could carry real behaviour.

The honest limits

This works because the products are one-of-a-kind, low-volume, and already listed somewhere. It gets less convincing with variants, restocking, or a catalogue that changes hourly — at which point you’re rebuilding a store rather than avoiding one. The checkout also hands off to a domain that isn’t hers, which is a trust cost the architecture can’t remove.

Devlog

  1. A cart on a site with no server

    Letting Shopify own the cart, and keeping only the receipt in localStorage.

  2. The cart I didn't build

    Two ways to put a cart on a static site, and why the cheap one was the expensive one.

  3. Shopify products at build time

    Pulling a product catalogue into a static build, and what that costs you.