Designs catalog

Pre-made, remixable designs your users can start from — so your site never launches with an empty canvas.

Why pre-made designs

Every personalization site starts its users from a design, not a blank canvas. The designs catalog is that supply: every published, remixable design on the Snowcone marketplace, each already paired with a real product from the product catalog. It’s the same public Meilisearch surface as products — a second index, snowcone-designs, readable with the same public search key.

Catalog designs render from every shop — including fresh sandbox shops — with no allowlist configuration, and the renders are free: a design= mockup never counts against your usage budget. Billing starts only when your user personalizes a design (their artwork, your shop’s render). Search, pick one, and your first mockup works in the same minute.

The design document

A design document carries the components of a mockup URL — never an assembled URL — so you compose it with your own shop and any variant picks, exactly like the rest of the URL grammar.

json
{
  "id": "9b2f6c3e-…",
  "pairingId": "9b2f6c3e-…",
  "slug": "watercolor-christmas-card",
  "title": "Watercolor Christmas Card",
  "description": "Hand-painted holiday scene.",
  "tags": ["holiday", "watercolor"],
  "occasion": "christmas",
  "style": "watercolor",
  "productId": "KMYKUK",
  "variant": "e92f40",
  "asset": "https://…storage.snowcone.app/exports/full.png",
  "assets": { "front": "https://…/front.png", "back": "https://…/back.png" },
  "previewThumbnail": "https://…/thumb.png",
  "minPriceCents": 1999,
  "caption": "Pink cowgirl boots standing on a cratered moon surface…",
  "license": { "remixable": true },
  "curated": true,
  "slots": null
}

Props

id / pairingIdstring
The design's stable catalog id.
title / description / tagsstring | string[]
Display metadata for galleries and search.
occasion / stylestring | null
Curated facets — filterable (e.g. occasion = 'christmas').
productIdstring
The product code the design was made for — the mockup URL path segment.
variantstring | null
The product's default variant id. Optional in URLs — the server falls back on its own.
asseturl | null
Single-image render component (the full design as one image). Use as bare asset=.
assets{ [placementKey]: url } | null
Per-placement render components. Use as asset.<key>= params. Prefer this over asset when present.
previewThumbnailurl | null
A pre-rendered product preview for catalog tiles.
minPriceCentsnumber | null
Suggested-retail floor in USD cents.
license{ remixable: true }
Every catalog design may be remixed and sold from your shop.
captionstring | null
AI visual description of what the design depicts — powers semantic search.
curatedboolean
First-party-curated by Snowcone. Filterable: curated = true.
slotsnull (RESERVED)
Always null today. Reserved for structured per-placement slot metadata (text and photo fields you can fill programmatically). Don't depend on its absence.

Render one

Take the doc’s id (or slug), put it in design= on the doc’s productId path, add your shop, and it’s an <img> — rendered server-side from the published components, for free. The asset/assets components stay in the doc for canvas and remix flows; you never need them just to render. Variant picks via opt.<attr> and per-placement layout via tile/align work the same as any other mockup.

html
<!-- Render by reference: the doc's id (or slug) + your shop = a FREE mockup. -->
<img src="https://img.snowcone.app/KMYKUK?design=9b2f6c3e-…&shop=YOUR_SHOP_ID" />

<!-- The slug works too: -->
<img src="https://img.snowcone.app/KMYKUK?design=watercolor-christmas-card&shop=YOUR_SHOP_ID" />

<!-- Variant picks compose like any mockup (still free): -->
<img src="https://img.snowcone.app/KMYKUK?design=watercolor-christmas-card&opt.color=sage&shop=YOUR_SHOP_ID" />