zsty.us

Before / After · Case Study

Sydney Nova — a bland Shopify grid to an immersive gallery with real AI search

Sydney Nova paints trippy, saturated pop-art — and sold it through a Shopify theme that made every canvas the same 300px square. The rebuild rips the entire catalog (59 products, 147 images) out of Shopify into a self-hosted Next.js 16 storefront built around the work: a no-tiles zoom-on-scroll gallery where each piece takes the viewport, an AI vibe search that blends a mood lexicon with real precomputed CLIP embeddings, and a hand-written WebGL fluid-paint background whose ambient color is 'possessed' by the centered artwork — the chrome literally takes on each painting's palette. A first-visit vibe-picker asks 'What are you here for?' and routes the visitor by intent.

The art is loud. The old store was a spreadsheet. The new one lets the paintings possess the room.
🔒sydneynova-art.vercel.app
jackiej.events — modern site

Receipts — measured

Numbers that moved.

0
Products migrated off Shopify
was 0
0
Images ripped + self-hosted
was 0
17 open
Adversarial-review findings fixed
was 17 open
  • 59 products / 147 images ripped from Shopify and self-hosted
  • AI vibe search: mood lexicon + build-time CLIP (clip-ViT-B-32) cosine ranking
  • Hand-written WebGL domain-warped fluid-paint shader (reduced-motion + context-loss safe)
  • 27-agent adversarial review; 17 findings fixed

The pixel diff

Overview, then the walkthrough.

Left: everything the legacy site shipped — frozen in place. Right: an auto-scrolling tour of the rebuild, from hero to booking. No slider to fight with.

Before — the overview
🔒sydneynova.com
Before — the overview

This is everything the legacy site had to offer above the fold. No pricing, no calendar, no booking — the funnel ended at a mailto.

After — scroll through what shipped
🔒sydneynova-art.vercel.app
After — scroll through what shipped

Auto-scrolls through the modern site so you can see the booking surface, the package grid, the pricing table, and the calendar inline — without leaving this page.

The four beats

Problem · Insight · Build · Outcome.

Scroll past the legacy frame. The four beats land in order. At the end, the modern site fades into the same window.

🔒sydneynova.com
Legacy
01 · Problem

Art that stops a scroll, in a store that couldn't.

Sydney's work is maximalist — melting color, huge canvases. The Shopify theme rendered it as uniform thumbnails with keyword search. The store was the single least expressive surface her brand had.

02 · Insight

Build the store around looking, and make search speak in vibes.

Nobody types 'Acrylic 24x36' — they feel something and want more of it. That means full-viewport presentation and a search index built from the images themselves. CLIP at build time gives real visual search with zero runtime ML cost.

03 · Build

Rip the catalog, write the shader, embed the art.

59 products and 147 images pulled out of Shopify and self-hosted. Next.js 16 storefront with the no-tiles zoom gallery, the intent-routing vibe-picker, the hand-written WebGL fluid-paint background with ambient possession, and vibe search blending a mood lexicon with precomputed clip-ViT-B-32 cosine ranking. Clover hosted checkout wired in stub mode.

04 · Outcome

Live, reviewed, and the origin of a reusable standard.

sydneynova-art.vercel.app is live (sydneynova.oglife.app is one Cloudflare A record away). The 27-agent review's 17 findings are fixed, and the vibe-search mechanism proved out here now ships as @zsty/vibe-search across the portfolio.

🔒sydneynova-art.vercel.app
Modern

Architecture

One chain replaced by another. Receipts above.

Old stack
  • Shopify theme
  • Grid tiles
  • Keyword search
  • Platform CDN
New stack
  • Next.js 16
  • No-tiles zoom-on-scroll gallery
  • Vibe search (lexicon + CLIP cosine)
  • WebGL fluid-paint background
  • Ambient color possession
  • Self-hosted media

What changed

Grouped by what kind of system shipped.

Each claim ships with concrete evidence — env vars, table names, cadence chips. No marketing fluff.

Design

No tiles — the gallery is a zoom, not a grid

Scrolling moves the visitor through the work: each piece scales toward the viewport, holds center stage, and gives way to the next. A first-visit modal asks 'What are you here for?' and routes by intent — browsing, buying, a specific vibe — instead of dropping everyone on the same wall.

Before
59 wildly different canvases flattened into identical 300px squares.
After
Each piece takes the screen; the store feels like walking a gallery.
Agent backbone

Vibe search that actually embeds the paintings

Search accepts moods, not SKUs: 'melting sunset', 'cosmic dread'. A curated mood lexicon handles the head terms while real CLIP embeddings (clip-ViT-B-32, computed at build time over every artwork) handle the tail via cosine ranking — no inference server, no per-query cost, and results that match what the paintings look like, not what their titles say. This build is the origin of the @zsty/vibe-search standard now packaged in the zsty.us monorepo.

  • clip-ViT-B-32 vectors precomputed at build over all 147 images
  • Mood lexicon + cosine blend; zero runtime inference infrastructure
  • Pattern extracted into the @zsty/vibe-search package (live on zsty.us)
Design

A shader that lets the art possess the chrome

The background is a hand-written WebGL domain-warped fluid-paint simulation — no library — and the centered artwork's dominant color bleeds into it, the cursor, and the UI chrome. Every painting recolors the room around it. Reduced-motion and WebGL-context-loss paths are handled, so the effect never costs a visitor the store.

  • Custom domain-warp fragment shader, no three.js dependency
  • Ambient possession: artwork palette → background, cursor, chrome
  • prefers-reduced-motion + context-loss fallbacks verified
Retention

27-agent adversarial review before the client saw it

The build ran through a 27-agent adversarial review — performance, a11y, honesty, commerce flows — surfacing 17 findings, all fixed. Checkout runs on the Clover hosted-checkout adapter in stub mode until the merchant account lands; the flow is real, the charge is the one flagged mock.

← All rebuilds

Sydney Nova — a bland Shopify grid to an immersive gallery with real AI search — zsty.us