Campaign DNA: Temporary Intent on Top of Permanent Identity
Your Brand Identity Shouldn't Change Just Because It's Ramadan
Every brand we work with goes through the same awkward moment: they want to run a promotion โ a seasonal sale, a product launch, a holiday push โ but their AI-generated content is still speaking in their evergreen brand voice. The colors feel wrong. The target audience is off. The caption has no idea there's a 30% discount running until Friday.
The naive fix is to edit the Brand DNA directly. Change the target audience. Swap the accent color for something festive. Update the tone. But then what? When the campaign ends, someone has to remember to undo all of it. And in the chaos of running a small business, that almost never happens.
We needed a different model entirely โ one where campaigns were first-class citizens, not edits.
A Layer, Not a Replacement
The insight behind Campaign DNA is simple: a campaign is not a new identity, it's a temporary context. Your brand is still your brand during Lebaran. You just have a specific audience you're speaking to, a specific mood you want to evoke, and a specific message you want to inject into every caption.
So instead of letting campaigns modify Brand DNA in place, we made them a separate override layer that resolves at generation time. The Brand DNA stays untouched in the database. When a post is being generated, the system asks: is there an active campaign right now? If yes, it merges the campaign's overrides on top of the base Brand DNA before handing anything to the AI.
This means deactivating a campaign is instant and total. Nothing lingers. The moment a campaign ends, the system returns to baseline behavior โ no cleanup required, no risk of orphaned edits.
Date Windows and the Single-Active Rule
Not every campaign maps to a discrete on/off toggle. Some have a natural lifespan: a flash sale from Friday through Sunday, a product launch window for the first two weeks of the month. Rather than requiring businesses to remember to flip a switch at the right time, campaigns carry optional start and end dates that are enforced automatically during generation.
When the generation pipeline asks for the active campaign, it doesn't just check the "isActive" flag โ it checks whether the current timestamp falls within the campaign's date window. A campaign with no start date is always considered started. A campaign with no end date never expires. This makes the common cases simple while keeping the full flexibility available when needed.
We also enforce a single-active rule: only one campaign can be active at a time. When a business activates a new campaign, any previously active campaign is automatically deactivated. This prevents conflicting overrides from layering on top of each other and keeps the logic predictable โ the business always knows exactly which campaign voice is being used.
The Free-Form Lever
Structured overrides handle the predictable things: target audience shift, color palette adjustment, mood change. But campaigns often carry nuance that doesn't fit neatly into fields. "We're running a buy-one-get-one deal" or "emphasize that this product is back in stock after selling out last month" โ these are instructions, not data.
For this, we added a free-form text input that gets injected directly into the caption generation prompt as a clearly labeled override block, positioned between compliance guardrails and product context. The AI sees it as a first-priority directive that applies across all posts generated during the campaign's window.
This gives businesses a natural language lever they can use without any understanding of how the underlying prompt is structured. They write what they want to communicate. The AI figures out how to weave it in authentically, per post, per influencer, per product.
History Is Never Deleted
One architectural decision we were deliberate about: campaign history is permanent. When a campaign ends or gets replaced, it isn't deleted โ it's deactivated and preserved in the record. Businesses can see every campaign they've ever run, when it was active, and what overrides it applied.
This matters for two reasons. First, it gives businesses a template library. If last year's Ramadan campaign performed well, they can reference it when setting up this year's. Second, it means we never lose context about why certain posts look or sound the way they do. Every post generated has a traceable lineage back to the brand state โ including any campaign that was active at the time.
Campaigns as a Coordination Layer
What we're really building with Campaign DNA is a coordination layer between marketing intent and AI execution. The gap between "we want to run a promo" and "the AI is generating the right content for that promo" used to require manual intervention at every step. Now it's a single activation.
For small businesses generating weeks of content at a time, this changes the relationship with the tool. Instead of fighting the AI's defaults, they can shape its context for specific moments โ then trust it to handle the rest. The brand identity does the heavy lifting every day. Campaigns handle the moments that matter.
We're already seeing businesses use this for product drops, partnership announcements, and seasonal moments. The next step is surfacing campaign performance data โ so the best campaigns become templates that teach the system what works for each brand.