Three Ships. Clean Skincare, Two Markets.

Context

Three Ships is a clean skincare brand selling direct to shoppers in Canada and the United States. The storefront is Shopify. The theme is Palo Alto 5.8.0 by Presidio Creative — a paid premium theme the brand bought. Not Dawn, and not ours. settings_schema.json records the version; the section architecture, the design tokens and the compiled runtime under all of this are the vendor's.

We say that first because it decides how you read everything after it. A large share of the builds recorded on this storefront are vendor sections or app templates we extended, configured or remediated rather than authored. Where that is true, the build page says so before it says anything else.

Storefront Facts

  • Client: Three Ships — threeshipsbeauty.ca
  • Industry: Clean skincare, direct-to-consumer
  • Platform: Shopify. Theme base Palo Alto 5.8.0 by Presidio Creative, a paid premium theme
  • Markets: Canada and the United States — two hostnames, two currencies, French as a path prefix on the Canadian domain
  • Documented builds: 109 publishable builds across 57 capability areas
  • Attribution mix: 76 Deploi-authored, 33 Deploi-modified-vendor
  • Surfaces: landing, product, collection, global, home, blog, cart, search, account, checkout
  • Status: live, verified 2026-09-06

Capability Coverage

Fifty-seven capability areas carry publishable builds here; these are ten of the deepest. Linked areas have a published hub.

Capability area Builds
Campaign landing pages without a page builder 14
Structured data for AI answers and rich results 13
Design system and component library 10
Editorial blog and content hub 10
Media and asset loading strategy 10
Brand story and editorial section system 9
Fixed bundles and kit merchandising 9
Multi-market storefront architecture 9
Premium theme extension and configuration 9
Metafield-driven PDP content blocks 7

Ten smaller areas also have published hubs, with the builds documented here: art-directed hero and banner system 8 · vendor widget remediation 7 · collection merchandising and product rails 7 · custom site search and predictive search 5 · video and shoppable media 4 · mega menu merchandising 4 · faceted filtering and progressive grid loading 3 · guided selling quizzes and finders 3 · variant swatches and shade pickers 3 · AJAX cart drawer without an app 3.

Engineering Themes

One theme, two markets, and the difference runs all the way down. Three Ships doesn't run a subfolder market. It runs two hostnames — .ca in Canadian dollars, .com in US dollars — served by one theme, with French as a path prefix inside the Canadian domain. Liquid has no URL parser and no per-market schema helper, so the split is made explicitly: request.host decides which structured-data block is emitted, request.path is rebuilt by string manipulation to strip the /fr prefix before hreflang alternates are assembled, and the footer's country-and-language switcher posts through Shopify's own localization form so it works with JavaScript off — it changes the currency a shopper is charged in.

A deliberate structured-data program for AI answer surfaces. Thirteen publishable builds exist to make the store legible to search engines and AI assistants: hand-authored Product, Offer, FAQPage and shipping-and-returns markup on product pages, and per-collection BreadcrumbList + CollectionPage + ItemList + FAQPage graphs written as literals rather than looped over collection.products, because a merchandiser re-sort would change the markup under the crawler. Each is forked by domain so the canonical @id and the priceCurrency match the storefront the shopper is on. The furthest edge of it is WebMCP agent tools on the trial-kit product page: eight tools registered through navigator.modelContext, feature-detected so the page is inert in browsers that don't implement it, seven read-only and exactly one a write whose variant id is fixed server-side by Liquid, so an agent can't steer the call onto a different SKU.

Integration remediation — making bought widgets survive contact with a theme. A meaningful share of the engineering here exists only because third-party widgets had to be made to behave. The cart drawer, reviews, subscriptions, upsell, rewards and shoppable video are all apps, each rendering its markup after load and re-rendering on state change. So the theme carries a remediation layer: MutationObserver routines that correct vendor heading levels and inject styles into a shadow root page CSS can't reach, written to be re-entrant because a one-shot pass gets undone the first time a shopper changes a variant. A bridge turns a shoppable-video add-to-cart event into a real /cart/add.js call and refreshes the app-owned drawer. None of that is a criticism of the apps. It's the honest cost of a bought stack, and it's the line item nobody quotes you: the seams between vendors belong to whoever owns the theme.

Constraints We Worked Inside

The theme is the first constraint. Palo Alto is paid vendor code kept close to upstream, so the work is additive by default — new block types and new sections rather than rewrites, forks to a new section type rather than edits in place so existing templates keep their saved settings, and additions appended inside the vendor's own token snippet because there's no hook for extra @font-face rules. The runtime ships compiled with no source in the theme, which is why some patches are written against the DOM rather than an API.

The second is merchandising scale: roughly 133 product templates, 46 collection templates, and a catalog taxonomy living in legacy product tags that predate Shopify's filter metaobjects — which is why collection.liquid carries three mutually exclusive filter strategies. The live templates run one of them: Shopify's own facets, configured in the admin.

