Queek docs

Checks reference

Every rule npm run check runs, and what Queek checks when you submit.

npm run check runs these rules against your theme. Errors block submission; warnings are advice. .queek-theme.yml can tune warnings only — nothing turns an error off.

CheckWhat it checks
theme/module-contractThe theme module is typed as ThemeModule, so its shape is compiler-enforced
theme/structureEvery required file, block, page and shell is present
theme/demo-storeEvery demo store is a believable store that identifies itself as this theme
theme/demo-storesdemos/ and the demos declaration in theme.config.ts agree
theme/demo-art-hostingEvery demo image, in every store, is served from Queek — not a foreign host or a local file
theme/code-qualityHeader wiring, client directives, and no cross-theme imports
theme/core-boundaryNo SDK or framework imports, no app-code imports or escapes, no direct API calls, no store mutations
theme/selection-metadatabest_for / auto_pick / min_images are values the backend picker can use
theme/demo-completenessEvery auto-pickable variant is demonstrated in demo.json (and, advisably, in every alternative store)
theme/subscribe-scopeDeclares a subscribe scope with exactly one default variant
theme/demo-block-typesEvery section in every demo store is a block type core can render
theme/composition-variantsEvery section names a variant its theme implements
theme/identitymanifest, config, demo and directory all agree on the slug
theme/product-page-places-metafieldsEvery product page places the core-owned <ProductMetafields /> section
theme/footer-shows-powered-byEvery footer variant renders the core-owned <PoweredByQueek /> attribution
theme/fonts-self-hostedTheme fonts ship as files in the theme: next/font/google (fails builds) and a Google Fonts @import (dropped or render-blocking) are rejected
theme/template-descriptionEvery template carries a description an AI can choose it by (≤ 300 chars)
theme/template-screenshotEvery template has a 1280×800 screenshot, uploaded to R2
theme/template-chromeA template's header and footer are variants the theme implements
theme/template-styleA section's style keys are fields its variant declares
theme/template-businessEvery template names its own business in the platform's vocabulary
theme/template-versionsEvery design has its own home: no two list the same sections in the same order
theme/template-designsEvery design names its template; a template's designs share its label and business and are told apart by design_label
theme/template-pagesEvery template ships about, sales and landing pages; sales and landing sell products
theme/template-copyTemplate copy is true of any store in its business: no store name, place, naira amount, promise or founding date
theme/vendor-factsA vendor's tagline, address, phone, email or description never falls back to the theme's own words
theme/placeholder-contentNo demo store still carries the starter's placeholder products or photos, and the theme's description is its own
theme/markdown-htmlrenderMarkdown elements render as children, never through dangerouslySetInnerHTML
theme/variant-parityEvery manifest variant has a renderer, and vice versa
theme/field-parityEach variant declares exactly the fields its renderer reads
theme/design-tokensDeclares a complete token set, and its CSS actually consumes it

Checked when you submit

These need Queek’s side — its other themes, a server render, or its storage — so they run only when you submit. A clean npm run check means your theme passes everything above; Queek runs these plus everything above.

  • theme/divergence — the design is its own, not a copy of an existing Queek theme.
  • theme/renders — every declared variant renders visible content with sample data.
  • theme/price-range-signal — a product priced as a range shows "From", not its floor as the price.
  • theme/demo-art-hosting — demo images are moved onto Queek’s CDN (done for you).
  • theme/template-screenshot — template screenshots are uploaded (done for you).

On this page