Saint & Citizen Draft 02

Saint & Citizen · Operations

The campaign
playbook.

How a campaign gets built, read, and sent. And what a person still has to do.

Written for the handover to LAL, who leads briefs and cadence and runs lists, campaigns, sends and analytics across Meta and Klaviyo. It covers how somebody arrives, who decides whether they get in, how the emails get made, and what we automate next. Two rules hold the whole thing up: a person decides who gets access, and a person presses send.

The handover

Who owns what

The split is by decision, not by tool. Whoever decides the thing owns the thing.

LAL · Campaign

  • Briefs and the cadence PDF, the strategic source for every campaign
  • Lists and segments in Klaviyo
  • Campaigns and sends. The send button is a person, deliberately
  • Analytics and insight across Meta and email
  • Instagram automation and community response

Curation

  • Abina, Giulia or LAL review every applicant in the campaign sheet
  • Green marks selected. Everyone else stays outside the approved list
  • This step is kept human on purpose, to protect quality and catch errors
  • Klaviyo never decides who gets access

Design & Art Direction (Pana)

  • Art direction and the email design system
  • Artwork and the campaign poster set
  • The build tooling that turns a cadence into drafts
  • The documents and everything on the hub

The two rules that matter. A person decides who gets in, and a person presses send. Everything on the roadmap makes the work around those two moments faster. Nothing on it removes them.

End to end

The workflow, whole and in detail

The short version first. Eight stages, and the last one loops back into the first.

Campaign workflow, major stagesEight stages from discovery to learning, with results feeding back into the next cadence. Discover Site or Instagram Sign up Form submitted Sheet Row created Curate A person decides Klaviyo list CSV import Build emails Cadence to drafts Send Checked, then sent Learn Feeds next cadence Results shape the next cadence
Automated Manual, a person acts AI-assisted Selected Not selected Planned

By lane

The same journey with the handoffs shown: where data moves on its own, where a person acts, and where the work is still planned. Scroll sideways.

Klaviyo campaign and audience workflow, by laneSeven lanes from audience to reporting, showing which steps are automated, which are manual, which are AI-assisted, and which are planned. Audience Website & Instagram Google Sheets S&C team Claude & production Klaviyo Reporting Discovers S&C Post, page or word of mouth Landing page Event sign-up form Instagram post Comment ACCESS Row in the sheet Submission recorded Thank you for signing up Not a confirmation Review each applicant Abina, Giulia or LAL Green = selected Filter, export CSV Not selected Stays outside the list Named audience list Show, or show + after Cadence to drafts JSON, HTML, preview Confirmation + ticket link Rejection to the rest Opens, clicks, reach Feeds the next cadence

Read the two dotted paths. The Instagram route is a priority automation that has not been built yet. The long dotted line from the sheet to Klaviyo is the future state: sign-up data moving across without a CSV. The approval checkpoint stays where it is in both.

Acquisition

How people arrive

Two routes in, one sheet at the end of both.

A full room of guests at a Saint and Citizen event
Everyone in the room appliedNobody is added to an event audience without submitting a form and being chosen. That is what makes the room what it is.

A

The website route

A person finds an event, campaign or programme, lands on its dedicated sign-up page, and completes the form. The submission is written to the campaign’s Google Sheet automatically.

B

The Instagram route To build

A post asks people to comment a keyword. A comment-triggered automation sends that person a DM with the sign-up link, and they join the same form and the same sheet.

This matters more than it sounds. It removes the link-in-bio journey entirely, and because the trigger is per-keyword it lets several campaigns run at once without competing for one link. Identified on the call as a priority to set up as soon as possible, along with automated replies to common questions to cut the community-management load.

Submission received is not access confirmed

Everyone who signs up gets an automatic acknowledgement. It thanks them for applying and nothing more. Access is decided afterwards by a person, and the copy has to keep those two things apart or we create a room full of people who believe they are already in.

The decision

The human step

The sheet is the application and curation layer. This is the part we are not automating.

Paula Grant seated, speaking at a Saint and Citizen event
Somebody choosesCuration is the product. A list assembled by a rule is a mailing list; a list assembled by a person is a room.
StepWhat happens
ReviewAbina, Giulia or LAL open the campaign sheet and go through the applicants
MarkSelected applicants are marked green. Everyone else stays outside the approved audience
FilterThe sheet is filtered to the green rows
ExportThose rows are exported as a CSV
ImportThe CSV is imported into Klaviyo and added to a clearly named campaign list
SplitWhere access levels differ, they become separate lists. Show only, and show plus after-party, are different rooms and different emails

