Case study · fictional brand

A brand, a store and a lifecycle programme. Built by prompting Claude.

ASHGROVE started as a one-page brief. It grew into a website, a design system, a shop that talks to Klaviyo, newsletters, social and four automated customer journeys. Every part was built by describing what it should feel like and letting Claude do the building.

4chapters: brand, store, campaigns, lifecycle
87demo shoppers sorted into five lifecycle stages
4automated flows, built and tested as drafts
0emails sent to real customers

ASHGROVE is a fictional brand. The shoppers, orders and prices are invented. Test emails went only to the author's own inboxes, and no flow was ever switched on. This page shows the method, not sales results.

01

The brand

One brief became a coded website, then a design system that every later piece reused. Because the rules lived in one place, a shop, an email and a reel all look like the same company.

The ASHGROVE homepage

Website

A written brief became a coded HTML and CSS site, then was redesigned in place.

Open the site →
ASHGROVE logo on cream

Guidelines and brand kit

A full guidelines document, and the same logo, palette and fonts loaded into Canva's Brand Kit.

Open the PDF →
02

The store

A twelve-piece demo shop, so the marketing has something real to point at: three tees, three knits, three coats and three accessories, each with a flat-lay and a worn-on-model photograph.

A shop that tells Klaviyo what shoppers do

The shop carries Klaviyo's onsite tracking. When a shopper views a product, adds to the cart or opens the cart to check out, Klaviyo records the event on their profile. Those events are what start the Abandoned cart journey in chapter 04.

A real store has strangers walking in, and a demo that collects strangers' email addresses is a risk. So the public shop has no sign-up form. Visitors browse normally and nothing is stored about them.

For the demo, a hidden "Browse as" picker lets the author play one of four shoppers: Rajiv the new subscriber, Sam the cart abandoner, Leo the repeat buyer and Hugo the lapsed customer. The picker identifies a shopper by an email that already exists, with nothing to type. Anything the author does next lands on that person's profile, so a journey can be watched from end to end.

Visit the shop

The ASHGROVE demo shop with the Browse as picker showing four shoppers, Sam selected
The demo-only "Browse as" picker. Four shoppers, one description each, nothing to type.
03

The campaigns

Content made to go out: newsletters, social and motion. Same palette, same voice, nothing hand-drawn in a design tool.

Newsletters

Three newsletters, refined in place, sent through Klaviyo.

Instagram

Concept creative, not published

On-brand product imagery, generated and laid out for feed and ads. Nothing was posted to a real Instagram account and there are no ads running.

ASHGROVE Instagram post one
ASHGROVE Instagram post two
ASHGROVE Instagram post three

The Reel

Concept creative, not published

An animated Instagram Reel, art-directed entirely through chat and exported from Canva. It was not posted anywhere.

Watch the Reel →

From social to the shop to Klaviyo

Social is the top of the funnel. Posts and ads would bring people to the shop, the shop's tracking tells Klaviyo what they did, and the lifecycle flows take over from there.

1 · InstagramConcept creative, not published
→
2 · The shopViewed Product, Added to Cart, Started Checkout
→
3 · Klaviyo flowsWelcome, Abandoned cart, Post-purchase, Win-back (all Draft)

See where these shoppers go in the journey map →

04

The lifecycle programme

A newsletter goes to everyone at once. A lifecycle programme speaks to each shopper according to what they have done. This chapter shows how ASHGROVE's customers were sorted, which journeys they travel, and how each one was tested before anything could send.

The strategy in short: four objectives come first, each with its own journey. Welcome new subscribers, recover abandoned carts, bring first-time buyers back for a second order, and win back lapsed customers. Each wait has a reason: one hour for a cart, because the shopper is still thinking and a buyer in that hour must not get a reminder; three days between the two post-purchase emails, so the second lands after the parcel; five days between the two win-back emails, so the second tells a different story; and 90 days before the same person can re-enter post-purchase. A real programme would track first-order rate, recovered-cart rate, second-order rate within 90 days and win-back rate. None are claimed here, because nothing was sent.

1 · The shoppers

87 invented shoppers. 82 have no email address at all, so they can never be messaged. Four have the author's own inboxes, each playing one stage of the customer lifecycle. 83 backdated orders (all invented, in USD) give each shopper a believable history.

2 · Five stages, sorted by order history

Five live segments sort everyone by what they have bought and when. The numbers below are from the recount on QA day, with the original build-day number underneath.

Never ordered

29was 29

Zero orders, ever.

First-time buyers

12was 14

One order, in the last 30 days.

Repeat buyers

13was 14

Two or more orders, one in the last 60 days.

Fading

13was 13

No order in 60 days, one in the last 120.

Lapsed

18was 17

No order in 120 days, but bought once.

Klaviyo lists and segments page showing the five stage segments
The five stage segments in Klaviyo, next to the demo lists.

The counts drifted, and that taught something

Two days after building the segments the total fell from 87 to 85. Nothing was deleted. The segments use time windows, so shoppers move along as days pass. First-time buyers, for example, are people who bought in the last 30 days, and two of them crossed that line.

That also revealed a gap. A shopper with one order from 30 to 60 days ago now fits no stage, because they are too old to be a first-time buyer and too recent to be fading. Two people sit in that gap today. It was left in place on purpose and written up as a finding: time-based segments drift, so they need a recount, and their edges need testing.

