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.
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.
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
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.
| Step | What happens |
|---|---|
| Review | Abina, Giulia or LAL open the campaign sheet and go through the applicants |
| Mark | Selected applicants are marked green. Everyone else stays outside the approved audience |
| Filter | The sheet is filtered to the green rows |
| Export | Those rows are exported as a CSV |
| Import | The CSV is imported into Klaviyo and added to a clearly named campaign list |
| Split | Where 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.
| Step | What happens |
|---|---|
| Store | Each approved contact’s unique link is saved against their profile in a custom field |
| Reference | The template calls that field where the link should appear |
| Send | Each 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.
| Step | Today | State |
|---|---|---|
| Sign-up into the sheet | Form submission writes a row automatically | Automatic |
| Acknowledgement | Everyone who applies gets a thank you | Automatic |
| Citizen Profiles into Klaviyo | Stored, mirrored to Sheets, then pushed with thirteen profile properties. A failed push is flagged for retry rather than lost | Automatic |
| Email design and rendering | One renderer, so every email in every campaign is identical in the house system | Automatic |
| Templates and draft campaigns | One command per campaign, idempotent, per-campaign state | Automatic |
| Preview for approval | One command, published for sign-off | Automatic |
| Applicant curation | A person reads the sheet and marks green | Manual on purpose |
| Sheet into Klaviyo | Filter, export CSV, import, name the list | Manual, first to automate |
| Cadence into the copy file | Read and transcribed | Manual |
| Artwork out of Figma | Exported and dropped into the campaign folder | Manual |
| Instagram to sign-up | Link in bio | Nothing built |
| Sending | A person, after the checklist | Manual on purpose |
Next
What we automate, in order
Ordered by what it unblocks. The first two are small and pay immediately.
| What | Why it is worth doing | Size | |
|---|---|---|---|
| 01 | Instagram comment to DM | Removes 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 questions | Small |
| 02 | Sheet to Klaviyo, directly | Kills 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 untouched | Small |
| 03 | Segment templates off profile data | Thirteen properties per Citizen Profile sitting unused. Saved segments for industry, city and engagement turn them into audiences with no export | Small |
| 04 | A fixed-column cadence template | Makes 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 ships | Small |
| 05 | Design system into the S&C account | It 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 login | Medium |
| 06 | Artwork straight out of Figma | Needs the board shared and the connector authorised. Then a named frame becomes a campaign asset with no export step and no wrong-crop risk | Medium, blocked on access |
| 07 | One performance view | Klaviyo sends and Meta in a single weekly read, so insight is a habit rather than an errand | Medium |
| 08 | Consolidate the code | Deck and doc sources are split across GitHub, Cloudflare and Drive. One hosting source, so nobody has to know which is current | Medium |
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 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.
| Item | Where it landed |
|---|---|
| Klaviyo access | Invites resent to LAL and Giulia Gravia during the call |
| Meta connection | Klaviyo’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 insight | 233 responses analysed live. Instagram is the primary discovery channel. Louis Vuitton was the most-named brand |
| Parked. Worth revisiting, but its value depends on where the audience actually is | |
| LinkedIn and YouTube | Indirect parts of the funnel. Revisit once there is a content plan for them |
| Design system | Lives in a personal Claude account today. Moving it to the S&C team account is on the roadmap at 05 |
| Hosting | Deck 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 socials | Moved to Friday. No production call that day |
Read next
The rest of the system
This playbook is the process. These are the things it acts on.
Live preview
October email previews
Both Los Angeles campaigns as draft copy, rendered as they will land. What step four produces.
OpenGuidelines
Brand guidelines
Type, colour, marque, design and art direction. The system every email and document is built from.
OpenModel
The funnel
Signal, Pull, Warmth, Threshold, Entry, Ritual. The stages every email in a cadence is written against.
Open