The problem: Meta collapses similar creatives into one entity. A batch must be provably distinct.
What I did: staged prompts in Claude: brand ingest, brief ingest, spec matrix, generation, QA gate.
The result: 19 finals, 5 awareness stages, every pair differing on 3 of 5 axes.
The constraint
Meta's Andromeda rollup treats creatives sharing ~70% of their elements as one entity competing as one. The whole prompting system exists to defeat this, by design, not by later filtering.
Rule of thumb: differ on >=3 of the 7, with >=1 HIGH, to be a distinct entity.engine/sources/meta-static-qa.md, the registered platform source every prompt cites
Insufficient: same layout + new background color + one-word headline swap = same entity.
HIGH-impact dimensions: visual composition and layout, hero image, color palette. MEDIUM: primary text and headline angle. LOW: CTA type and aspect ratio (re-exporting the same creative at a new ratio does not make a new entity). The generation prompt carries the rule as a hard constraint: "every pair of specs differs on >=3 dimensions, including >=1 HIGH. If a pair fails, redesign one before output." The engine's dimension model enforces the top five of those seven: layout, hero, palette, copy angle, CTA. A later refinement scoped diversity within audience segments, since cross-segment archetype reuse was never a real requirement.
The prompting system
archetype_library: DERIVE from the brand's own application pages... This is the layout vocabulary, learned per brand, never hardcoded.
Never merge two campaigns. Copy is verbatim, never paraphrased.
HARD CONSTRAINT (not a later filter): every pair of specs differs on >=3 dimensions, including >=1 HIGH.
You are shown the brand pages, study them... Do not default to one skeleton.
Then montage all ads into a contact-sheet grid and LOOK (no sign-off without the grid).
The hero-photography prompt injects the brand's photography rules and joins its anti-patterns as negatives: "Strictly avoid: {{brand.anti_patterns joined}}. No text, no logos, no watermarks, level horizon, no tilt, no filters, realistic." The spec prompt enforces a CTA color monopoly: "CTA color per ad must be absent from everything else on that ad." On-image text is confined to a lockup, a pre-qualifier eyebrow, a 3-to-6-word focal, and the CTA; the brief's full headline goes to Meta's off-image primary text verbatim. The engine's own hard-rules list closes with the line that named this section: "Sources are viewed, not just read."
The proof
The staged prompts sent to Claude turn by turn, the way the campaign was actually made: brand ingest, brief ingest, spec generation. Real responses, no script.
The session was re-run for this capture: P1, P2, and P3, verbatim from engine/prompts, sent to a live Claude Code session in the project folder with read-only tools. Brand extraction, brief ingest, and three ad specs came back in conversation, including Claude flagging the source's own OCR typos and the brief's two-campaign split. Captured with claude -p in verbose stream-json mode, replayed from the event log. The rendering itself is a small code stage (Playwright turning Claude-written HTML into 2160px masters); it stays out of scope here, this case study is about the prompting that decides what those ads are.
The finals
The brief's framework maps every ad to a stage of awareness, each with its own director's note. Dark builds for cold audiences, brights for warm ones. The ads shown are the finals: generated by the engine, then polished in Figma.
Stop. You're the audience. Does this make you pause?
They feel the pain. Show them the exit.
Win the category, not just the click.
Show the product working on a real contract.
Tip the fence-sitters. Urgency, not pressure.
Delivered to the client; no performance numbers are published here. Measured in the work:
final ads in this campaign, one brief
awareness stages, each with its own director's note
minimum differing axes between any pair of ads
brand-book pages rendered for visual grounding
masters per ad, four aspect ratios
more finals in the sister campaign, same system
Claude generated: the brand extraction, the spec matrix, the hero briefs, and every layout. I owned: the staged prompt architecture, the Andromeda constraint design, the awareness framework, art direction against the brand book, the QA gate, and the Figma polish on every final. A second campaign, Make the Switch, ran through the same system: 13 more finals, each with built variants.
Maria Angelika AgutayaWorkflow Engineer · mariaangelika.com · LOIS Ad Engine, built in Claude, 2026