The Laundry Story

A store where the stories lead you to the products

The Laundry Story makes laundry perfume and home care products. The brand sells on scent and mood, so the store needed plenty of room for stories and imagery. Buying had to stay as easy as in a regular Shopify store.

Client
The Laundry Story
Project type
Headless store
Role
Architecture, Next.js build, CMS modeling, Shopify integration, Firmhouse integration, custom DatoCMS Shopify Picker, Analytics, SEO, deployment setup
Timeline
3 months
Date
May 2024

Objective

Lots of content, and a shop that just works

The content team wanted to build pages and stories themselves, without a developer. At the same time, prices, stock and product details had to come from Shopify and always be right. The site had to do both.

MacBook and iPhone mockup of The Laundry Story: a brand story block about laundry perfume on desktop, and the bestseller product carousel on mobile

Approach

Shopify for the shop, DatoCMS for the stories

I set the site up so each system has one job. Shopify handles everything to do with buying, DatoCMS handles the content, and Next.js puts the two together on one page.

Publishing

Pages built from fixed blocks

In DatoCMS the team builds pages from blocks I designed and built up front. They check drafts in a preview that looks exactly like the live site. Publishing regenerates only the pages that changed, so a new article is online almost straight away.

MacBook and iPhone mockup of a blog post with a product cross-sell block: a bathroom photo with shoppable product cards

Product pages

Shopify first, the story on top when there is one

A product or collection page always starts from Shopify. If the editors have made extra content for that product in DatoCMS, it gets added. If not, there's still a complete product page built from Shopify data. A new product can be sold right away, even before its story is written.

MacBook and iPhone mockup of the White Musk laundry perfume product page on desktop and the laundry perfume collection on mobile

DatoCMS plugin

Picking products instead of pasting IDs

Without a tool, you link a Shopify product to content by copying an ID and pasting it into the CMS. One wrong character and a different product shows up on the page. So I built a DatoCMS plugin that lets editors search Shopify products, variants and collections and pick them, with image and price shown.

MacBook mockup of DatoCMS showing a product record with a linked Shopify product, including its image, type, category and price

Maintenance

Catching mistakes before they go live

The site pulls data from two APIs. I generate TypeScript types from the DatoCMS and Shopify GraphQL schemas (GraphQL code generation, with graphql-request in Next.js). If a change to the content model no longer fits the code, I find out during the build, not when a visitor lands on a broken page.

Speed

Prebuilt, refreshed on publish

The site runs on Vercel with SSG and ISR. Pages are ready before anyone asks for them. A webhook from DatoCMS refreshes only the pages that changed. Images are resized automatically and code loads per page, so the heavier content pages stay fast too.

Result

Live in May 2024, after three months

The new store went live in May 2024. Shopify does what it's good at: products, stock and checkout. In DatoCMS the team writes stories and links products to them, without needing me.

MacBook and iPhone mockup of the shop landing page on desktop and a blog cross-sell block on mobile

Next case: Dit is Watt

A one-pager for home batteries, without the sales pitch

Dit is Watt explains how a home battery works. The team edits everything themselves and changes go live within seconds.

View Dit is Watt
Dit is Watt case study