LUS Brands
Context
LUS Brands — Love Ur Curls — sells curly, wavy and coily hair care direct to consumers at loveurcurls.com. The catalog is formula-led rather than shade-led: cleansers, conditioners and stylers chosen by curl pattern and hair thickness, in more than one size and fragrance. A kids line, LUCK, sells to a different shopper from inside the same store — one cart, one checkout, one customer record.
The storefront runs Shopify with Dawn 15.4.1 as its theme base. Naming that first is the point. Dawn is Shopify's own free reference theme, it's the code this store started from, and a substantial amount of what ships today is still Dawn's. Our work sits inside it, not in place of it.
Storefront Facts
- Platform: Shopify — Dawn 15.4.1 theme base
- Storefront: loveurcurls.com
- Industry: Haircare, direct to consumer, plus a kids sub-brand
- Documented builds: 77
- Capability areas: 41, across 10 categories
- Surfaces: Home, product detail, collection, cart, search, blog, landing, global
- Attribution: 63 Deploi-authored, 14 Deploi-modified vendor
- Status: Live — verified 2026-09-06
Capability Coverage
Documented builds per area, areas with four or more shown. Areas with a published hub link out.
Product Detail Experience — Metafield-driven PDP content 16 · Variant-aware content and media 8 · Ingredient transparency 4
Performance, Accessibility & Platform Health — Accessibility remediation 14 · Design system 13 · Media and asset loading strategy 12 · Vendor widget remediation 6
Content, Campaigns & Editorial — Art-directed hero and banner system 11 · Brand story and editorial sections 10 · Video and shoppable media 7 · FAQ and self-service content 6 · Editorial blog 4
Search, Filtering & Discovery — Filters and faceted navigation 7 · Collection merchandising rails 5 · Recommendations and cross-sell 4
Navigation & Information Architecture — Mega menu and mobile navigation 7
Multi-Market & Multi-Brand Storefronts — Sub-brand theming 6
Cart, Checkout & Conversion — AJAX cart drawer without an app 4
Twenty-three further areas carry one to three builds each, including guided selling quizzes and finders 3, fixed bundles and kits 2, variant swatches and shade pickers 2, campaign landing pages without a page builder 1 and structured data for AI answers 1, alongside subscription purchase options and geo routing.
Engineering Themes
Merchandising That Changes Without a Deploy
The recurring ask here was never a feature; it was that a product launch stop being a developer ticket. The 2026 product page was rebuilt as one custom section declaring 26 block types beyond Dawn's set — key_ingredients and pairs_well_with among them — all dispatched from one {% case block.type %}, so a merchandiser composes the page in the theme editor. Per-product brand color comes from product.metafields.custom.atc_background, emitted as --atc-button-color rather than inlined, so the sticky mobile bar reuses the same token. The product information tabs read How To, Ingredients, FAQs and Tips from metafields and metaobjects, then decide server-side whether a tab exists at all. Same trade each time: more logic in Liquid for us, no ticket for them. If your merchandising calendar moves faster than your release calendar, that is the trade worth understanding before anything else on this page.
Variant-Awareness Running Through the Whole Page
A size-and-fragrance catalog breaks the assumption that a product page is one page. The PDP hero resolves art and copy from a heroic metaobject and refetches itself through the Section Rendering API on the theme's variant-change channel, swapping only the inner content node so the parallax host survives. Media was harder. Shopify associates media with a variant through a single variant-image field, which cannot say "these four shots belong to the 8.5oz fragrance-free version." An alt-text convention and a four-tier matcher turn the alt text merchandisers already type into a match key, and the gallery that consumes it filters media per variant in Liquid — so the correct gallery is in the first paint, not repainted after it.
Two Audiences, One Theme
Shopify has no first-class notion of a sub-brand inside a storefront. Markets handle country and currency, not audience, and a second store would split your cart and your customer record. So the kids line rests on kids-page-flag.liquid, a six-line snippet returning the string true or false after testing whether the page, product or collection handle or the template suffix contains "kids". theme.liquid captures it once, adds a kids_page class to <body> and publishes --kids-page-color. Everything downstream is a selector, not a branch. The header swaps the entire navigation to a second link list off that flag; the announcement bar reuses it as a content filter, so a kids-only promo is a theme-editor action. Resolving it in Liquid keeps the wrong brand color off the first paint.
Constraints We Worked Inside
A vendor theme that has to keep working. The custom product section renders inside Dawn's own <product-info> element and keeps Dawn's element ids, so Dawn's stock scripts keep running, and Dawn's volume pricing, quantity rules and media modal are carried over unchanged.
A real build step on a platform that has none. Shopify ships whatever is in the assets folder, so build-theme-assets.mjs runs esbuild locally and its artifacts are committed into the theme. That constrains it hard: Liquid references assets by literal filename, so nothing may be renamed, hashed or relocated, and assets containing Liquid delimiters must never pass through a minifier. Dawn's core scripts concatenate into theme-core.min.js with identifiers left unmangled, because other theme scripts subclass Dawn's global classes and mangling would break them.
A buy box shared with purchase-option apps. More than one subscription app has had a widget in this product form. The section mounts the plan picker for the one in use at an exact slot between the price node and the add-to-cart button, wires that widget's price back into the theme's price element, and hides the others with a stylesheet rule — blunt, and a hazard if anyone re-enables one of those apps.
Merchandising that had to stay editable. Hero art, ingredients, how-to steps, FAQs and quiz questions all resolve from a metafield, a metaobject or a block setting, because the business had to change them without a deploy. Canada is a separate storefront rather than a market on one shop, so country detection runs client-side.
Selected Builds
Deploi-authored except where noted.
Product detail page
- Rebuilt 2026 PDP section with merchandiser-composable blocks — 26 block types, four product templates, per-product ATC color.
- Metafield-driven product information tabs with variant refresh
- Variant-aware PDP hero banner driven by a 'heroic' metaobject
- Alt-text convention that maps product media to variants without metafields
- Alt-text driven variant media gallery with tiered matching
Collection, search and home
- Vertical filter rail and an in-place mobile filter accordion — replaces Dawn's drill-down drawer.
- Merchandisable homepage carousel with a tag-driven badge engine
Support content
- Metafield-driven two-level FAQ accordion inside a help-center app's shell — Deploi-modified vendor: the shell and its scripts are the app's, the accordion is ours.
Campaign, hero and video
- DE Hero: art-directed image/video hero with layout controls — a hand-built
<picture>with a real mobile crop, both aspect ratios published as tokens. - Responsive video hero with independent desktop/mobile sources and single-source-of-truth playback controls — two video elements, one set of controls, only the matching breakpoint buffering.
- Per-collection hero banner driven entirely by collection metafields — four fields on the collection record instead of a hero per template.
- Deferred LyveCom shoppable-video mounting on the product page — our loader around a vendor script; the player, the carousel and the product tagging are the app's.
What We Would Not Claim
A large share of this storefront is a theme we extended rather than authored. Dawn 15.4.1 is Shopify's code, it still renders a meaningful part of this store, and we did not write it. The cart is the clearest case: what ships is an extension of Dawn's cart — Dawn's drawer, its line-item rendering, its section-rendering fragments — with our behavior on top. It isn't a cart we wrote, and no page here says it is.
Inside the product page we rebuilt, the volume pricing, the quantity rules, the media modal and the model viewer are Dawn's, carried over unchanged. Our section renders around them. They aren't ours, and we wouldn't describe them as ours.
Fourteen of the 77 builds documented here are marked Deploi-modified vendor: we changed something that already existed rather than authored it. Where that's true, the build page says so in its fact strip, in words. Stock Dawn sections we merely inherited are cataloged internally and never published as ours. We claim no certification or partner status of any kind.
All Builds
Thirty-nine of the 77 have published pages so far, by surface:
- Product detail page — PDP blocks · info tabs · heroic banner · alt-text classifier · media gallery · size-label variant picker · sticky add-to-cart bar · LyveCom video mounting · arched icon grid block · media gallery hardening · bundle-and-save block · how-to step system · variant-aware savings badge
- Collection and search — vertical facets · collection hero banner · featured-collection card · card hover video · collapsible filter sidebar · house pagination
- Home — featured carousel · shop-by-category carousel · press logo strip · kids featured collection · start-with-the-basics routine · rich-text typography system
- Landing and campaign — image banner · DE hero · video hero · brand story split panel · help-center FAQ engine · kids FAQ page
- Quiz — curl quiz engine · quiz results rules engine
- Global — audience-switching header · detached mobile drawer · metafield breadcrumbs · audience-targeted announcement bar · theme-wide section reveal · market selector hardening
Ready to Push a Shopify Theme Further?
This is what it looks like when a product launch stops needing a deploy. Contact us today to talk about your storefront.