The work
MarketingE-commerce

A linen brand asks for a newsletter and gets the animation, the copy and a scheduled campaign back for approval.

LUXMII
CampaignDraft
JULY (3) THE SHIRT DRESS IN CHALK
Built in full, not scheduled, waiting on a person
SubjectThe dress that stops needing an occasion
Send19:30, in each recipient's own time zone
ListsMain List · All Customers

The campaign arrives complete and stops one click short of sending.

The situation

How this used to work

LUXMII sells linen out of Australia and sends its customers a newsletter every few days. Each one is a small production, and none of the work in it is the interesting part of marketing.

It starts in a Drive folder of photographs and ends in a spreadsheet. In between: three of those photos get turned into the animation at the top of the email, the subject line and headline and body and preview text and button label all get written to a set of rules that live in a document, the email itself gets built, the campaign gets created against the right lists at the right time, the team gets told, and a row gets added to the marketing calendar.

The rules are the part that quietly slips. The body copy has a hard ceiling of sixty words, the headline is meant to be three to six, and a document holding those numbers is only as good as whoever last remembered to open it.

The scheduling is the part that goes wrong loudly. Campaigns are queued days ahead, so picking a send date means opening the email tool and reading the queue first. Skip that and two newsletters land on the same evening, in front of the same list.

What we built

The system

One command, and the whole job is behind it. It takes the concept as its only argument, which in practice is the name of a folder of photographs, and it runs eight stages across Drive, the image tooling, the email platform, Slack and the marketing calendar.

It is written as a sequence with an order that cannot be shuffled. It checks the send queue before it does anything else, because a date picked without reading the queue is how two newsletters end up on one evening. It reads the brand's voice guide at the moment it writes, rather than carrying a copy, so editing the voice changes the next newsletter and nobody has to update the command. It fills five placeholders in one approved email template rather than assembling HTML, because the parts that are easy to forget are the parts that are expensive to forget.

And it stops. The campaign is created in full, with its send time already set on it, and then left as a draft.

Most of what makes it reliable is not automation, it is written-down failure. Several stages carry a rule that exists because a specific send went wrong once, and the rule is in the command rather than in somebody's memory.

How it works

The pipeline, step by step

01 / Check the queue

Before anything else, what is already booked

The first stage does no work on the newsletter at all. It lists every campaign already scheduled, shows the queue, and asks which date this one is for. The rule it exists to enforce is that a default is never today: it is the next open slot after whatever is already waiting to go out. Two newsletters landing on one evening is not a small mistake, and the only way to avoid it is to look before choosing.

Scheduled campaignsChecked first
Mon 20 JulJULY (1) LINEN IN MOTIONSending
Wed 22 JulJULY (2) THE ISADORA EDITScheduled
Fri 24 JulNothing bookedOpen
Mon 27 JulJULY (4) MIDSUMMER NEUTRALSScheduled
Default means the next open slot, never today

The next open slot after the queue, not today.

02 / Build the animation

Three photographs, not a moving picture

The thing at the top of the email is three separate stills that swap every eight tenths of a second, and treating it as an animation is what breaks it. Each frame is resized to the same portrait crop, and then the one rule that actually matters: every frame keeps its own colour palette. Force a single palette across all three and the compression starts borrowing colours between frames, and on skin against white linen that shows immediately. The finished file gets written back next to the photographs it came from, because leaving it in a temporary folder means nobody can check it later.

Hero animation2.8 MB
01
02
03
896 × 1200fill, centre-crop
Paletteadaptive, per frame
DitherFloyd-Steinberg
Delay0.80s · loops forever
One palette shared across frames is what turned skin blue

A palette per frame. Sharing one across frames is what broke earlier sends.

03 / Write the copy

Five pieces, each with a hard ceiling

The brand's voice guide is read at this moment rather than remembered, so the newsletter is written against whatever that document says today. Then five pieces come out of it against fixed limits: a subject line of forty to sixty characters, a headline in capitals of three to six words, a body of sixty words at the absolute most, preview text that has to complement the subject rather than repeat it, and a two to four word button. All five are shown for approval before a single file is uploaded anywhere.

