The One Template · Master Specification

RevShift × Jessar · 2026-06-10 · The single PDP template, metafield-gated sections, recipe matrix · governs the Hyper Liquid port · Internal

Governing rules

One template. Every product — kettle to junction box — renders through the same Liquid template. There are no per-category templates. Ever.
Sections are metafield-gated. A section renders if and only if its gate metafield is populated. Empty → skipped silently. Sections fail closed.
"Recipes" are data states, not templates. The Caraway-style page variations emerge from which metafields a product carries. A product upgrades toward hero by gaining content — never by switching templates.
The sticky nav derives itself from whichever sections rendered, plus the persistent SKU + "Request price list" inquiry CTA.
Titles are canonical (Name — Variant, Size, no brand names) and the template splits at the em-dash: serif display name + variant chips.
Variant families are metaobjects (variant_family → product references). Individual listings always; chips/swatches interlink siblings. Never Shopify variants.
Image-forward by design: no two consecutive viewports without imagery or a background change. Image sections ship OFF until assets exist — each OFF slot names the asset needed (the shot list writes itself).
Bilingual EN/FR first-class on every section. Brand expressed via the sub-brand block and dot system, not titles.
Colour comes from product imagery and swatches — plus the existing accent moments (eyebrows, CTAs, dealer band, sub-brand tints). No painted sections, no tinted galleries; tested and rejected 2026-06-10.

Section stack × recipe matrix

on conditional (gate populated) off (gate empty)
#SectionGate (renders when…)Kettle
hero
Toaster
appliance
Fixture
lighting
BulbElectricalMinimum
1Nav · breadcrumb + brand chipalways · breadcrumb from v3 taxonomy
2Hero gallery (multiply panel + 4 thumbs)always · box render takes a thumb slot
3Title split + variant chipsalways · split at em-dash
4Variant-family bandjessar.variant_family (metaobject ref)
5What's includedfeatures non-empty (top 4–5)
6Meta-row beam + CTAsalways · 3 fields by recipe
7Sticky section nav + inquiryalways · links auto-derived
8Heritage line (positioned above dealer CTA — not top-of-page; repetitive when browsing)site setting (soft editorial band)
9Story (video-capable)jessar.story_body
10Benefit strip (typographic top-5)4+ feature bullets — 96% of catalog
11Function grid (one component, 5 recipes)jessar.functions JSONAC fitB photoD plate
12Feature/function bands (image + text)jessar.feature_bands — needs imageryoff at launch
12b"Up close" trio — image cards + tap-to-reveal (Our Place pattern)jessar.use_cases with images (3) — upgrade of made-for tileswhen imagery
12cFeature accordion + large image (Caraway pattern)jessar.feature_bands ≥ 3 — compact alternative when page length matters
13Build / materials grid (v2 4-col hairline)jessar.materials
14Bulb-attach ("the right bulb")bulb_base + matching bulb exists — 54% of fixtures
15Made-for tiles (image slots)jessar.use_cases
16Retail-ready (box render + case pack)box-render media taggedgallery thumb
17Dark specs panel + PDF/samplealways
18Certs strip (in dark panel)certs / warranty populatedpending
19Sub-brand block / compact stripfull when line narrative set; strip otherwise● full● full● strip● strip● strip● strip
20Dealer CTA + partner wordmarkssite setting (client retailer list)
21Cross-sell (family → line → category)auto · 4 cards
22Footeralways · "since 1996"

Row 11: one grid component, five field recipes — A function (appliances) · B photometrics (bulbs) · C fit & installation (fixtures) · D ratings plate (electrical) · E compatibility/care (kitchen/home, covered by 13 + meta). Demo renders: hero_pdp_sm_v5 (kettle) · appliance_pdp_sm_v5_demo (toaster) · lighting_pdp_sm_v4_demo (fixture) · standard_pdp_sm_v3 (bulb) · electrical_pdp_sm_v4_demo (surge bar).

Metafield schema — what powers the gates

MetafieldTypeFeedsData status
jessar.variant_familymetaobject referenceVariant band (4)Derivable from canonical titles — script builds metaobjects
jessar.feature_bulletslist.textWhat's included (5) · Benefit strip (10) · FeaturesLive — 96% have 4+
jessar.functionsJSON (label/value/detail + recipe key)Function grid (11)Extracted, staged — appliances 64 · fixtures 402 · electrical 84 · bulbs from live fields
jessar.feature_bandsJSON (eyebrow/headline/copy/image/callouts)Bands (12)Copy derivable; imagery = shot list — OFF until assets
jessar.materials · care_instructions · capacityexistingBuild split (13) · specsLive (94% / 53% / 55% kitchen)
jessar.bulb_base + family fieldstextBulb-attach (14) · Fit gridExtracted, staged — 96% of fixtures covered
jessar.use_cases · story_body · lifestyle mediaJSON / richtext / fileMade-for (15) · Story (9)Hero-tier content — written per hero SKU (20-cap + extras)
box-render media (alt-tagged)product mediaRetail-ready (16) · gallery thumbLive — 107 branded box renders + packshots pushed
jessar.certifications · warrantylist.text / textCerts strip (18)Bulbs/lighting live · kitchen pending cert_request
jessar.qty_per_package · qty_per_container · barcodeexistingRetail-ready grid · specsLive — ~100%

Why this is the brand-elevation answer

It scales up, not sideways. Today most products render the lean recipe and still look considered (typography, heritage, trust, real data). As photography, video and copy land — facility film, lifestyle shoots, the AI-imagery program — sections switch on per product with zero engineering. The site visibly improves every month without a redesign.

It's honest about today and ambitious about tomorrow. Off-by-default image sections double as the production shot list: every dark slot literally names the asset that turns it on. That's the growth plan embedded in the template.

And it's one codebase to maintain — one template, documented section by section with the RevShift comment convention, handed to Jessar as a system they can grow, not a set of pages they'll break.

Approval of this spec + the five demo renders = the structure the Hyper Liquid port builds against. Render-before-commit, per the quality bar.