The third is the app stack. The cart drawer is app-owned. Three purchase-option apps can appear in one buy box. The page-builder landing layout is generated by its app, whose own banner warns it can be rewritten at any time. None can be asked to change behavior, so the accommodation is always theme-side.

Selected Builds

What We Would Not Claim

A large share of this storefront is a purchased theme we extended rather than authored. Palo Alto 5.8.0 is Presidio Creative's: its sections, its design tokens, its block schemas, its compiled runtime. The collection page, the cart line renderer and the product accordions described here are their sections with our code inside them, and we wouldn't describe any of them as a grid, a cart or a product page we wrote.

Several surfaces are third-party app templates we integrated rather than built. The page-builder landing layout is generated by its app. The rewards page mounts an app's widget. The cart drawer is owned by an app. Where a section is vendor code, we have said so on its page, in the fact strip, in words. Of the 109 builds here, 33 are recorded as modifications to vendor code. We are not claiming the storefront.

Five build records on this storefront are documented and not counted. Checked against the live storefront, the code each of them describes doesn't run there — so none of it is evidence of what this store does, and a total that included them would overstate the record. They are out of every figure on this page, out of every capability area above, and described nowhere in this section. They stay in our own record, as findings for the client.

All Builds

Twenty-seven build pages are published; the rest follow progressively. Nothing ungated is counted or listed here.

Product pagePDP block system · WebMCP agent tools · PDP content accordion · product JSON-LD layer · PDP FAQ accordion and FAQPage · widget DOM remediation

Collection pageThree filter modes and in-grid promos · size-pill quick add · collection card system · Bundles & Kits collection JSON-LD · subscription bundle grid

CartInline size picker on upsell cards

SearchTabbed search results page · filter-triggered promo cards

Landing and campaignLanding-page hero kit · skin quiz entry sections · tabbed product slider · shoppable-video cart bridge · A–Z ingredient glossary · Shopify Forms host section

BlogEditorial article template

GlobalMega-menu header · GA4 dataLayer instrumentation · tabbed mobile Shop menu · page-context dataLayer · font delivery and image preload · loyalty tier and subscriber segmentation

Ready to Build on a Theme You Already Own?

Most storefronts aren't greenfield. They're a bought theme, an app stack and years of merchandising decisions that all have to keep working. That's where we do our best work. Contact us today to talk about what your theme can be made to do.

Builds

A-Z ingredient glossary with scroll-spy letter navigation and product cross-sell

An ingredient encyclopedia authored as theme-editor blocks across 14 section instances on one page template, joined to a sticky letter bar by a single shared attribute, with every entry an accordion that links out to the products it appears in — education page as cross-sell surface.

Three Ships

Collection grid card on a licensed theme: metafield merchandising, a badge precedence chain, a hover-swap swatch element and first-row loading hints

Palo Alto's grid item extended so the card's title, strapline, cutline and badge come from product metafields, badges resolve in one fixed order, color options become a swatch element that swaps the card image on hover, and column classes are computed from whatever section happens to be calling.

Three Ships

Collection page: three filter modes, in-grid promo blocks and infinite scroll

The live collection body here is vendor code from a paid premium theme. This page documents what that code does, how it is configured across a large template set, and where our own contribution to it begins and ends.

Three Ships

Configurable PDP block system on the Palo Alto theme (Recharge widget placement, size charts, siblings, quick view)

Merchandiser-orderable buy-box blocks on Three Ships' licensed theme, with the subscription app block captured and re-emitted inside the buy box, plus metafield-driven size charts, a product-family switcher and a sticky add-to-cart bar.

Three Ships

DOM and shadow-DOM remediation layer for Yotpo, Rebuy and Recharge widgets

Corrections applied to markup the theme didn't write: `MutationObserver` routines that re-level a review widget's headings, demote headings inside a cart drawer, re-anchor a subscription add-to-cart control, and append a stylesheet inside a subscription widget's shadow root — every one re-entrant, so the fix converges instead of looping.

Three Ships

Eight WebMCP tools that make a product page answerable — and buyable — by a browser agent

A feature-detected block in the theme layout registers eight `navigator.modelContext` tools on one trial-kit product page — seven an agent can read from, one that adds a Liquid-fixed variant to the cart.

Three Ships

Filter-triggered promo cards inside the search results grid

A theme-editor block that puts a merchandiser-designed card into the search results grid at a chosen position, and shows it only while a named facet is active on that query.

Three Ships

Font delivery and a template-conditioned image preload in a licensed theme's layout

Three Ships' `theme.liquid` decides its own font delivery on a licensed theme — the picked faces preloaded, an Adobe Fonts `@font-face` block inlined with its loader demoted behind it — and emits one image preload on exactly one template type, under an explicit condition.

Three Ships

GA4 ecommerce dataLayer instrumentation across a Rebuy cart

A client-side event layer that hangs off the network rather than off the DOM: a `fetch` wrapper that recognizes a cart add, a diff against the previous cart so the event reports what changed, and item taxonomy read from a block the product page already renders.

Three Ships

Hand-authored per-market JSON-LD for the Bundles & Kits collection

