Skip to content

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

Product agent

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

  1. PostHog · Query the record → submit funnel, last 30 days Read
  2. Figma · Read the current recording-flow explorations Read
  3. Relume · Find where the flow sits in the sitemap Read
  4. GitHub · Search open issues labelled recording Read
  5. Fern · Check the upload API’s limits in the reference Read
  6. Notion · Draft the PRD from the team template, numbers cited In Notion
  7. Linear · Create issues for what we commit to Needs OK
  8. 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.

  1. 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.

  2. 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.

  3. 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.

  1. Explore Relume · Claude Design
  2. The system What every agent reads first PRODUCT.mddaisyUITheme tokensComponent docs
  3. Build Claude Code
  4. Check Two gates · review
  5. 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.md from 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.

01

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.

02

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.

03

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.

04

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
PRD template

One spine for every PRD

The agent drafts against the same template for everyone, so review is about the argument, not the format.

PRODUCT.md · v3-design · daisyUI

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.

check:system · detect

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.

Writes need a yes

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.

Breakout

Portfolio computer system

Game program

66 Bricks
to clear

  • One player
  • No continues
  • Overlays the page
  • Clear all 66 to win

Adam Robertson AR‑2026