Campaigns burn bright. Systems keep speaking when the ads stop. We write for owned channels first: site, newsletter, product UI. Paid only amplifies what’s already true.
If every week needs a new personality, you don’t have a brand — you have a content treadmill. The work is finding the sentence that survives the quarter.
Where attention actually landed
- 62% — traffic from owned (90-day window)
- 3.4× — newsletter → trial (vs cold paid)
- 1 — core message held (across 4 channels)
Channel roles, not channel chaos
Voice ownership map
| Channel | Job | Cadence |
|---|---|---|
| Site | Proof + offer | Evergreen |
| Newsletter | Trust over time | Bi-weekly |
| Product UI | Tone in situ | With releases |
| Paid | Amplify winners | Burst |
A message object you can reuse
We keep a tiny schema for the spine of a campaign — so LinkedIn, landing, and sales don’t invent three brands.
// message.ts
type BrandMessage = {
claim: string; // one sentence people can repeat
proof: string[]; // facts, not adjectives
offer: string; // what happens next
taboo: string[]; // phrases we refuse
};
export const launchSpine: BrandMessage = {
claim: "Software that makes Friday lighter.",
proof: ["−41% re-entry", "one write path", "rollback rehearsed"],
offer: "Book a 45-minute ops walkthrough.",
taboo: ["disrupt", "synergy", "AI-powered everything"],
};
When the spine is solid, creative can move. When it isn’t, every asset becomes a negotiation.
“Paid only amplifies what’s already true.”