One Liquid snippet in the layout's head carries a complete schema.org graph for the Bundles & Kits collection — breadcrumb, collection page, a product list with offers, and the page's FAQ — written twice, once for the Canadian storefront and once for the US one.

Three Ships

Inline size picker on cart and PDP upsell cards

Size pills added inside the premium theme's own upsell card, so a multi-variant upsell in the cart drawer, on the cart page or in a product-page "pair with" module can be sized and added where it stands instead of sending the shopper somewhere else.

Three Ships

Landing-page hero sections with a no-JS add-to-cart on page templates

A hero kit for standalone campaign pages: per-breakpoint artwork and text placement in repeatable blocks, and a CTA that can be a real Liquid product form on a template where Shopify hands the theme no product at all.

Three Ships

Market-forked product JSON-LD authored in the product section, with a templated tier for the catalog

Two tiers of structured data at the foot of one Three Ships product section: complete, per-market `@graph` documents for the hero SKUs, branched on `request.host`, and a Liquid-templated Product and Offer block that reads variants, currency and barcode for the rest of the catalog.

Three Ships

Mega-menu header with separate mobile menu and image blocks

A second link-list setting gives the mobile drawer its own information architecture, and section blocks put imagery into panels that Shopify's link lists have no way to carry it in.

Three Ships

Metafield-driven editorial article template (TSB blog)

A long-form article template assembled entirely from article metafields — deck, takeaways, science callouts, references, FAQ, author credentials, related reading and in-content commerce — in a single section with no theme-editor settings, so an editor never touches the theme to publish a fully structured post.

Three Ships

PDP content accordion that borrows the premium theme's collapsible contract

A product-page accordion block that reuses Palo Alto's own `data-collapsible-*` behavior wiring while supplying its own heading semantics, CSS-variable theming and a responsive table layout for the long-form panels merchandisers author per product.

Three Ships

Product-page FAQ accordion: page-backed answers, mobile 'View More' reveal, auto-emitted FAQPage

A local extension of Palo Alto's Tabs section that hides every FAQ row past the third on mobile behind one reveal button, and emits `FAQPage` JSON-LD from the vendor's own block loop, reading each answer from the same Shopify page or rich-text field the accordion displays.

Three Ships

Server-rendered page-context dataLayer, declared in the head and pushed at browser idle

`theme.liquid` declares `window.dataLayer` ahead of the platform's head content, then pushes a context object assembled in Liquid — locale, shop country, page type and, for signed-in customers, subscriber, loyalty and login state — when the browser is idle, so every tag in the container reads the same server-side facts.

Three Ships

Shoppable-video to cart bridge: Hue add-to-cart event wired into Rebuy's drawer

A document-level listener that turns a shoppable-video app's add-to-cart intent into a real `cart/add.js` call with the cart sections rendered in the same response, then dispatches the theme's own cart events so the drawer, the count badge and every other subscriber update at once.

Three Ships

Size-pill variant picker and quick add-to-cart inside product grids

One click handler, registered once on `document` in the capture phase, turns any grid card with a size-pill row into a variant selector and an add to cart — including cards that did not exist when the page loaded.

Three Ships

Skin quiz entry-point sections: separate desktop and mobile artwork in one section

A campaign panel that opens the Three Ships skin quiz, built so the desktop and mobile crops are two independently chosen images and the copy above them is four editable blocks.

Three Ships

Subscription bundle grid with tiered unlock progress

Two custom elements on the subscription landing page: a card whose two-step button reveals a frequency choice and then posts the variant with that `selling_plan` to the cart, and a wrapper that fetches the live cart after every add and drives a merchandiser-defined tier bar from what it finds there.

Three Ships

Swell VIP tier and email-subscriber segmentation resolved in Liquid

Two Liquid variables in `theme.liquid`: `loyalty_status`, resolved from the tags the loyalty vendor writes onto the customer record, and `subscriber_status`, resolved from email-marketing consent — both assigned before `content_for_header` and emitted only for signed-in customers.

Three Ships

Tabbed collection product slider and the shared merchandising card

One section renders every configured collection at once and switches between them with a class, so moving from Serums to Cleansers waits on nothing — and one card snippet backs the shelf, the blog and the rewards page.

Three Ships

Tabbed mobile Shop menu with featured banner panel

A custom `<shop-tabs>` element turns the drawer's first-level Shop menu into horizontal tabs with panels of category links, merges a theme-editor banner block into the tab order by position, and leaves every other drawer item on the vendor's accordion.

Three Ships

Tabbed multi-type search results page with faceted filtering

One query, three kinds of answer: a search section that counts products, articles and pages before it renders any of them, tabs between them, and keeps a set of SKUs out of the grid entirely.

Three Ships

Themed host section for Shopify Forms app blocks

A section whose only block type is `@app`, wrapping any app block in the theme's width, padding and background scaffolding — and, when a merchandiser switches it on, writing the `--forms-heading-*` and `--forms-body-*` custom properties that Shopify's Forms embed reads for its own typography.

Three Ships