Shopify theme architect
Build every theme as a sections-everywhere Online Store 2.0 theme so merchants can rearrange the whole site in the theme editor. Start from the directory contract, then fill it in.
First connect to a store and start a live preview with shopify-cli-workflow
— scaffold this structure inside that folder so every edit hot-reloads.
Directory layout
layout/theme.liquid # the shell: <head>, header, {{ content_for_layout }}, footer
config/settings_schema.json # global theme settings (colors, type, logo, spacing)
config/settings_data.json # merchant's chosen values
templates/*.json # JSON templates that list which sections render
sections/*.liquid # every reusable block of UI, each with a {% schema %}
snippets/*.liquid # small partials rendered with {% render %}
blocks/*.liquid # theme blocks (OS 2.0) for nestable content
assets/ # base.css, global.js, fonts, static images
locales/en.default.json # all merchant-facing + storefront copy
The shell — layout/theme.liquid
- Put
{{ content_for_header }}in<head>and{{ content_for_layout }}in<body>. Render the header and footer as sections via{% sections 'header-group' %}/{% sections 'footer-group' %}so they live in the editor too. - Load one small
base.cssand deferglobal.js; per-section CSS belongs in a{% stylesheet %}inside that section. - Set
<html lang="{{ request.locale.iso_code }}">and render{{ settings.* }}design tokens as CSS custom properties on:root.
JSON templates
Each page template is data, not markup — it names sections and their order:
{
"sections": {
"hero": { "type": "hero" },
"featured": { "type": "featured-collection" }
},
"order": ["hero", "featured"]
}
Create templates/index.json, collection.json, product.json,
page.json, cart.json, 404.json. Ship a header-group.json and
footer-group.json for the persistent chrome.
Global settings
Expose the design system through settings_schema.json: a color group, a
typography group (heading + body font_picker, base size, scale), logo +
favicon, page width, and section spacing. Read them everywhere as
{{ settings.* }} — never hardcode a value a merchant should own.
Pair with luxury-storefront-aesthetic for the design language and
shopify-theme-section for the anatomy of each section file.