Case study

An owner-operator Shopify build for a Vancouver adult-wellness brand. Candy-shop visual, made-to-order theme behavior, fully Customizer-configurable.

Full Shopify build on the Baser (light preset) theme for a Vancouver, BC owner-operator with 20 years in the category. Variant consolidation from 100+ split listings into ~12 SKUs across four collections, metafield-driven size charts, color-driven variant image filtering, scroll-animated PDP captions, made-to-order theme behavior, and every custom section exposed in the Customizer for self-maintenance post-handoff.

By the numbers

The numbers speak for themselves

Vault-backed numbers. No presentation-grade estimates. Each one is reconcilable to the founder's own reporting.

Active multi-project ongoing relationship
Multi-project ongoing

Five documented calls across sales, design, development, and QA phases. Ongoing engagement on a fixed-fee model with milestone-based payment release.

SRC: vault relationship_status, transcript index, 2026-06-07

SKUs consolidated from 100+ split listings
~12

Old store split each size into its own product listing (e.g. 11 separate Knuckle size listings). New build consolidates each product into a single listing with size and color as variant options, across four collections (Plugs, Depth, Ride, Accessories).

SRC: vault project scope + technical.md product consolidation section, 2026-06-07

Custom UX features built into the theme
15+

Metafield-driven horizontally-scrollable size charts, per-product size labels, color-based variant image filtering, scroll-animated caption hero on PDP, gradient multi-color swatches, featured-review-per-product, repositioned loyalty + email widgets, terms-and-conditions timestamp checkbox, removed stock / new / low-stock badges, and Customizer-configurable sections throughout.

SRC: vault ux_features list, 2026-06-07

Friendly Toys monthly revenue

Post-rebuild growth
Desktop & Mobile

The full homepage, shown two ways

Two side-by-side screenshots of the long homepage. Hover the desktop card to slowly scroll the screenshot top to bottom, so visitors see the entire page without leaving this one.

  • Desktop · full homepage after rebuild
    15+
    Custom UX features built into the theme
    /mo at peak
  • Mobile-first after rebuild
    Mobile traffic share
    Engagement length
The work

How the engagement unfolded

  1. Sales call + fixed-fee scope agreement

    Engagement open

    Founder came in from a 200-applicant Upwork posting with a fixed budget and the Baser (light preset) theme already selected the day before. Fixed-fee model agreed over hourly given the SMB revenue tier. Delivery estimate set at 2.5-3.5 weeks. Canada-based developer was a positive factor for the founder. No Figma phase: process moved directly to theme implementation with iterative review calls.

    • Fixed-fee
    • Owner-operator client
    • Template-first build
    • No Figma phase
    • 2.5-3.5 week delivery
  2. Homepage + PDP architecture build

    Theme build

    Built the homepage and product page architectures on top of the Baser theme. Homepage sections in agreed order: video hero with caption overlay, featured rotating product, full product list slider/grid, sponsor and award logo slider, brand narrative, Most Popular 3-4 products, collections list, reviews, FAQ, footer.

    PDP architecture: scroll-animated video hero with 2-3 fade-in/out captions, product images with horizontal thumbnail strip, metafield-driven horizontally scrollable size chart, brand trust blocks (Handmade in Canada, Safety First, Community), featured JudgeMe review, footer. PDP tabs and stock-related badges removed entirely for the made-to-order model.

    • Baser theme (light preset)
    • Video heroes
    • Scroll-animated PDP captions
    • Metafield size charts
    • PDP tabs removed
    • Mobile-first
  3. Custom variant + features layer

    Custom build

    Implemented color-based variant image filtering so only the selected variant's images load instead of the old store's 148-stacked-images behavior. Built a horizontal thumbnail strip showing 5-6 images per active variant. Assessed gradient / split multi-color swatches for the multi-color Fiskit colorways. Wired Smile.io loyalty widget to the left side and email capture to the right so they no longer conflict. Integrated the timestamp-based terms-and-conditions checkbox app required for legal sign-off before checkout. Set continue-selling on all variants for the made-to-order model and removed out-of-stock, low-stock, and incorrectly-tagged 'new' badges.

    • Variant image filtering
    • Gradient multi-color swatches
    • Smile.io repositioning
    • Terms-and-conditions checkbox app
    • Continue-selling policy
    • Badge cleanup
  4. Finalization + launch readiness

    QA + launch window

    Cleared the orange-accent / pink-accent inconsistency between Dev Jam and the client-facing theme by syncing color variables. Resolved the CARE-template Retail page bug by rebuilding page content. Fixed hidden page-title rendering on standard Shopify pages. Documented the 2x-screenshot-pixel-dimensions image upload rule for the founder. Launch plan: publish the unpublished theme inside the 2am-6am PST low-volume window, confirm working before the busy window, milestone-based payment release after the client signs off.

    • Color variable sync
    • CARE template bug fix
    • Page title fix
    • 2am-6am PST launch window
    • Milestone payment release
