Case study03 / 09 Art gallery & store · WordPress migration

Theo Studio

The theostudio.org online atelier: gallery, events and a store for original works, rebuilt from scratch after a WordPress install carrying thirteen plugins.

Client
Theo Studio
Stack
Next.js 15, React 19, TypeScript, Sanity, Stripe, Auth.js, Resend, Vercel
Year
2026
Visit live
Theo Studio: monochrome homepage with the featured work

01 The problem

The old WordPress and Elementor site carried thirteen plugins to deliver a simple monochrome gallery. And selling one-of-a-kind originals needed a guarantee that two buyers could never pay for the same piece at once.

02 The solution

We migrated the WordPress content into Sanity with a dedicated pipeline and rebuilt the site on Next.js. The store resolves every price on the server, holds each original for the life of its Stripe session and releases it if payment doesn’t complete. Buyers can sign in with Google for orders and a wishlist, and the artists publish their own work from the Studio.

03 The result

[Measurable result — to be confirmed with the client]

04 · What we built

  1. 01

    Originals that can’t sell twice

    Each original is held by a conditional write for the life of the Stripe session and released on expiry or failure; the webhook fulfils each payment exactly once.

  2. 02

    WordPress → Sanity migration

    A multi-step pipeline (export, asset download, load) for 633 documents and assets, with redirects for the old URLs.

  3. 03

    Accounts without a database

    Google sign-in, order history, a wishlist and saved addresses stored on the Stripe customer itself.

  4. 04

    Shareable filters

    Store filters (artist, type) live in the URL: shareable, crawlable and working without JavaScript.

  5. 05

    A Studio for the artists

    Sanity Studio embedded in the site; sold works stay visible with a struck-through price, only the buy action disappears.