Agents do the legwork.
I bring the judgment.
I brief agents the way I used to brief engineers, and put working prototypes in front of people in days, not sprints. This page follows one real redesign, the recording flow (33% → 66.58%), run the way I’d run it today.
The hub
Notion is the point guard
I don’t use Notion for notes. I use it as the place every other tool reports to. An agent there is connected over MCP to Figma, PostHog, Relume, GitHub, Linear, Fern and Slack, and the PRDs, design docs and wiki it writes live right next to the work they describe.
I ask in plain language. It fans out, pulls what it needs from each tool, and comes back with a draft I can edit, not a pile of tabs I have to stitch together.
The ask
Draft a PRD for the recording-flow redesign. Pull the last 30 days of the record → submit
funnel from PostHog, link the current explorations in Figma, check where the flow sits in
the Relume sitemap, check the upload API’s limits in our Fern docs, and list the open
GitHub issues labelled
recording. Use our PRD
template and cite every number. Then propose Linear issues for anything we commit to,
and share the draft in
#recording-flow.
The fan-out
- PostHog · Query the record → submit funnel, last 30 days Read
- Figma · Read the current recording-flow explorations Read
- Relume · Find where the flow sits in the sitemap Read
- GitHub · Search open issues labelled recording Read
- Fern · Check the upload API’s limits in the reference Read
- Notion · Draft the PRD from the team template, numbers cited In Notion
- Linear · Create issues for what we commit to Needs OK
- Slack · Post the draft to #recording-flow for review Needs OK
Reads run on their own. Anything that writes to another tool waits for a yes, which is Notion’s default for MCP actions, and the right one.
Notion · PRDs
PRDs built from evidence
A PRD used to be an afternoon of copying numbers out of dashboards. Now the agent pulls the funnel, the replays, the files and the API limits itself, drafts against our template, and cites every line. I spend the afternoon on the argument instead.
-
Templates, filled from evidence
The agent works from our PRD template and fills it from the tools, so every PRD has the same spine and reads the same in review.
-
Every number has a source
Each claim links back to the funnel, replay, file or endpoint it came from. A stakeholder can check it without asking me.
-
It lives with the wiki
PRDs, design docs and decisions sit in one database, linked to their Linear projects, so the next PRD can cite the last one.
Claude Code · Claude Design
The prototype is the code now
The agents write the code; my job is the brief, the direction and the judgment. Four files from the recording flow, as I’d run it today, start to finish.
# Task: prototype the recording-flow redesign ## ContextRead PRODUCT.md, then use the v3-design skill:open only the docs it routes you to.Contributors are on a phone, often recording for thefirst time, usually minutes before a deadline. ## GoalOne flow, mobile-first: record → review → submit.Completion is the metric. Every extra screen costs it. ## Constraints- Build from documented components only. If none fits, propose a contract first; don't invent one.- daisyUI for structure, the tribute's theme vars for brand. No raw values, no btn-primary on CTAs.- Ask for the camera in context, never on load.- Design every state: denied, recording, uploading, failed upload, success. ## Done when- `check:system` and `impeccable detect` both pass- It runs at 390px with no horizontal scroll- A keyboard and a screen reader can finish the flow- You've listed what you assumed and couldn't verify
Interactive prototype, phone frame: the contributorside of a group video gift for a teacher's retirement. Three clickable screens:1. Invite: who it's for, the deadline, one button2. Record: 60-second cap, retake, visible countdown3. Done: what happens next, and a link to share Use the attached screenshots as the visual baseline.Show two directions for screen 1 side by side, onequiet and one loud. Real copy, no lorem ipsum. When I pick one, package it as a handoff to Claude Code.
# Product ## Who it's forContributors invited to a group video gift, not theorganiser. Most arrive from a text message, on a phone,with no account and no idea what Tribute is. ## What it has to doGet a heartfelt 60-second video from someone in underthree minutes, without losing them at the camera step. ## Constraints- Mobile Safari is the primary browser- Contributors never create an account- Warm, never cute: some of these are memorials ## Anti-goals- No onboarding carousel- No dark patterns on the upsell
# Plan the UX before any code exists/impeccable shape the contributor invite screen# A scored review, then act on it/impeccable critique the record step/impeccable quieter the invite hero# Final passes before it ships/impeccable polish the review screen/impeccable harden the upload states# Both gates, before handing back and again in CI$ bun run check:system$ npx impeccable detect --github src/
The system
A system agents can read
Agents don’t read a design system the way people do. They need to know what exists, what
it’s for, and what they’re not allowed to invent. On Tribute that’s four layers:
PRODUCT.md for the intent, daisyUI for structure, each
tribute’s theme tokens for its brand, and component docs for the patterns, with a design
skill that routes every edit to the one doc it needs.
Find the system first, check against it after. Below is one real task, step by step. Click a step to open the file the agent read.
- Explore Relume · Claude Design
- The system What every agent reads first PRODUCT.mddaisyUITheme tokensComponent docs
- Build Claude Code
- Check Two gates · review
- Measure PostHog
Trimmed from Tribute’s design docs. Shaped by Kaelig Deloumeau-Prigent’s State of AI in Design Systems (July 2026) and Southleft’s What does AI-readiness mean in design systems?
Route, don’t load
The skill reads one router and opens only the doc for the files being changed. One long manifest teaches agents to rebuild components instead of reaching for them.
Contracts, not prose
Each component doc opens with a short structured header: what it is, what it allows, when to use it. Agents and the gates check against that; the prose is for people. The index is built from the headers, never typed by hand.
Link, don’t copy
daisyUI’s own llms.txt stays upstream and the docs link to it. A copied vocabulary goes stale the day daisyUI ships, and our docs only hold our decisions.
Measured, not assumed
Five real tasks, run with and without the system, scored on reuse, token discipline, accessibility and judgment. If the docs don’t move the score, they’re decoration.
Impeccable
Taste, as a command
Agents write competent, forgettable UI by default. Impeccable is a design skill for coding
agents, built on Anthropic’s frontend-design skill, that gives them a vocabulary for taste:
commands I aim at a narrow target, judged against the PRODUCT.md
and DESIGN.md it writes for the project.
A narrow target beats a whole page. /impeccable critique the pricing cards gets a better answer than “make the site nicer” ever will.
Plan
Before code exists
-
init
Writes
PRODUCT.mdfrom the codebase -
document
Writes
DESIGN.md - shape Plans the UX before code
- extract Pulls repeats into the system
Steer
Push it a direction
- bolder Amplifies a safe design
- quieter Tones down a loud one
- distill Removes what isn’t needed
- typeset Fonts, hierarchy, sizing
- layout Spacing and rhythm
- colorize Colour for a grey interface
- animate Transitions and feedback
- delight Adds personality
- overdrive Shaders, springs, scroll effects
Review & finish
Before it ships
- critique A scored UX review
- audit A technical quality report
- polish The final pass
- harden Errors, i18n, overflow, edge cases
- clarify Rewrites unclear copy
- adapt Screen sizes and devices
- optimize Loading and rendering
- onboard First-run and empty states
Iterate live
In the browser
- live Pick an element, cycle variants
- generate Variants of a named element
Two gates, and neither one is an agent
Impeccable judges whether the UI is good. It can’t tell whether it’s ours: a hand-built dialog can be beautiful and still go around the system. So a second check runs the system’s own rules: daisyUI for structure and the tribute’s theme for brand, documented components before new ones, a component’s contract changed with its code, and axe for the basics. The agent runs both before it hands work back, and both annotate the pull request. Taste stops being a review comment someone has to remember to leave, and becomes a check that has to pass.
The skeleton
Relume, for the structure
Before there’s code there’s a sitemap. Relume is where the skeleton comes from: page structure, wireframes and a brand system, exported to Figma, Webflow or React, and now straight into the agents.
Sitemaps first
A prompt becomes a sitemap, then a wireframe per page. The fastest way I know to agree on structure before anyone argues about pixels.
Explore the brand, then codify it
The Style Guide Builder turns a palette and a type pairing into a direction in minutes. Once one is approved, it’s translated into the daisyUI theme and the design docs. Relume never owns a production token.
A starting point, not a second system
Over a thousand sections, searchable in plain language through the Relume MCP. Agents take the layout and composition, then rebuild it from our documented components and tokens. The shadcn/ui code never ships as is.
Into Claude Design
The design system exports to Claude Design as one import, so first drafts start on-brand instead of being dragged there.
Fern · Dev & API docs
Docs that write themselves from the spec
An API is only as usable as its docs, and hand-written docs rot the week after launch. Fern generates the reference and the SDKs from the spec, and serves the whole thing in a form agents can read as easily as people can.
One spec, every surface
The reference, the SDKs and the changelog all regenerate from the spec, so the docs can’t fall behind the API.
Docs agents can read
Every page has a Markdown twin and an llms.txt index, so an agent reads the reference instead of guessing at it.
An MCP server for the docs
Notion’s agent, Claude Code or Cursor can ask the docs directly — which is how the PRD knew the upload limit.
The dev wiki, too
Guides, runbooks and how-tos live beside the reference, versioned with the code they describe.
Linear · Planning
From commitment to pull request
The PRD says what we’re committing to; Linear is where that turns into work someone owns. More and more of that someone is an agent, which changes what a good issue looks like: scoped tightly enough to hand off, with the evidence attached.
Filed from the PRD
The agent proposes issues from what the PRD commits to, each linked back to the line that justifies it. Nothing is created until I say yes.
Delegated, not dumped
Well-scoped issues go to a coding agent. It opens the PR; a human reviews and merges. The issue keeps the whole trail.
Context in, over MCP
Linear’s own agent pulls context from other tools over MCP, so an issue can start from meeting notes or a replay rather than a blank form.
PostHog · Self-driving
The product files its own bug reports
PostHog is where the work gets judged after it ships. Replays, errors, funnels and experiments in one place, and now an AI layer that watches the replays for me, files what it finds, and can open the pull request that fixes it.
Self-driving means autonomy from my instructions, not from engineers. Every fix still goes through review, and every release still goes out behind a flag.
UX bugs, found in the replays
Replay Vision watches sessions so I don’t have to: it flags the rage clicks and dead ends, scores how frustrated someone was, and writes up what happened.
Dev bugs, with the session attached
Every error comes with the replay it happened in, so nobody has to reproduce it from a stack trace. The Inbox groups the signal, and an agent researches it into a fix.
Ship behind a flag, prove it with a test
Experiments run on the same flags as releases: a staged rollout, a holdout to measure against, and a kill switch if the numbers turn. Nothing goes to everyone on a hunch.
The team
A team’s system, not my setup
None of this is a personal productivity stack. It’s how we rebuilt Tribute’s platform: functioning code as the deliverable instead of Figma files, one-week sprints across product, design and engineering, and a team that started skeptical and stopped being.
- to rebuild a decade-old platform
- 3 months
- to rebuild a decade-old platform
- from skeptical to one-week sprints
- Team of 4
- from skeptical to one-week sprints
- onboarding conversion
- ~25% → 54%
- onboarding conversion
- purchases, same period
- +19%
- purchases, same period
One spine for every PRD
The agent drafts against the same template for everyone, so review is about the argument, not the format.
The system lives in the repo
Not in my head. PRODUCT.md holds the intent, a design skill routes every edit to the doc it needs, daisyUI carries structure and each tribute’s theme carries its brand. Changing the system is a pull request, and CI fails if a component changes without its doc.
Two gates hold the line
One checks the system was used, one checks the result is good. Both run on every pull request, including the reviews I’m not in. Taste that only exists in one reviewer doesn’t scale.
One trust model
Agents read freely; anything that changes another tool waits for a person. Secrets and production data stay out of reach, because read-only isn’t the same as safe.
The sketchbook
Figma, now
Still open, mostly as a sketchbook: a moodboard, a layout to argue with, a component to poke at. It used to be where the work lived. Now the work starts as a brief and is running code by the end of the day.
And when an exploration wins, a comment is enough. The Notion agent reads Figma over MCP, picks up the mention, and logs the decision on the PRD, linked back to the frame.
Which keeps ownership simple. Code owns the components and tokens, Notion owns the decisions, and Figma owns neither, so nobody has to ask which one is official.