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.
| Check | What it checks |
|---|---|
theme/module-contract | The theme module is typed as ThemeModule, so its shape is compiler-enforced |
theme/structure | Every required file, block, page and shell is present |
theme/demo-store | Every demo store is a believable store that identifies itself as this theme |
theme/demo-stores | demos/ and the demos declaration in theme.config.ts agree |
theme/demo-art-hosting | Every demo image, in every store, is served from Queek — not a foreign host or a local file |
theme/code-quality | Header wiring, client directives, and no cross-theme imports |
theme/core-boundary | No SDK or framework imports, no app-code imports or escapes, no direct API calls, no store mutations |
theme/selection-metadata | best_for / auto_pick / min_images are values the backend picker can use |
theme/demo-completeness | Every auto-pickable variant is demonstrated in demo.json (and, advisably, in every alternative store) |
theme/subscribe-scope | Declares a subscribe scope with exactly one default variant |
theme/demo-block-types | Every section in every demo store is a block type core can render |
theme/composition-variants | Every section names a variant its theme implements |
theme/identity | manifest, config, demo and directory all agree on the slug |
theme/product-page-places-metafields | Every product page places the core-owned <ProductMetafields /> section |
theme/footer-shows-powered-by | Every footer variant renders the core-owned <PoweredByQueek /> attribution |
theme/fonts-self-hosted | Theme 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-description | Every template carries a description an AI can choose it by (≤ 300 chars) |
theme/template-screenshot | Every template has a 1280×800 screenshot, uploaded to R2 |
theme/template-chrome | A template's header and footer are variants the theme implements |
theme/template-style | A section's style keys are fields its variant declares |
theme/template-business | Every template names its own business in the platform's vocabulary |
theme/template-versions | Every design has its own home: no two list the same sections in the same order |
theme/template-designs | Every design names its template; a template's designs share its label and business and are told apart by design_label |
theme/template-pages | Every template ships about, sales and landing pages; sales and landing sell products |
theme/template-copy | Template copy is true of any store in its business: no store name, place, naira amount, promise or founding date |
theme/vendor-facts | A vendor's tagline, address, phone, email or description never falls back to the theme's own words |
theme/placeholder-content | No demo store still carries the starter's placeholder products or photos, and the theme's description is its own |
theme/markdown-html | renderMarkdown elements render as children, never through dangerouslySetInnerHTML |
theme/variant-parity | Every manifest variant has a renderer, and vice versa |
theme/field-parity | Each variant declares exactly the fields its renderer reads |
theme/design-tokens | Declares 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).