Theme requirements
What gets a theme rejected, grouped by area.
npm run check enforces every rule here; the Checks reference lists them all.
Data
- Never fetch. No
fetch, noaxios, no direct API calls — read the store through the kit's hooks (theme/core-boundary). - Never touch the SDK. No client SDK and no kit SDK imports (
theme/core-boundary). - Never write to the kit's stores. No setting the user, clearing carts or switching delivery modes (
theme/core-boundary).
Components
- The logo links home. It is a link, never a button — a button cannot be crawled or middle-clicked (
theme/code-quality). - Menu links come from
menuItemToHref, which resolves the vendor's own domain. A hand-built URL breaks on at least one of them (theme/code-quality). - A component that uses hooks starts with
'use client'(theme/code-quality). - A vendor's facts — tagline, address, phone, email, description — render nothing when empty. Never fall back to your own words (
theme/vendor-facts).
Framework
- No
next/*imports. Links and navigation come from@usequeek/theme-kit/navigation(theme/core-boundary). - Images use
<Image />from the kit, never a raw<img>(theme/code-quality). - Fonts ship as files inside the theme, never fetched from Google (
theme/fonts-self-hosted). renderMarkdownreturns elements, so render them as children — never throughdangerouslySetInnerHTML, which prints[object Object](theme/markdown-html).
Attribution
- Every footer renders
<PoweredByQueek />from the kit, in the theme's own placement and spacing (theme/footer-shows-powered-by).
Content
- Products and photos are your own. The starter's stand-ins must go, and no real brand's photography (
theme/placeholder-content). - Template copy names no store, no place, no price, no offer and no promise (
theme/template-copy).
The wording of each rule is in THEME.md — see its component rules and attribution.