A made bed in Midnight Stripe percale beside a rainy window at dusk

Moonrake

Launches that run themselves, and baskets that grow.

A fictional bedding and sleepwear brand that sells in limited colour drops. I built it on Shopify to show campaign scheduling, drop mechanics, native A/B testing, bigger baskets and selling abroad.

Visit the live store moonrake.dev.jiggyjaw.comPassword-protected development store · password on request

Focus
Campaigns and conversion
Platform
Shopify Plus development store
Theme
Shopify Horizon 4.3.0, extended
Paid apps
None
Built
October 2026, by Hugo King
Why this store exists

A launch shouldn't need someone at a laptop at 9am.

Brands that sell in drops live by their calendar: teasers, launch mornings, campaign swaps, events. On most Shopify stores each of those means a manual theme edit, often out of hours, and a cached page can still show yesterday's campaign.

Moonrake asks what a store looks like when the whole calendar is data. The team enters a campaign's dates once; the homepage, announcement bar, countdown and product page change on time by themselves. The same store then tests whether a layout change earns more per order, and sells to the UK, EU and US with the right tax and duty treatment.

Most of my Shopify work is for clients, so I built this brand myself to show the skills without anything confidential. Every product, date and venue is illustrative.

The brand

Midnight, buttermilk and one loud tomato.

Organic cotton percale woven in Portugal, made in colours that sell out. Navy and buttermilk carry the everyday range; tomato is kept for campaigns and drops, so it always means "something's happening".

Midnight#1F2A44
Tomato#D2492A
Cream#FBF6EA
Buttermilk#F6EBD0
Sand#E2D6BC
Headings · Young Serif

Long nights, well spent.

Body · Figtree

Free UK delivery over £100

Duvet set in Midnight Stripe
The Percale Duvet Set£95 to £165 · Midnight Stripe, Buttermilk
Duvet set in Tomato red
The Tomato Duvet Set£95 to £165 · run of 300
Poplin pyjama set in Midnight Stripe
Poplin Pyjama Set£85 · XS to XL
Folded fitted sheet
Fitted Sheet£45 to £65
Feature 1

Campaigns that switch on by themselves.

What
Each campaign is one record: headline, image, accent colour, button, announcement text, and teaser, start and end times. The homepage hero, announcement bar and drop teaser show whichever campaign is live.
Why
No late-night theme edits. Two campaigns are loaded: Autumn Nights is live, and The Tomato Drop teases with a countdown until 9am on Friday 30 October, then takes over the hero.
How
A Campaign metaobject. Liquid picks the live entry when the page renders, and a small script re-checks the times in the browser, because Shopify caches pages and a page cached at 8:59 must still switch at 9:00.
moonrake.dev.jiggyjaw.com
Moonrake homepage with the Autumn Nights campaign hero
moonrake.dev.jiggyjaw.com · teaser strip
Tomato drop teaser strip with a countdown and a waitlist button
Autumn Nights · live from 1 Oct Tomato teaser + countdown The Tomato Drop · live Fri 30 Oct, 9:00 Teaser from Tue 20 Oct Entered once, in the admin Hero, bar and product page change on time
Feature 3

Bigger baskets, without an app.

Bundle
The Whole Bed: duvet set plus fitted sheet at 10% off, built with Shopify's native bundles. Stock is drawn from the real items, so the warehouse never sees a phantom SKU.
Cross-sell
"Complete the bed" on each product page, chosen per product in the admin rather than left to an algorithm.
Delivery
A progress bar in the cart counts down to free UK delivery over £100. The threshold is a theme setting.
Duvet setDuvet set
+
Fitted sheetFitted sheet
=
The Whole Bed10% off the pair
You're £28 away from free UK delivery
Illustration of the cart bar's behaviour
moonrake.dev.jiggyjaw.com/products/percale-duvet-set
Complete the bed cross-sell on the duvet set page
"Complete the bed" under the buy buttons, curated per product.
Feature 4

Test it, don't guess it.

What
An A/B test in Shopify Rollouts, the native theme testing launched in June 2026. The treatment moves "Complete the bed" above the product description.
Why
A cross-sell higher up the page should lift average order value. The test checks that it does, and that conversion doesn't drop as a side effect.
How
Two theme versions, a 50/50 traffic split, scheduled from 24 October to 22 November. While it runs, theme changes go through the rollout so the control stays clean.
A · Control
Cross-sell below the description
B · Treatment
Cross-sell above the description
Primary metric
Average order value
Guardrail
Conversion rate
Split
50 / 50, 4 weeks
How it's built

A campaign engine made from Shopify's own parts.

Data

Campaign and Event metaobjects, plus product metafields for launch time, drop note and curated cross-sells.

Theme

Three sections and three theme blocks on Shopify Horizon, with a shared script for countdowns and cache-safe switching.

Loader

A Python script creates definitions, uploads images and builds products, campaigns, events, collections and the bundle through the Admin GraphQL API.

Platform

Native bundles, Markets and Rollouts configured in the admin, so the client keeps no extra apps.

{%- comment -%} The live campaign: in its window, highest priority wins {%- endcomment -%}
assign now_epoch = 'now' | date: '%s' | plus: 0
for c in shop.metaobjects.campaign.values
  assign s = c.starts_at.value | date: '%s' | plus: 0
  assign e = c.ends_at.value | date: '%s' | plus: 0
  assign p = c.priority.value | default: 0 | plus: 0
  if now_epoch >= s and now_epoch < e and p > best_priority
    assign best = c.system.handle
    assign best_priority = p
  endif
endfor

From the theme's campaign snippet. The browser repeats the same check from data-start and data-end attributes.

By the numbers

One brand, a full calendar.

2scheduled campaigns
1limited drop with waitlist
1native bundle
1A/B test in Rollouts
3markets
0paid apps

A site that always feels live

Homepage and announcements change around campaigns, launches and events on schedule.

Conversion and AOV

Drops, waitlists, bundles, cross-sells and a free-delivery bar, with a proper test to prove what works.

International selling

Markets set up for UK, EU and US tax and duty treatment, with the currency limits explained.