What the future state changes, and what it does not. The plan is to remove the CSV round trip so sign-ups reach Klaviyo directly. The approval checkpoint stays exactly where it is: a person still decides, and approval is what moves someone into the access list. We are automating the transfer, not the judgement.

Audience

Lists and segments

Different things, often confused, and the difference decides who receives what.

Lists · explicit

  • People added by sign-up, import or integration
  • Event applicants
  • Confirmed guests
  • Show plus after-party
  • Not selected this time
  • Citizen Profile respondents
  • General subscribers

Segments · dynamic

  • Built from rules and behaviour, and they update themselves
  • Opened the invitation, did not click
  • Clicked the RSVP link
  • Confirmed guests who have not opened the reminder
  • Highly engaged
  • Interested in a city, programme or format

The rule

  • Never send to the whole database. Pick the list or segment the campaign is actually for
  • Different access levels must use different lists, segments or profile properties
  • A grant email pointed at the master list tells everyone they are in

Production

Running a campaign

From cadence PDF to drafts sitting in Klaviyo. This is the part that used to take about a week per person.

01

Write the cadence LAL

One document carrying the campaign objective, each email’s purpose, draft copy, send dates, the sequence, the intended audience, the calls to action, and any access or ticketing detail.

This is the strategic source. Everything downstream is a transcription of it, so a detail wrong here is wrong in fourteen places later.

02

Build the copy file AI-assisted

The cadence goes to Claude, which holds the Saint & Citizen design system: typography, colour, spacing, art direction, image guidance and the email layout rules. It returns a structured JSON file, one entry per email, carrying subject, preview text, body, audience and scheduled slot.

Anything undecided goes in as a bracketed placeholder, which the preview then reports as blocking.

03

Render and read it

The JSON is rendered to responsive HTML. This step talks to nothing.

node preview.mjs --campaign={name}

Missing artwork shows as a grey square so the layout reads at full height. The index lists every email with its audience, its slot, and anything still blocking it.

04

Review the preview Team

Published to emails.saintandcitizen.com so copy can be signed off by people without Klaviyo open. Check copy accuracy, brand consistency, mobile rendering, links, sequence and personalisation variables. Revise until approved.

05

Push drafts to Klaviyo

Creates the lists, uploads the templates, and creates each campaign as a draft with its audience and slot attached.

read -s KLAVIYO_API_KEY && export KLAVIYO_API_KEY ./run.sh all --campaign={name}

Re-running is safe: it matches what exists by name and skips it. Use --dry-run to see the plan, --force to overwrite templates after a copy change.

06

Check, test, send LAL

Pushing creates a draft. It does not bypass the final checks, which are listed further down. Send a test, then send.

What the AI is and is not doing. It accelerates the execution of a campaign idea and an approved copy direction. It does not decide strategy, it does not decide audience, and it does not approve anything. The judgement stays where it was.

Mail merge

One email, one link

Klaviyo can carry contact-specific data into a send. We used it for JAY-Z London, where every guest had their own private ticket link.

StepWhat happens
StoreEach approved contact’s unique link is saved against their profile in a custom field
ReferenceThe template calls that field where the link should appear
SendEach recipient receives their own link, nobody else’s

Check the field before the send, every time

If the personalisation field is missing for a contact, hold them back or use an approved fallback. Never send an empty link, a broken link, or somebody else’s private ticket. This is the one failure in the whole system that cannot be walked back after the send, because the wrong person now holds working access.

The gate

Before it sends

Run this list on every campaign. It is the last point at which anything can be fixed.

Audience
The correct list or segment is selected, and suppression and consent rules are respected.
Sender
From name, from address and reply-to are right.
Subject
Subject line and preview text approved, and not truncated on a phone.
Links
Every link opens the right page. Tracking is on.
Personalisation
Merge fields resolve for a real contact, not just in preview.
Rendering
Mobile and desktop both reviewed.
Test
A test send has been opened and read by a person.
Timing
Send date and time confirmed, in the audience’s time zone.
Overlap
No duplicate or competing campaign is landing the same day.
Mapping
Confirmation, reminder and rejection are each pointed at the right audience.

The honest picture

What already runs itself

Worth being precise about, because the gap is not always where it feels.

