← Back to selected work
Live

BriefStack

An AI tool for content briefs that refuses to write the content.

Role

Product definition, product decisions, direction of an AI-assisted build

Company

Self-directed

Year

2026

Stack

Next.js, TypeScript, PostgreSQL, Prisma, DeepSeek

Live URL

thebriefstack.vercel.app

Why I built it

I spent five years in content marketing and SEO operations. The recurring failure in that work was almost never the writing. It was everything that should have happened before the writing.

Briefs got made inconsistently, in whatever format the person making them preferred that week. They lived in scattered documents. The strategic decisions inside them — who this is for, what they are actually trying to find out, where they sit in the funnel, what the piece is supposed to achieve — were often made implicitly or not at all. Then a writer received something thin and filled the gaps with guesses.

BriefStack is that problem turned into software. It takes a topic, an audience, a content type and a funnel stage, and produces a structured brief: audience analysis, search intent, content goal, recommended angle, questions the piece must answer, suggested structure, and a call to action.

The decision that defines it

It does not write content.

That is the product's central constraint and I enforced it deliberately. The system prompt tells the model it does not write content. The build rules list AI article generation as a forbidden feature. The reasoning is that generating an article is the easy, crowded thing, and it solves the wrong half of the problem — the bottleneck in content operations was never producing words, it was deciding what the words were supposed to do.

The cost of the decision is real. It narrows the product to teams that already have a writer, and it means BriefStack cannot compete as a general content generator. I think that is the correct trade.

How it was built

Three areas, from specification to hardening.

[method]

Specification-driven build

Wrote a standing set of specification documents — product scope, forbidden features, required output structure, architecture, UI principles, tone rules — that the coding agent worked from throughout. When scope drifted, I corrected the document rather than the output.

[reliability]

Malformed JSON handling

The model returned malformed JSON often enough to be a real problem. Fixed it specifically: detect the truncation signature, retry once with a larger token budget, strip the fences, validate required sections before anything reached the user.

[hardening]

Production hardening pass

A month after the app was working, added rate limiting, a hard timeout on model calls, error boundaries, and a proper data access layer — then deleted two pages an earlier version of the flow had needed and the current one did not.

Inside the product

Topic, audience, content type and funnel stage go in first. The brief is configured, not prompted.
The output is a full brief with named sections. The summary takes a position rather than restating the topic.

Where it stands

Status: Live

Live at thebriefstack.vercel.app. Used by me and by other writers and marketers.

Reflection

The same method built both of these.

BriefStack started from a problem I had lived: writing the same brief from scratch every time, inconsistently. The system handles the real failure modes of that job. It was built with the same specification-driven method as the Multiphase platform, which makes it a way I work rather than a one-off.