Project overview

What we built

Friendly Toys is a Vancouver, BC owner-operator brand in the adult wellness category. The founder is a 20-year category veteran running the business solo, with an Apple-style product philosophy of few SKUs and intentional releases. Production is made-to-order on premium platinum-cure silicone, with ~12 SKUs across four collections (Plugs, Depth, Ride, Accessories) post-consolidation.

The engagement came through Upwork against 200 applicants and was structured as a fixed-fee project rather than hourly given the SMB revenue tier. Process skipped a Figma phase and went directly to theme implementation on the Baser (light preset) theme that the founder had selected himself the day before the sales call. Scope is end-to-end: homepage, PDP, collection pages, custom Liquid sections, per-product metafield architecture, app integrations, and a low-volume launch-window plan.

In their own words

(Testimonial TBD. Vault public_ok and name_publicly_ok are open; adult-category brand, confirm with relationship manager before public-facing use.)

Friendly Toys is a Vancouver, BC owner-operator brand in the adult wellness category. 20 years of category experience. Apple-style product philosophy with intentional, limited releases. Made-to-order production model. Premium platinum-cure silicone products. Multi-project ongoing engagement on a fixed-fee model.

Friendly Toys teamFounder / owner-operator
The challenge

What was holding them back?

The brand's visual position is candy-shop colorful, inclusive, and non-explicit, which is the opposite of the dominant Vancouver competitor's dungeon / leather aesthetic. The build had to clear that bar while staying eligible for payment processing (no human models, no AI-generated human imagery). The old store split each size into its own product listing and stacked up to 148 variant images at once on PDP. The founder runs the business solo and wanted to self-maintain the store post-handoff, which required every custom section to be Customizer-configurable rather than hardcoded.

  1. 01

    Adult-category brand needed to read as candy-shop, not dungeon

    Founder is a 20-year industry veteran with a clear visual position: inclusive, non-gendered, non-explicit, candy-shop colorful. The aesthetic anti-target is the dungeon / leather / explicit style of the dominant Vancouver competitor. Build had to clear that bar visually while staying eligible for payment processing and financing (which rule out human models and explicit imagery).

  2. 02

    Old store fragmented the catalog and stacked all variant images at once

    Each size of a product lived as its own Shopify product listing (e.g. 11 separate Knuckle products by size), making variant-level image management impossible. The old PDP also stacked all variant images vertically — up to 148 images at once across 12 sizes and 6+ colors — instead of loading only the active variant's images.

  3. 03

    Made-to-order model breaks standard stock-status UX

    Founder's position is that inventory never truly runs out (production happens on demand), so Shopify's stock badges (out-of-stock, low-stock, sold-out variant disable) actively work against the business. The 'new' badge also fired incorrectly on products that were recreated for variant consolidation. PDP tabs were adding noise the founder wanted gone.

  4. 04

    Owner-operator needed to self-maintain the store post-handoff

    Founder runs the business solo and did not want to re-engage a developer for every small change. Hard requirement: every custom section had to be configurable via the Shopify Customizer rather than hardcoded. Per-product fields (size charts, size labels, featured reviews, hero images, hero bullet captions) had to live in admin-editable metafields, not theme code.

Before / After

Before and after

Before

After

Funnel collapse: we removed a full page from the path to purchase.

Solutions

What we built to fix it

Each fix maps to a specific lift in the funnel.

  • Candy-shop visual system on a neutral product-image background

    Pink (from the brand logo) for buttons, bullet markers, feature accents, and icons. Orange retained intentionally in the footer as a brand-palette accent. Product image backgrounds set to off-white / very light gray so the colored products pop against the neutral surface. No human models and no AI-generated human imagery (founder has public reputation risk on AI-people imagery and a payment-processing eligibility concern around explicit content).

  • Variant consolidation + color-driven image filtering

    Each product collapsed from N separate listings into one product with size and color as variant options. PDP image gallery loads only the selected variant's images, with a horizontal thumbnail strip showing 5-6 images for the active variant. Gradient / split-circle swatches assessed for multi-color Fiskit colorways so a single swatch represents the three-color combination the product actually ships in.

  • Made-to-order theme behavior + simplified PDP

    Continue-selling enabled on all variants. Out-of-stock, low-stock, and 'new' badges removed from the theme entirely (kept available for future genuine launches). PDP tabs (Main Features, Materials, Shipping Policy) eliminated for simplicity. Brand-trust blocks (Handmade in Canada, Safety First / Platinum Cure Silicone, Community) moved up from the buried footer position to a prominent slot above the reviews section.

  • Metafield-driven, Customizer-configurable architecture

    Per-product metafields drive the horizontally-scrollable size chart (each size is a column with inch + cm values; empty columns suppressed), the size label above the size selector, the featured JudgeMe review, the per-product hero image, and the 2-3 scroll-animated hero caption bullets. Every custom section exposes its content in the Shopify Customizer so the founder can update the store himself post-handoff without re-engaging a developer.

