← Back to featured work

AEM Campaign Builder

Streamlit tool that automates casino landing-page publishing in Adobe Experience Manager, replacing a manual authoring process.

Python Streamlit AEM REST API Snowflake Playwright
AEM Campaign Builder UI

The problem

Every casino campaign at Holland America Line needs a set of landing pages built in Adobe Experience Manager: one deal page per tier, one banner experience fragment per tier, a CSV with pricing rules, and a published timeline. Campaigns have 5 to 11 tiers each, and there are multiple campaigns a month. Authoring each one by hand in AEM is slow, error-prone, and means an analyst is effectively a copy-paste robot for an afternoon.

What I built

A Streamlit app that takes a campaign from Snowflake and builds everything end to end. It creates the banner experience fragments with the right headline, subtext, logo, T&C modal, and background image. It creates the deal pages, links them to the banner fragments, and points them at the correct CSV. It uploads the CSV to the AEM DAM. It schedules publish and unpublish times in Eastern. Then it verifies the build by reading every property back out of AEM and comparing to the Snowflake spec, because a partial failure that silently leaves a page with the wrong offer is worse than a loud crash.

Auth is a detail worth noting. AEM does not hand out API keys. The tool launches Edge with the user’s SSO profile, waits for login to complete, extracts session cookies, and uses those for all subsequent API calls. CSRF tokens are fetched lazily and refreshed on 403.

Key design choices:

Outcome

Casino campaigns that took most of a day to author now build in minutes. 26 unit tests covering template fill, date formatting, banner generation, URL generation, and verification. Campaigns run across four AEM environments (dev, QA, stage, prod). The tool detects environment quirks (stage’s wcmcommand lowercases page names, prod preserves case) and adjusts.

What’s next