zsty.us

Before / After · Case Study

Sydney Nova — trippy pop-art freed from a grid of identical little squares

Sydney's loud, saturated paintings were being sold as uniform thumbnails in an off-the-shelf online store. The rebuild puts each piece full-screen, lets its colors spill into the page around it, and lets shoppers search by feeling — 'melting sunset' — instead of keywords.

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

At a glance

What this rebuild covers.

  • Design

    Scrolling walks you through the work like a gallery — each painting fills the screen, holds center stage, then gives way to the next, and a first-visit 'What are you here for?' question routes each visitor by intent.

  • Theme & color

    The site takes on each painting's palette — whichever piece is centered bleeds its saturated pop-art colors into the moving-paint background, the cursor, and the controls, so every artwork recolors the room around it.

  • Agents

    The search understands feelings, not product codes — type 'melting sunset' or 'cosmic dread' and it finds the paintings that actually look like that, because it was taught from the images themselves.

  • Selling & payments

    The full buy-a-painting flow is built and wired to a hosted card checkout; the only piece held back is the live charge, which flips on the moment the merchant account lands.

  • Speed

    The mood search is prepared ahead of time rather than computed per visitor, so results come back instantly — and the animated background politely steps aside for anyone whose device or settings ask for less motion.

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 paintings + 147 photos moved in-house
  • Search by mood, not keywords
  • Every piece shown full-screen
  • 17 pre-launch review 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
For the technically curiousHow it was done
  1. 01

    Where it started

    A Shopify theme rendered 59 wildly different canvases as identical 300px grid squares, with keyword-only search and every image hosted on Shopify's CDN. Maximalist, scroll-stopping art — presented by the single least expressive surface the brand had.

  2. 02

    What was wrong

    Nobody shopping art types 'Acrylic 24x36' — they feel something and want more of it. A uniform tile grid and a title-matching search box threw away exactly the thing people came for: what the paintings look like.

  3. 03

    The rebuild

    The entire catalog — 59 products, 147 images — was ripped out of Shopify and self-hosted on our hosting platform. The storefront was rebuilt around looking: a no-tiles zoom-on-scroll gallery where each piece takes the viewport, a first-visit vibe-picker that routes by intent, and a hand-written fluid-paint background shader running on the visitor's graphics hardware with no third-party graphics library.

  4. 04

    How the vibe search works

    Search blends two layers: a curated mood lexicon for the common asks, and real image embeddings — computed once at build time over every artwork by an image-understanding AI model — ranked by visual similarity for everything else. No inference servers, no per-query cost, and results that match what the paintings look like rather than what their titles say. The mechanism proved out here was extracted into a reusable vibe-search standard now shipping across our other builds.

  5. 05

    What runs now

    The site is live with the ambient 'possession' effect — the centered artwork's dominant color bleeding into the background, cursor, and chrome — plus reduced-motion and graphics-failure fallbacks so the effect never costs a visitor the store. Checkout runs through a hosted card-checkout adapter in clearly-flagged test mode until the merchant account is issued; the flow is real, the charge is the one mock.

  6. 06

    How it was proven

    Before the client saw it, the build went through a 27-agent adversarial review covering performance, accessibility, honesty, and the commerce flows. It surfaced 17 findings — all fixed before launch.

Architecture

Old stack
  • Shopify theme
  • Grid tiles
  • Keyword search
  • Platform CDN
New stack
  • modern web framework
  • No-tiles zoom-on-scroll gallery
  • visual AI search
  • WebGL fluid-paint background
  • Ambient color possession
  • Self-hosted media

What changed, with evidence

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 — trippy pop-art freed from a grid of identical little squares — zsty.us