Case study
Riff (Growth Triage Tool)
Paste a raw growth idea: a tweet, a Discord message, a link, and Riff returns the 1st draft marketing brief (classified, measured, planned, drafted) in seconds. Next.js + Claude structured outputs, with metrics conditional on marketing type.
Leading indicators
Impressions · engagement rate · watch-through %
North-Star metric
Sign-ups from UTM’d links → activated users
First draft
v2 ships today. Here’s the 60-second tour of what changed — and why your build times just dropped…
The problem
Growth teams at developer-tools companies drown in ideas. They arrive constantly and from everywhere — a founder’s tweet, a Discord message, an AI-news headline, a “we should blog about this.” They pile up and get lost, and the few that survive still need someone to answer the same questions every time: Is this worth doing? For which audience? How would we even measure it? — and then actually write the first draft.
That triage-and-first-draft work is the real bottleneck between “good idea” and “shipped.” Most tools attack the wrong end of it: they give you another board to maintain, not the work itself.
The core design decision
The output is a brief, not a database row. Riff doesn’t try to be a project manager or a CMS. It produces the one artifact a marketer actually needs to act on: a structured brief that says what this is, who it’s for, how you’ll know it worked, the plan to ship it, and a first draft — rendered right in the app, with one-tap Copy brief (as markdown) so it can live wherever the team already works.
Metrics conditional on marketing type
A brief is only useful if it answers “how would we know this is working?” The AI first classifies each idea into a marketing type, then selects the metrics that apply:
| Marketing type | Leading indicator (know early) | North-Star metric (the real win) |
|---|---|---|
| Events | registrations, check-ins | attributed sign-ups → activated users |
| Social & Video | impressions, engagement rate, watch-through % | sign-ups from UTM’d links |
| Content | pageviews, read-through, repo stars | organic sign-ups + activated developers |
| Community | new members, messages per active member | paid conversions from the community |
Every North-Star metric ladders to the same real goal: activated, paying users, while vanity metrics (impressions, follower counts) are tagged as leading indicators, never goals.
AI-native architecture
- Structured outputs for the classification. A raw idea → a strict JSON schema (category, funnel stage, effort, marketing type, the three metrics, a goal, a plan) using the model’s structured-output mode — so a live demo can’t produce a malformed classification on stage.
- The AI selects from a taxonomy; it doesn’t invent one. The metrics framework — which leading indicator and North-Star metric belong to which marketing type — lives in plain, unit-friendly TypeScript. The model chooses from that catalog and tailors the specifics to the idea. Judgment where it’s needed; deterministic structure where it isn’t.
- Right-sized model calls. One call classifies (fast, low reasoning effort); a second drafts the actual asset (more effort). Nothing more.
- House-style enforced on every draft. A voice layer (developer audience, concrete over hype, no claims beyond the source, a banned-hype-word list) is injected into every drafting prompt, with two audience registers (accessible/dev-first vs deep/technical). Designed so a memory layer could later learn each writer’s real voice.
Engineering notes
- Shape: Next.js 16 (App Router; middleware is now
proxy.ts) + React 19 — one page, one API route (/api/submitdoes classify → draft server-side). - Security: the Anthropic API key never leaves the server; the browser only ever calls
/api/submit. A password gate (proxy.ts) fronts the whole app. - No database by design: each brief is a live session artifact, and the Copy-brief export means the output lives wherever the user wants — not locked inside the tool.
- Ships continuously: push to
main→ Vercel auto-deploys.
What’s next
A memory layer so drafts learn each writer’s voice over time (the “learns your team’s voice” the app already gestures at), and an optional one-click push of a finished brief into whatever tracker a team already uses — kept deliberately as an export, never a lock-in.
Try the live demo — or email me for the password.