CopyVoice guide re-read
Subject52 / 60The dress that stops needing an occasion
Headline4 wordsTHE SHIRT DRESS. SETTLED.
Body48 / 60Chalk is the hardest neutral to get right. This one earns it.
Preview37 / 90Cut long, worn open, folded by August
CTA3 wordsShop The Edit
Every limit is a hard stop, not a guideline

Limits that used to live in a document, enforced at the moment of writing.

04 / Fill the template

Never build the email from scratch

There is one approved email template and the command is forbidden from writing HTML around it. It fills five gaps in that file and changes nothing else. What it is protecting is everything nobody thinks about: the tariff notice that shows conditionally for one country, the trust icons, the legal footer, and the unsubscribe tags the email platform needs in order to be a legal marketing email at all. Those are cheap to keep and expensive to rebuild by hand each time.

Approved template5 slots
{{hero_animation}}{{headline}}{{body}}{{cta_label}}{{product_url}}
Changed by nothing
Tariff noticeTrust iconsLegal footerUnsubscribe tags
Cheap to keep, expensive to rebuild by hand

Five slots are filled. The four blocks underneath are never rebuilt.

05 / Create the campaign

Half past seven, wherever they happen to be

The animation goes up to the email platform's own hosting, the template is created from the filled file, and the campaign is created against both audiences with the template attached. The send time is set to half past seven in the evening in each recipient's own time zone rather than at one shared instant, so it arrives at the same hour of somebody's day whether they are in Sydney or in London.

06 / Stop

It does not schedule, and that is deliberate

Everything is now built and nothing is queued. The campaign sits as a draft with the date already saved on it, so opening it and pressing review shows the send time pre-filled and ready. Only an explicit instruction to schedule it will queue it, and there is a documented way back to draft if one ever is. A system that can send to a brand's entire customer list is not given the ability to decide to.

07 / Tell everyone

The admin that always gets skipped

A message goes to the marketing channel with the campaign name, the subject line, the proposed send and a link to it. The concept folder moves from the to-do side of Drive to the done side, so the folder listing is a real record of what has been used. A row lands in the marketing calendar with the date, the concept, the campaign name, the audience, the subject line and the product link. None of this is hard. All of it is what gets dropped at nine in the evening when the campaign is built and the person is finished.

After the build3 destinations
Marketing channelName, subject, proposed send, link
Posted
Concept folderTo do → Done
Moved
Marketing calendarDate, concept, audience, subject
Row added
None of it is hard. All of it is what gets dropped

Three places the newsletter has to land after it is built.

What changed

The result

Producing a newsletter is one instruction. What used to be a pass through Drive, an image editor, the email platform, Slack and a spreadsheet now comes back assembled, and the person's job is reading it rather than building it.

The rules stopped being advisory. The word ceiling on the body, the character range on the subject, the palette recipe on the animation and the requirement to use the approved template are all enforced while the thing is being made, which is the only point at which enforcing them costs nothing.

Several of those rules are scar tissue and it is worth being plain about that. The palette rule is in there because of two specific sends that shipped looking wrong. The instruction to write the finished animation back into the source folder is there because earlier runs left it in a temporary directory and later checks had nothing to look at. The mandatory queue check is there because a default that means today is how a double send happens.

What did not change is the gate, on purpose. Nothing goes out without Andreas. The command builds the campaign all the way up to the send and then stops, and the last action on every newsletter is still a person deciding it is good enough.

There are no performance numbers here yet. Nothing sent through this has a post-send figure on file, so this is a description of what runs, not a claim about what it earned.

The stack

Command

  • Claude Code slash command
  • 8 ordered phases
  • concept folder as its only argument

Animation

  • ImageMagick
  • 896×1200 frames
  • per-frame adaptive palette
  • Floyd-Steinberg

Email

  • Klaviyo API
  • campaigns, templates, image upload
  • one approved base template

Copy

  • brand voice guide read at run time
  • hard character and word limits

Admin

  • Google Drive
  • Slack
  • Google Sheets calendar

Gate

  • stops at draft
  • send time pre-filled
  • a person schedules

Free 30 minute call

Let's find where AI fits in your business

A 30 minute call, free, no commitment. You leave with two or three things worth building, whether or not you work with us.

Free, no commitmentYou own everything we buildNo slide deck