zsty.us
← All skills

Vibe search — mood-language search over a real catalog, no inference server

Give a storefront a search box that understands 'melting sunset' or 'something for a nervous first date': a curated mood lexicon + synonym scorer handles the head terms, and real CLIP embeddings (clip-ViT-B-32), computed once at build time over every catalog image, handle the tail via cosine ranking. Zero runtime ML infrastructure, zero per-query cost, results that match what the products look like rather than what their titles say. Proven on the Sydney Nova art storefront, then extracted into the @zsty/vibe-search package that now powers navigation search on zsty.us itself.

Nobody searches a catalog in SKU. They search in feelings — and the embeddings already know what the products look like.

When to use it

Trigger phrases.

Any of these in the user's prompt should invoke this skill in Claude Code.

  • Add vibe search to this store
  • Search by mood / aesthetic
  • AI search for the catalog
  • Make search understand 'cozy' / 'trippy' / 'minimal'
  • Wire up @zsty/vibe-search

What it needs

Required inputs.

  • 01The catalog: product records + at least one image per product
  • 02A brand mood lexicon seed (10–30 head terms the owner actually hears customers say)
  • 03A build pipeline that can run the one-time embedding pass (Python, sentence-transformers)

The mechanism

Pipeline.

  1. 01 · Embed at build

    One offline pass turns every product image into a vector.

    A build-time script runs clip-ViT-B-32 over each catalog image and writes the vectors to a static JSON artifact shipped with the app. No inference server, no vector DB, no per-query cost — the index is a file, rebuilt only when the catalog changes.

  2. 02 · Curate the lexicon

    Head terms get hand-tuned answers; the tail rides the vectors.

    The mood lexicon maps the 10–30 phrases customers actually use to weighted product sets, with a synonym scorer for near-misses. Anything the lexicon doesn't recognize falls through to CLIP: embed the query text, cosine-rank against the image vectors, return the closest work.

  3. 03 · Blend + rank

    Lexicon hits boost, embeddings ground, one ranked list comes back.

    The scorer merges lexicon weight and cosine similarity into a single ranking so a curated term never loses to a noisy vector match, and a novel query never returns empty. Results render instantly — the whole search path is synchronous client/edge code over static data.

  4. 04 · Package it

    Extract as @zsty/vibe-search and reuse per brand.

    The mechanism ships as a workspace package: bring your catalog, your lexicon, and your embedding artifact. Proven order: Sydney Nova storefront first, then the zsty.us nav search (PR #21, live) — next rollout target is the BMH catalog.

What lets it fan out

Connector stack.

With all of these MCP connectors wired, the mechanism runs end-to-end without human handoff. Without them, the handoff is a numbered Chrome checklist.

  • sentence-transformers (build-time, local)

    Available

    Stage 1 — the offline CLIP embedding pass; no runtime dependency.

  • @zsty/vibe-search package

    Available

    Stage 4 — drop-in integration for any storefront in the monorepo pattern.

  • Catalog source connector (Shopify / WooCommerce / Medusa rip)

    Partial

    Stage 1 input — automated catalog + image extraction per source platform.

Guardrails

Stop conditions.

The skill is predictable because it refuses to expand its own scope.

  • stopNo runtime inference services — if it needs a GPU at query time, it's out of scope.
  • stopDon't ship a lexicon the brand owner hasn't reviewed — mood words are brand voice.
  • stopEmbedding artifacts rebuild only on catalog change — never per deploy.
  • stopIf results for a head term look wrong, fix the lexicon, don't fine-tune the model.

Use this skill

Install + invoke.

The skill file is at og-gitclaw/claw-skills/blob/main/skills/vibe-search/SKILL.md. Copy it to ~/.claude/skills/vibe-search/SKILL.md to make it user-global, or to <project-root>/.claude/skills/vibe-search/SKILL.md to make it project-local. Then trigger it with any of the phrases above in a Claude Code session.

Vibe search — mood-language search over a real catalog, no inference server — zsty.us