Casino Campaign Ops
The problem
Casino marketing runs about a dozen campaign types at once. Each one goes out as a series, and every series in every type needs the same set of moves made in the same order before a single guest email can go out.
None of it is hard. All of it is exacting. The mistakes are quiet ones: a date in the brief that does not match the date in the summary, a send that lands on a holiday, a second copy of an email that already went out last week. Nothing complains. You find out when someone downstream asks why.
How I use it
There is no app to open. It is a Claude Code skill, so the interface is a sentence.
I say one of those and it goes. It reads the current state of the workbooks rather than asking me what it should already know, does the deterministic parts on its own, and comes back with one proposal covering everything that needs a decision. I say go once.
When it is not sure, it asks rather than guessing. A new series is the one moment an offer is allowed to change, so it stops and asks me whether it did, every time, instead of assuming this series looks like the last one.
What it does
01
Build the brief
Copies the campaign type's template into a new series folder and fills the identifiers and the campaign window.
PowerShell
02
Update the summary
The campaign row, a row for every email in the series, and the labels on the planning calendar.
Excel
03
Rank the sailings
For event campaigns, scores the eligible sailings and writes them into the brief. Refreshed before every send, because the ranking is a snapshot and it goes stale.
Snowflake
04
Draft the emails
The brief hand-off to the agency and creative, and the load instruction to revenue management.
Outlook
05
Audit it
Two read-only passes: one inside the summary, one across every brief against the summary.
Python
It also holds the parts of the job that are easy to forget. Extending the planning calendar into the next month. Promoting an approved week into the input tabs. Rebuilding the feed that goes into the corporate marketing calendar, and reminding me to paste it.
What it checks
Dates
- Live one day before the first email
- End date against the plan
- No weekend sends
- No sends on a holiday
Sends
- Duplicate sends
- Two emails to one audience back to back
- Two series of one type overlapping
- Already emailed
Content
- Campaign identifiers
- Missing end date
- Landing page links
- Offer codes against the master matrix
& more
Both audits are read-only and neither takes the workbook’s write lock, so I can run them while other people have the file open.
The rules it will not break
It never presses Send. Every email it writes lands in drafts. I read it and I send it.
It writes only the cells it owns. Briefs pick up tabs from other teams over a campaign’s life, and formula cells look like ordinary cells. It leaves both alone.
It backs up before the first write, and reads back after. Evidence, then the claim.
It will not talk itself out of a send that already happened. A copy in Sent Items proves an email went out. The absence of one proves nothing, because a mailbox can still be syncing, so it refuses to mark a sent email as outstanding. That one edit is what manufactures a duplicate.
It fails loud. A check it does not recognise is handed to me, not guessed at.
Outcome
The routine part of a campaign launch now takes a sentence. The checks that used to depend on someone remembering to do them run every time, and the things that genuinely need a decision arrive as a question instead of as a surprise.