3 · The journey map

The five stages with the flow that speaks to each. The hatched columns are gaps: no flow today.

Never ordered

29Gap: no flow for this stage today

First-time buyers

12Post-purchase: after an order

Repeat buyers

13Post-purchase: after each new order

Fading

13Gap: no flow for this stage today

Lapsed

18Win-back: on entering the stage

Welcome (on joining the list) and Abandoned cart (on starting checkout) are triggered by events, not by stage. Never ordered, the biggest stage, and Fading have no flow today. Two flows are proposed, not built: a browse nudge for Never ordered and a "we saved your favourites" email for Fading. Full map and details →  ·  Back to the Instagram section ↑

4 · Four journeys

Each journey starts from something a shopper does, then waits and sends. All four were built and tested, and every one stayed in Draft, the state in which nothing can send.

Welcome

Draft

Starts when someone joins the newsletter list. Three emails over five days that introduce the brand's one idea: fewer things, better made.

TriggerAdded to the newsletter list
Day 0Welcome. We make fewer things.
Wait2 days
Day 2Start with one. (personalised)
Wait3 days
Day 5The whole collection, on one page.

Rule: each person goes through once. A safety filter lets only people marked as allowed to receive demo email in.

Abandoned cart

Draft

Starts when someone opens the checkout. An hour later, anyone who has not bought gets a reminder with their own cart in it.

TriggerStarted checkout
Wait1 hour
CheckAlready bought? Then stop. Otherwise continue.
EmailYou left something behind.

Rule: the same person can enter again only after 7 days, so a browser who keeps returning is not nagged.

Post-purchase

Draft

Starts when an order is placed. A care guide first, then a suggestion of what goes with what they bought.

TriggerPlaced an order
Day 0How to make it last.
Wait3 days
Day 3Something that goes with it. (personalised)

Rule: a repeat customer can enter again after 90 days. A scarf bought after a jacket deserves the care guide again.

Win-back

Draft

Starts when a customer drifts into the Lapsed stage. Two emails, spaced out, with a different story each time.

TriggerAdded to the Lapsed stage
Day 0It has been a while.
Wait5 days
Day 5One jacket, one story.

Rule: each person goes through once.

Klaviyo flows list: four flows, all Draft
All four flows in Klaviyo. Every status reads Draft.
The Welcome flow canvas: trigger, three emails and two waits
The Welcome journey on Klaviyo's canvas.

5 · One email, different for each shopper

The second Welcome email reads the shopper's favourite category and changes the product, the price, the photograph and the button. If the shopper has no name or no favourite, it falls back to a sensible default instead of leaving a gap.

The Ribbed Crew knit
Hugo · likes knitwear

The Ribbed Crew, $128

"Hi Hugo,"

The Work Jacket
Sam · likes outerwear

The Work Jacket, $218

"Hi Sam,"

The Heavy Tee
No name, no category

The Heavy Tee, $38

"Hi there,"

6 · Tested before anything could send

Eight test sends in total: six to the author's Zoho inbox (the first three never arrived, until the sending domain was activated), then one each to Gmail and Outlook. Each journey was also previewed with the shoppers it is meant for.

CheckWhat was testedResult
Inbox placementOne email per inbox: Zoho, Gmail and OutlookZoho: Inbox. Gmail: Inbox, Promotions tab. Outlook: Junk.
Sender authenticationThe Gmail "Show original" headersSPF, DKIM and DMARC all pass.
Journey entryPreviewing the Welcome flow as a shopper off the list, then on itOff the list: "Doesn't enter". On the list: "Enters".
PersonalisationWelcome 2 as three different shoppersCorrect product and price for each.
Missing dataA shopper with no name and no category"Hi there" and the default product, no blanks.
LinksEvery button's destinationOne tagged button per email, all resolve.
Segment recountCounts against build-day numbers85 against 87: window drift and one gap, explained above.
Gmail headers showing SPF pass, DKIM pass with domain send.weareresolut.com, and DMARC pass
Gmail's own verdict on the test email: the sending setup passes all three checks.

7 · What it taught

Passing authentication is not the same as reaching the inbox

The email passed every check and Outlook still put it in Junk. A new sending domain has no history. A real launch would start with small volumes and build a reputation first.

Segments that use time need a recount

Counts shift as days pass, and the edges between stages can leave people in no stage at all. Test the boundaries, then check them again later.

Test the full profile and the empty one

Personalisation that works for a shopper with complete data can still break for one without. Both were previewed.

Build the seatbelt in, not on

Every journey carries a filter that only lets demo-approved people in, and the audience is limited to four inboxes the author owns. A mistake could not reach a stranger.

Read the detailed lifecycle case study →

What is real, and what is simulated

  • Real: the shop, its tracking, the Klaviyo build, the flows and templates, the sending-domain authentication, and the test emails that landed in three inboxes.
  • Simulated: the shoppers, their orders and their prices, and the favourite category on each profile, which a real store would work out from purchases. The Instagram posts and the Reel are concept creative only: nothing was posted to a real Instagram account and no ads are running.
  • Not done on purpose: no flow was turned on, and no campaign was scheduled or sent. Results such as open or conversion rates are not shown because there are none to show.