A linen brand asks for a newsletter and gets the animation, the copy and a scheduled campaign back for approval.
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
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.
The next open slot after the queue, not today.
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.
A palette per frame. Sharing one across frames is what broke earlier sends.
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.
Limits that used to live in a document, enforced at the moment of writing.
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.
Five slots are filled. The four blocks underneath are never rebuilt.
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.
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.
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.
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
- 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