Production Shopify · Prestige as lab
Keep Prestige looking premium after custom sections ship
Prestige clients notice typography, whitespace, and full-bleed media before they notice Liquid. This guide is about shipping custom sections that still feel like Prestige—not dumping campaign HTML into a luxury theme and hoping the editor forgives you.
Production implementation guide · Updated 2026-08-03
Start here if your client runs Prestige
Use this guide when the storefront’s brand promise depends on editorial restraint—Maestrooo Prestige or a fork that still inherits its type scale, spacing rhythm, and image-led layouts.
This guide fits when
- Luxury, fashion, or beauty brands on Prestige who reject “developer-looking” custom modules
- HTML or Figma exports that must become merchant-editable without breaking full-bleed heroes
- Handoffs where the client (or their content team) will change copy and images weekly
- Agencies that get paid to make custom work indistinguishable from native Prestige sections
Choose a different guide when
- Dawn / free OS 2.0 reference builds — different visual contract and different guide
- Utility-first themes where dense UI and compact spacing are intentional
- App embeds and checkout extensibility (different packaging)
- One-off Liquid pages that never appear in the theme editor
Prestige’s design contract (what custom sections must obey)
On Prestige, “production ready” means the section inherits the theme’s typography and spacing language. Hardcoded font sizes, tight card grids, and nested max-width wrappers are the fastest way to make a $350 theme look like a landing-page builder.
Treat Prestige’s native sections as the style authority: generous vertical rhythm, restrained type hierarchy, and imagery that can go edge-to-edge. Your schema should expose content and layout choices—not a second design system.
Prestige expects Custom section anti-patterns ───────────────────────────── ──────────────────────────────── Theme font / size tokens font-size: 42px on headings Wide gutters + airy stacks Bootstrap-like tight card grids Full-bleed media bands Double wrappers + fixed 1200px boxes Plain setting labels "hero_title_v2" / "cta_url_primary" Defaults that look brand-ready Lorem + empty image pickers
If a reviewer toggles between a native Prestige section and yours, the gap should be content—not craft.
Rewrite design HTML into merchant-readable settings
Prestige buyers are design-sensitive and often non-technical. Setting IDs can be technical; labels cannot. “Main headline,” “Secondary button label,” and “Background image” beat “title_1,” “cta_b,” and “bg_asset.”
Map every visible HTML node to a setting or block the merchant can empty safely. Optional nodes must disappear when blank—empty luxury demos are worse than missing features.
Schema labels Prestige merchants understand
{
"name": "Editorial split",
"settings": [
{
"type": "text",
"id": "eyebrow",
"label": "Small label above headline",
"default": "New season"
},
{
"type": "text",
"id": "heading",
"label": "Main headline",
"default": "Tailoring for late evenings"
},
{
"type": "textarea",
"id": "supporting_text",
"label": "Supporting paragraph"
},
{
"type": "text",
"id": "primary_label",
"label": "Primary button label",
"default": "Shop the edit"
},
{
"type": "url",
"id": "primary_link",
"label": "Primary button link"
},
{
"type": "text",
"id": "secondary_label",
"label": "Secondary button label"
},
{
"type": "url",
"id": "secondary_link",
"label": "Secondary button link"
}
],
"presets": [{ "name": "Editorial split" }]
}Defaults should read like approved brand copy. Never ship lorem in a Prestige preset—clients demo the editor on day one.
Full-bleed imagery without boxing Prestige’s grid
Prestige storefronts sell with photography. Custom sections that trap images inside nested containers or ignore image width filters look amateur next to native full-bleed bands.
Prefer image_picker + image_url/image_tag with sensible widths. Avoid raw <img src="{{ settings.x }}"> without size discipline—Prestige homepages are LCP-sensitive because the photography is large by intent.
Constrained image output for an editorial band
{% if section.settings.image != blank %}
<div class="editorial-split__media">
{{
section.settings.image
| image_url: width: 2400
| image_tag:
loading: 'lazy',
widths: '600, 900, 1200, 1800, 2400',
sizes: '(min-width: 990px) 50vw, 100vw',
alt: section.settings.image.alt
| escape
}}
</div>
{% endif %}Lazy-load below-fold bands. Above-fold Prestige heroes may need loading: 'eager'—decide per placement, don’t copy blindly.
- Annotated comparison: left = native Prestige image band edge-to-edge; right = HTML port trapped in a padded card.
- If your custom section matches the right column, merchants will ask you to “make it look more like Prestige.”
- Fix is usually structure and CSS containment—not more hex color settings.
Photography width is a product requirement on Prestige, not decoration.
Example: press logo wall merchants can reorder
Press and as-seen-in rows are constant Prestige requests. They are block territory: each logo is a row the merchant can add, remove, and reorder without a deploy.
Press logo blocks + shopify_attributes
<ul class="press-logos" role="list">
{% for block in section.blocks %}
<li class="press-logos__item" {{ block.shopify_attributes }}>
{% if block.settings.logo != blank %}
{{
block.settings.logo
| image_url: width: 400
| image_tag: loading: 'lazy', alt: block.settings.outlet_name
}}
{% elsif block.settings.outlet_name != blank %}
<span class="press-logos__fallback">{{ block.settings.outlet_name }}</span>
{% endif %}
</li>
{% endfor %}
</ul>Fallback text matters when a logo asset is pending—Prestige demos often ship before final press creatives arrive.
Press row block + seeded preset
"blocks": [
{
"type": "outlet",
"name": "Press outlet",
"settings": [
{ "type": "text", "id": "outlet_name", "label": "Publication name" },
{ "type": "image_picker", "id": "logo", "label": "Logo image" },
{ "type": "url", "id": "link", "label": "Optional article link" }
]
}
],
"presets": [
{
"name": "Press logos",
"blocks": [
{ "type": "outlet", "settings": { "outlet_name": "Vogue" } },
{ "type": "outlet", "settings": { "outlet_name": "Elle" } },
{ "type": "outlet", "settings": { "outlet_name": "Harper’s Bazaar" } }
]
}
]Seed three named outlets so the editor teaches repetition immediately—empty block lists look broken on minimalist themes.
Example: editorial split with two CTAs
Editorial splits (image + copy + dual actions) show up constantly on Prestige homepages and landing templates. Keep the structure flat: settings for copy and links, not a block per paragraph, unless the design truly repeats.
Dual CTA outputs that unmount when blank
<div class="editorial-split__copy">
{% if section.settings.eyebrow != blank %}
<p class="editorial-split__eyebrow">{{ section.settings.eyebrow }}</p>
{% endif %}
{% if section.settings.heading != blank %}
<h2 class="editorial-split__heading">{{ section.settings.heading }}</h2>
{% endif %}
{% if section.settings.supporting_text != blank %}
<p class="editorial-split__text">{{ section.settings.supporting_text }}</p>
{% endif %}
<div class="editorial-split__actions">
{% if section.settings.primary_label != blank %}
<a class="button" href="{{ section.settings.primary_link }}">
{{ section.settings.primary_label }}
</a>
{% endif %}
{% if section.settings.secondary_label != blank %}
<a class="button button--secondary" href="{{ section.settings.secondary_link }}">
{{ section.settings.secondary_label }}
</a>
{% endif %}
</div>
</div>Secondary CTA absence must not leave a flex gap that looks like a missing button on a sparse Prestige layout.
When custom CSS makes Prestige look like a different brand
Scoped CSS is mandatory, but scoping alone is not enough. A perfectly scoped font-size: 3rem still breaks Prestige’s voice. Prefer inheriting theme typography and limiting CSS to layout, spacing controls, and media behavior.
If the brand demands a one-off display treatment, document it in an info setting so the next developer does not “fix” it back to theme norms without approval.
Scope layout — don’t re-skin Prestige type
{%- style -%}
#shopify-section-{{ section.id }} .editorial-split {
padding-block: {{ section.settings.padding }}px;
}
#shopify-section-{{ section.id }} .editorial-split__media img {
display: block;
width: 100%;
height: auto;
}
{%- endstyle -%}Padding as a merchant setting is useful. Rebuilding the entire type ramp in CSS usually is not.
Handoff: demo-ready defaults before the client opens the editor
Prestige projects often include a live walkthrough. Empty image pickers and placeholder Latin are treated as incomplete delivery—even when the architecture is correct.
Before handoff: presets named for merchants, seeded blocks where repetition exists, and defaults that match approved campaign copy. Then show Add section on a clean template so they believe they can self-serve.
- Add section lists your preset under a human name (Editorial split, Press logos).
- Opening the section shows filled defaults—not blank image slots in the first viewport.
- Reordering a press logo updates the storefront without a deploy.
- Clearing the secondary CTA removes the control from the layout immediately.
Editor theater is part of production on premium themes.
Practice on a Prestige (or Prestige-fork) theme
Do this in a Prestige copy or close fork before using any generator. The point is judgment—detecting when markup fights the theme—not file generation speed.
- 01
Audit a native Prestige band
Open a native image-with-text or similar section. Note type size, padding, and how media bleeds. Write three rules your custom section must not violate.
- 02
Build the press logo wall
Create a blocks-based press section with seeded outlets, shopify_attributes, and quiet styling. Reorder in the editor.
- 03
Build the editorial split
Flat settings, dual blank-safe CTAs, responsive image_tag, merchant-readable labels, named preset.
- 04
Break it on purpose
Upload an extreme crop, clear secondary CTA, switch templates—document what fails.
- 05
Handoff rehearsal
Insert both sections from Add section on a clean template and walk through a five-minute merchant script.
Accelerate drafts after you can explain the output
Once you can defend Prestige’s design contract, setting language, and media behavior by hand, the converter can speed up first Liquid drafts from campaign HTML. You still owe scoping discipline, blank-safe CTAs, and editor-ready presets before handoff.
Supporting acceleration only — Prestige quality is judged visually, not by export speed.
Continue studying for premium theme delivery
Next reading for teams shipping on design-forward Shopify themes—not a list of keyword landings.
Beginner
Language and section mental models before premium constraints.
- Shopify Liquid for beginners
Read section files without guessing filters and objects.
- How Shopify sections work
OS 2.0 composition before theme-specific aesthetics.
Intermediate
Schema craft and media-heavy modules.
- Shopify schema guide
Labels, types, and editor UX that non-technical brands accept.
- Dynamic Shopify blocks guide
Press walls, lookbooks, and other reorderable rows.
- Shopify section tutorial
Shipping workflow from file to template.
Advanced
Delivery judgment under brand scrutiny.
- Shopify development experience
How real teams survive design QA and launch weeks.
- Client case studies
Production outcomes beyond happy-path demos.
- Resources hub
Index of guides for continued study.
Editorial review
Reviewed by the HTML to Liquid Converter team


Content is reviewed by the HTML to Liquid Converter Shopify development team before publication. Technical accuracy is validated against current Shopify Online Store 2.0 conventions and active client theme work.
Last updated:
Questions or corrections? Contact us.