Keeping AI-Generated Content On-Brand
Part 14's generator works, but "warm, direct tone" as a written instruction produces genuinely inconsistent results across different requests — sometimes warm, sometimes generic. This part covers the real, concrete techniques that make brand voice consistent, not just described.
The real problem: adjectives alone underspecify tone
"Warm, direct tone" could genuinely describe wildly different real
writing — the actual, specific meaning only exists in examples of
what "warm and direct" actually sounds like for THIS brand
specificallyThis directly extends the AI Fundamentals series' own few-shot prompting technique — the real fix isn't a better adjective, it's showing the model real, actual examples of the target voice.
A real, structured style guide
BRIGHT_LEAF_STYLE_GUIDE = """
Voice: warm but never saccharine. Direct — get to the real point in
the first sentence, not after a scene-setting intro.
Avoid: "elevate your coffee experience," "indulge," "artisanal
journey" — genuinely overused coffee-marketing language we don't use.
Real, actual example of our voice:
"Coffee goes stale fast. That's not a flaw — it's chemistry. Once a
bean is roasted, its natural oils start breaking down within days.
We roast weekly and ship within 24 hours specifically because of
this, not as a marketing claim."
"""
def generate_on_brand_content(topic: str, funnel_stage: str) -> str:
client = get_client()
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=2048,
system=(
f"Write a blog post draft for Bright Leaf Coffee on "
f"'{topic}', for the {funnel_stage} stage.\n\n"
f"{BRIGHT_LEAF_STYLE_GUIDE}\n\n"
f"Match this real, established voice closely — including "
f"the direct, no-preamble opening style shown in the "
f"example above."
),
messages=[{"role": "user", "content": f"Topic: {topic}"}],
)
return response.content[0].textThis is genuinely more effective than part 14's plain adjective description — a real, concrete example (drawn directly from Bright Leaf Coffee's own actual published tone) gives the model something specific to actually match, rather than an abstract quality to interpret.
The explicit "avoid" list — specific, real, overused phrases — is doing as much real work as the positive example. Negative constraints (covered generally in the AI Fundamentals series) are genuinely effective here because generic AI-generated marketing copy tends to reach for exactly these kinds of stock phrases by default; naming them explicitly is what actually suppresses that real, common tendency.
A real, reusable style guide module
# style_guide.py
STYLE_GUIDES = {
"bright-leaf-coffee": BRIGHT_LEAF_STYLE_GUIDE,
"greendesk": """
Voice: confident, efficient, no fluff — GreenDesk's real audience is
busy operations managers who want the actual point, fast.
Avoid: "revolutionize," "game-changing," "seamless synergy."
""",
}
def generate_on_brand_content(topic: str, funnel_stage: str, brand: str) -> str:
style = STYLE_GUIDES[brand]
# ...same real structure, using the correct real brand's style guideStructuring this as a real, reusable dictionary — rather than hardcoding Bright Leaf Coffee's voice directly into the function — is what makes this same generator genuinely usable for GreenDesk's real content too, each with its own distinct, real brand voice, without duplicating the entire function.
Real, automated on-brand verification
def check_brand_compliance(generated_text: str, style_guide: str) -> str:
client = get_client()
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=256,
system=(
f"Compare this generated text against our real style "
f"guide. Flag any phrases from our 'avoid' list that "
f"appear, and note if the tone genuinely matches.\n\n"
f"{style_guide}"
),
messages=[{"role": "user", "content": generated_text}],
)
return response.content[0].textThis real, second AI call — checking the first call's own output — is a genuine, practical quality gate: a real, automated first pass that catches an obvious style-guide violation (a banned phrase slipping through) before a human reviewer sees the draft, directly complementary to, not a replacement for, the human review part 14 already established as necessary.
The real, honest limit of style guides alone
A real, well-built style guide meaningfully improves consistency —
it doesn't guarantee every single generation matches perfectlyThis is the same honest calibration running throughout this series: few-shot examples and explicit constraints are real, effective, measurable improvements over vague instructions, not a guarantee that eliminates the need for real, human editorial review before anything actually publishes.
Next: building a real AI email generator — applying these same on-brand techniques to a genuinely different, real output format.