From bigcommerce-commerce
Builds BigCommerce Stencil storefront themes using Handlebars templates, YAML front matter, theme objects, SCSS, JavaScript modules, config.json, schema.json, and Stencil CLI.
npx claudepluginhub orcaqubits/agentic-commerce-skills-plugins --plugin bigcommerce-commerceThis skill is limited to using the following tools:
**Fetch live docs**:
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Fetch live docs:
https://developer.bigcommerce.com/docs/storefront/stencil for Stencil overviewhttps://developer.bigcommerce.com/docs/storefront/stencil/themes/context/object-reference for theme object referencesite:developer.bigcommerce.com stencil handlebars helpers for Handlebars helper referenceStencil is BigCommerce's server-rendered theme engine:
.html) define page structuretemplates/
├── layout/
│ ├── base.html # Master layout — header, footer, body
│ └── empty.html # Minimal layout (checkout, etc.)
├── pages/
│ ├── home.html # Homepage
│ ├── product.html # Product detail page
│ ├── category.html # Category listing
│ ├── cart.html # Cart page
│ ├── checkout.html # Checkout page
│ ├── account/ # Customer account pages
│ └── ...
├── components/
│ ├── common/ # Header, footer, navigation
│ ├── products/ # Product cards, options, gallery
│ ├── cart/ # Cart items, totals
│ └── ...
└── ...
YAML block at the top of template files that declares data requirements:
---
product:
videos:
limit: {{theme_settings.product_videos_count}}
reviews:
limit: {{theme_settings.product_reviews_count}}
related_products:
limit: {{theme_settings.related_products_count}}
similar_by_views:
limit: {{theme_settings.similar_by_views_count}}
---
product — product details, images, videos, reviews, related productscategory — category info, products in categorycart — cart items, totalscustomer — logged-in customer datashop_by_brand — brand listingnew_products, featured_products, top_products — product collections| Object | Available On | Contains |
|---|---|---|
product | Product page | name, price, images, options, variants, description, reviews |
category | Category page | name, description, products, subcategories |
cart | Cart page | items, subtotal, taxes, grand_total |
customer | When logged in | name, email, addresses, orders |
settings | All pages | store name, currency, logo, URLs |
theme_settings | All pages | config.json setting values |
breadcrumbs | Most pages | navigation breadcrumbs |
page | CMS pages | title, content, URL |
{{product.title}}
{{product.price.without_tax.formatted}}
{{#each product.images}}
<img src="{{getImage this 'product_size'}}" alt="{{this.alt}}">
{{/each}}
{{#if condition}}...{{else}}...{{/if}} — conditional{{#unless condition}}...{{/unless}} — inverse conditional{{#each collection}}...{{/each}} — iteration{{#with object}}...{{/with}} — context shifting{{getImage image 'size_name'}} — generate image URL at specific size{{cdn 'path/to/asset'}} — CDN-prefixed asset URL{{stylesheet 'path/to/css'}} — include stylesheet{{inject 'variable' value}} — pass data to JavaScript context{{jsContext}} — output injected variables as JSON for JS consumption{{lang 'translation_key'}} — internationalization{{money price}} — format currency{{truncate text length}} — truncate string{{any collection}} — check if collection has items{{all condition1 condition2}} — logical AND{{compare a '===' b}} — comparisonInclude reusable template fragments:
{{> components/products/card product}} — render a partial with context{{> components/common/header}} — include a componenttemplates/components/assets/scss/
├── settings/ # Variables, mixins
│ ├── foundation/
│ └── citadel/
├── components/ # Component styles
├── layouts/ # Layout styles
├── tools/ # Utility mixins
└── theme.scss # Main entry point
Access config.json values: stencilColor("primary"), stencilNumber("font-size"), stencilString("font-family")
Stencil uses webpack for JS bundling:
assets/js/app.jsUse {{inject}} in templates and {{jsContext}} to pass server data to client JS:
{{inject 'productId' product.id}}
<script>{{jsContext}}</script>
Access in JS via this.context in PageManager subclasses.
Cornerstone's page lifecycle manager:
PageManager for page-specific JSonReady() — DOM ready, initialize functionalityassets/js/app.jsTheme configuration with settings and variations:
settings — default values for all theme settingsvariations — named presets (Light, Bold, Warm, etc.)read_only_files — files that cannot be edited in Theme EditorDefines the Theme Editor UI:
color, font, select, checkbox, text, range, imageDimensionconfig.json settings keys{{inject}} to pass data to JS — don't scrape the DOM{{cdn}} for all asset URLs — ensures CDN delivery{{{sanitize html}}} for HTML, {{variable}} auto-escapesFetch the Stencil documentation and theme object reference for exact helper syntax, front matter keys, and object structure before implementing.