← Back to featured work

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.

The creative briefThe promo summaryThe planning calendarThe emails

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.

run campaign opsset up the next briefapprove the weekreconcile the briefs

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.