← Back

AI Systems

Campaign Brief Builder

2026-07-07

One line in, a full brief out

A campaign brief is the same handful of decisions every time. What is the objective, who is the audience, what is the offer, what does success actually measure, which channels carry it, and what does the hero copy say in each market. So I built a tool where you describe the campaign in one line and it drafts the whole brief for you, field by field, as a starting point you edit rather than a finished answer you accept.

Drive the live demo →

The deployed demo is honest about where the line sits. The drafting endpoint is stubbed with a curated deck of example campaigns rather than a live model call, so a free-typed ask resolves to the closest example and says so. Everything after the draft, the inline editing, the redraft, the readiness score, the compiled document and the Markdown export, runs for real in your browser.

The Campaign Brief Builder intake screen: a one-line campaign input above six example campaigns spanning JP/KR, Southeast Asia, ANZ, India, Greater China and a global launch, laid out in the Poster Paper editorial style

The draft is a starting point, not the answer

Every field is editable inline. You can redraft to focus a single market, add or drop a channel, or move the campaign up or down a tier, and the brief reworks itself instantly as deterministic client logic, no round trip. Then a rule-based readiness check scores the brief for launch and lists the specific gaps to close, so the tool tells you what is missing before you find out the hard way.

Nothing compiles until a human approves

The final document is gated behind a checkbox. The tool drafts, a person approves, and nothing is compiled until the draft has been read and the box is ticked. A marketing brief that goes out wrong is expensive, so approval is a deliberate step rather than an afterthought. The same discipline runs at the front door: thin or gibberish input is pushed back before drafting, and an ask that is missing a goal or a market triggers a clarify step instead of a confident guess.

The decision that mattered

One brief schema is the single source of truth. The validator enforces it, the readiness score reads it, the redraft transforms it, and the document builder renders it. That contract is what keeps the static showcase honest: a curated example and a live drafting endpoint return the same shape, so turning this into the real tool swaps exactly one function and nothing else in the app changes. The interface does not care whether the draft came from a deck or a model, only that it conforms.

Localised for the markets that are hard to fake

Each brief carries native-language hero and subhead copy for its markets, Japanese, Korean, Simplified and Traditional Chinese, Hindi, Bahasa Indonesia, Thai and German, not machine-translated captions bolted onto an English layout. The register and idiom are the point. A Traditional Chinese line written for Hong Kong reads differently from one written for Taiwan, and a brief that ignores that is a brief a local team throws away.

Built to stay honest

The whole thing is static HTML, CSS and vanilla JavaScript, no backend, no keys and no build step, so it renders identically offline and on any host. The pure logic, validation, readiness scoring, redraft, the Markdown and document builders, is covered by node:test run against the real example data. It degrades to the truth rather than a broken state: the footer says front-end showcase and sample data, and the tool tells you when it is standing in for a live model.

Stack

Vanilla JavaScript as ES modules, no framework and no build step. Self-hosted fonts and the Poster Paper design system from this site. node:test over the pure logic. Deployed on Vercel.

Building something where this would help? I'm easy to reach.