The stack

What it was built on

Tools picked for the job, not for the resume.

  • Shopify
    Platform
  • Baser (light preset)
    Theme base
  • Liquid + custom sections
    Templating
  • Per-product metafield architecture
    Data model
  • JudgeMe
    Reviews
  • Smile.io
    Loyalty
  • Terms-and-conditions checkbox app
    Compliance
How we engineer performance

Speed is a revenue lever, not a vanity score

Every Muscled build is engineered to the same standard. The numbers below are the published industry benchmarks we design against, not stand-ins for any one client's figures.

conversions per 0.1s of load-time improvement on ecommerce sites.

+8.4%

SRC: DELOITTE / GOOGLE

conversion rate for stores loading under 2s, vs the ~1.4% Shopify average.

2.4%

SRC: SHOPIFY PERFORMANCE DATA

conversion lift per 1s of mobile load-time gained, where 90% of traffic lives.

+10-20%

SRC: SHOPIFY MOBILE BENCHMARKS

// OUR PERFORMANCE GATE we don't ship unless field Core Web Vitals hold: LCP ≤ 2.5s · INP ≤ 200ms · CLS < 0.1 (p75, mobile)

Capability surface

The techniques behind a build like this

PDP architecture

  • Scroll-animated video hero
  • Metafield-driven size chart
  • Variant image filtering
  • Horizontal thumbnail strip (5-6 images)
  • Per-product size label (metafield)
  • Brand trust blocks
  • Featured review per product (metafield)
  • PDP tabs removed
  • Sticky price + ATC visible

Custom theme features

  • Gradient multi-color swatches
  • Customizer-configurable sections
  • Made-to-order theme behavior
  • Out-of-stock badge removed
  • Low-stock badge removed
  • 'New' badge removed
  • Continue-selling on all variants
  • Per-product hero image
  • Per-product hero caption bullets
  • Off-white product image backgrounds

Apps + integrations

  • JudgeMe reviews
  • Smile.io loyalty
  • Terms-and-conditions timestamp app
  • Smile widget repositioned (left)
  • Email capture (right)
  • Countdown timer / urgency app
  • No-conflict widget placement
  • Legal hard-requirement checkbox before checkout

Catalog + collections

  • Variant consolidation (sizes → options)
  • 4 collections (Plugs, Depth, Ride, Accessories)
  • Hidden wholesale products
  • ~12 SKUs (post-consolidation)
  • 11 Knuckle sizes
  • 13 Snuckle sizes
  • Fiskit multi-color colorways
  • Boxing Day Misfits sale page
  • Unlisted-product QA workflow
Storefronts

One build. Multiple markets.

Same theme code across markets, with localized pricing, currency, and region-specific content routed automatically.

  • Canada

    Primary storefront / Vancouver, BC
    • Shopify
    • Baser (light preset)
    • Custom Liquid sections
    • Metafield-driven size charts
    • Variant image filtering
    • Scroll-animated PDP hero
    • Made-to-order theme behavior
    • JudgeMe + Smile.io
    Canada screenshot
    Served from the same Shopify Markets build. Dedicated capture not included.
Full build · sections

Every section, built mobile-first

The full build is many numbered sections, each designed for the phone first. The rail below shows a sample. Scroll horizontally to step through.

The results

What the work delivered

Each number is reconcilable to the founder's own reporting.

Active multi-project ongoing relationship
Multi-project ongoing

Five documented calls across sales, design, development, and QA phases. Ongoing engagement on a fixed-fee model with milestone-based payment release.

SRC: vault relationship_status, transcript index, 2026-06-07

SKUs consolidated from 100+ split listings
~12

Old store split each size into its own product listing (e.g. 11 separate Knuckle size listings). New build consolidates each product into a single listing with size and color as variant options, across four collections (Plugs, Depth, Ride, Accessories).

SRC: vault project scope + technical.md product consolidation section, 2026-06-07

Custom UX features built into the theme
15+

Metafield-driven horizontally-scrollable size charts, per-product size labels, color-based variant image filtering, scroll-animated caption hero on PDP, gradient multi-color swatches, featured-review-per-product, repositioned loyalty + email widgets, terms-and-conditions timestamp checkbox, removed stock / new / low-stock badges, and Customizer-configurable sections throughout.

SRC: vault ux_features list, 2026-06-07

Ready to ship yours?

Let's talk about what you want to ship.

A full Shopify build for an owner-operator adult-wellness brand in Vancouver with variant consolidation, metafield-driven PDP architecture, made-to-order theme behavior, and a fully Customizer-configurable section library for self-maintenance post-handoff.

30 minutes. No deck.