A Saint and Citizen stage set for a live conversation
What the machine is forEverything in this document exists to fill a room like this one. Most of it already works without anyone touching it; the value below is knowing exactly which parts those are.
StepTodayState
Sign-up into the sheetForm submission writes a row automaticallyAutomatic
AcknowledgementEveryone who applies gets a thank youAutomatic
Citizen Profiles into KlaviyoStored, mirrored to Sheets, then pushed with thirteen profile properties. A failed push is flagged for retry rather than lostAutomatic
Email design and renderingOne renderer, so every email in every campaign is identical in the house systemAutomatic
Templates and draft campaignsOne command per campaign, idempotent, per-campaign stateAutomatic
Preview for approvalOne command, published for sign-offAutomatic
Applicant curationA person reads the sheet and marks greenManual on purpose
Sheet into KlaviyoFilter, export CSV, import, name the listManual, first to automate
Cadence into the copy fileRead and transcribedManual
Artwork out of FigmaExported and dropped into the campaign folderManual
Instagram to sign-upLink in bioNothing built
SendingA person, after the checklistManual on purpose

Next

What we automate, in order

Ordered by what it unblocks. The first two are small and pay immediately.

Guests in conversation in a branded Saint and Citizen room
Look at what is already thereEveryone here arrived through a form and left thirteen fields behind them. Two hundred and thirty-three Citizen Profiles are already in, and almost none of it is being segmented on.
 WhatWhy it is worth doingSize
01Instagram comment to DMRemoves the link-in-bio journey and lets several campaigns run at once on different keywords. Flagged on the call as the priority. Pair it with automated replies to common questionsSmall
02Sheet to Klaviyo, directlyKills the CSV round trip. Applicants land in a general list on submission; approval is what moves them into the access list, so the human checkpoint is untouchedSmall
03Segment templates off profile dataThirteen properties per Citizen Profile sitting unused. Saved segments for industry, city and engagement turn them into audiences with no exportSmall
04A fixed-column cadence templateMakes the sheet machine-readable so the copy file is generated rather than transcribed. Removes the biggest source of transcription error and gives LAL direct control of what shipsSmall
05Design system into the S&C accountIt currently lives in a personal Claude account. Moving it means anyone on the team can generate on-brand work from a brief, and the system outlives any one person’s loginMedium
06Artwork straight out of FigmaNeeds the board shared and the connector authorised. Then a named frame becomes a campaign asset with no export step and no wrong-crop riskMedium, blocked on access
07One performance viewKlaviyo sends and Meta in a single weekly read, so insight is a habit rather than an errandMedium
08Consolidate the codeDeck and doc sources are split across GitHub, Cloudflare and Drive. One hosting source, so nobody has to know which is currentMedium

Not on the list. Automating curation, and automating the send. Everything above makes the work around those two decisions faster. Neither decision moves.

Learned the hard way

House rules

Each of these exists because it went wrong once.

Rename nothing
Renaming a list in a config file does not rename the list in Klaviyo. It creates a new empty one and leaves your people in the old one. Change the name in Klaviyo, or keep the name and change the label.
The key never lands on disk
Read it into the shell with read -s so it is never echoed and never written to a file. The working folder syncs to Drive, so a key saved there is a key published.
Check the audience on a grant
A grant pointed at the master list tells every applicant they are in. Grants go to the per-event list.
Re-push after any copy change
Klaviyo copies template content into the campaign when it is assigned. Editing copy without re-pushing leaves the draft holding the old version.
Name the project on every deploy
Always pass the project name explicitly. A deploy without one can overwrite a different site with this one’s build.
Placeholders block
Anything still in brackets is reported as blocking in the preview. It is a stop sign, not decoration.
Validate the merge field
A missing personalisation field is the one error that cannot be undone after a send.

Handover

From the call

What was agreed and what came out of it, so the decisions are on the record and not only in a transcript.

The words Conversation, Processes over a figure in warm light
Conversation, processesThe philosophy both sides landed on: AI is used to streamline the execution of existing ideas, not to generate them.

The build time for a campaign has gone from roughly a week per person, hand-building in Mailchimp or the Klaviyo editor, to a fraction of that. The saving is entirely in production. Strategy, curation and approval take exactly as long as they did.

ItemWhere it landed
Klaviyo accessInvites resent to LAL and Giulia Gravia during the call
Meta connectionKlaviyo’s social library is connected to Meta Business Suite. Open and click rates reading well; JAY-Z London drove the largest reach, and comments outperformed likes on video
Citizen Profile insight233 responses analysed live. Instagram is the primary discovery channel. Louis Vuitton was the most-named brand
WhatsAppParked. Worth revisiting, but its value depends on where the audience actually is
LinkedIn and YouTubeIndirect parts of the funnel. Revisit once there is a content plan for them
Design systemLives in a personal Claude account today. Moving it to the S&C team account is on the roadmap at 05
HostingDeck and doc code is split across GitHub, Cloudflare and Drive. Needs one source. Some pieces cannot yet be managed remotely, and scaling may mean paying for more hosting
Q4 socialsMoved to Friday. No production call that day