From studio to inbox: How Kevin Green eliminated email campaign friction

Written by John Siciliano

Why not draft and send email campaigns from the same place your other editorial work lives?

Write a blog, create a landing page, and draft an email in one system. Then release them simultaneously.

This is the reality Kevin Green built for the Sanity swag store. Here is why and how he built it.

screenshots of the swag store

Kevin walks through the entire headless e-commerce architecture, including the Klaviyo workflow.

Watch the recording

The problem: Context switching kills momentum

Here's what most teams deal with:

Content lives everywhere except where you need it. Sanity handles content. Klaviyo delivers emails. The only thing missing? A bridge that lets them work together without you copy-pasting between them.

Content people end up playing the role of designers. They just want to write compelling copy, but now they're picking templates and adjusting layouts in yet another dashboard.

For teams without a dedicated email specialist, this friction turns what should be a simple task into hours of coordination. One campaign? Annoying. Weekly campaigns? That's a part-time job spent copying and pasting instead of creating.

"If you have someone who lives in Klaviyo all day, they're probably loving all its advanced features," Kevin explains. "But if you're a content person who also handles marketing? You need tools where you already work, not another dashboard to learn."

Solution: Email campaigns as documents

Kevin treats email campaigns like what they actually are: documents that happen to get sent to inboxes. No copy-pasting. No exporting. Just hit publish in studio and watch the campaign go live through Klaviyo's powerful delivery infrastructure.

The beauty is that you get the best of both worlds: Klaviyo's proven email delivery and analytics infrastructure combined with Sanity's Content Operating System. Your content team works where they're comfortable, while your campaigns still leverage Klaviyo's email expertise.

PortableText [components.type] is missing "muxVideo2"

The setup is beautiful:

"There's no guessing. I know for sure this is the exact email that will show in your inbox."

The technical breakdown

Let's explore the building blocks that brought this to life.

1. Custom preview pane renders actual email HTML

Since Sanity Studio is a React app, you can extend it to render anything. Kevin added a preview pane that shows the exact HTML that gets sent to subscribers.

Using the Structure Builder API, he renders his custom preview alongside the default editing pane:

Internal server error