Markos's hero creatives are deliberately message-agnostic: a premium product shot with a built-in dark negative-space zone and no baked-in text. This page proves the other half of the system — the programmatic overlay. Each of the four products (C80, F85, F80, E25) gets a Non-Promo and a Promo version — headlines written by a copy panel and fitted to brand by a UX panel, then rendered from a data object onto the same photo in SOLE's real tokens (Barlow Condensed, red #b21e2d, the production scrim). Promo slides run the SOLE July 4th Sale as a dated window (the live countdown only switches on in the final 72 hours). Copy here is v2 — revised through an adversarial copy/UX critique and a skeptic adjudication panel. Change the data → change the message. No re-shoot.
sole-2026/sections/hero.liquid — same left-band / bottom-band scrims, same pill buttons, same type scale — scaled with container-query units so what you see is what ships.Pick a product and a version. The same photo hosts an evergreen product story or the July 4th promo equally well. Click any preview to enlarge it. Open “Show the data” to see the exact object driving the render.
Desktop · 1920×720
Phone · 375×720
Every Phase-1 creative with finished, panel-written copy — an evergreen Non-Promo story and a SOLE July 4th Sale Promo. Desktop + phone for each.
In production each overlay is one content object. The creative (photo, focal point, safe-zone, scrim strength) comes from the planned hero_creative metaobject; the message comes from per-slide block settings. Same split you see in this demo.
{
"kind": "product", // product | promo
"eyebrow": "The Flagship",
"heading": "Hotel-Gym Power, Now At Home",
"headingMobile": "Hotel Power, At Home", // ≤5 words
"sub": "Our flagship treadmill — commercial-grade, yours to own.",
"subMobile": "The flagship, yours to own.", // ≤1 line
"badges": ["Lifetime Frame & Motor",
"No Monthly Subscription",
"Commercial-Grade Build"],
"ctas": [{ "label":"Explore the F85", "style":"primary" },
{ "label":"Why Commercial-Grade", "style":"outline" }],
"countdownTo": null // promo → July 19 deadline
}
hero_creative (metaobject) ├─ desktop_image / mobile_image ├─ focal_x / focal_y → object-position ├─ safe_zone left | bottom └─ scrim_strength light|med|heavy slide block (section settings) ├─ heading / subheading ├─ badge1..3 / show_badges ├─ cta1 / cta2 (text) └─ is_promo_slide → promotion SSOT
promotion metaobject (the weekly-promo single-source-of-truth that already drives the announcement bar) — a slide flagged is_promo_slide pulls its headline, countdown deadline and CTA from there. Nothing new to wire per promo.| Copy budget | Desktop | Mobile |
|---|---|---|
| H1 | ≤ 6 words / 2 lines | ≤ 5 words / 2 lines |
| Subhead | ≤ 2 lines | ≤ 1 line |
| Badges | ≤ 3 | wrap / optional |
| CTAs | ≤ 2 | 1 primary |
| Contract | Value |
|---|---|
| Copy-zone luminance | ≤ 0.175 (white text reads unaided) |
| Overlay copy color | White only |
Red #b21e2d | Accent / fills only — never a flat field |
| Safe zone | Desktop = left band · Mobile = bottom band |