AI and feedback

What the AI actually does to your client's comments

Your client writes "the header feels off" and pins it to the header. Writhink takes that comment together with the element it is attached to, the page, the device type, the viewport size and a screenshot, and turns the whole batch into one prompt you paste into ChatGPT, Claude, Cursor or any AI coding assistant. It rewrites the vague comments without inventing anything the client never asked for.

No credit card. Your client doesn’t need an account.

implementation-plan.md · 3 changeswrithink
[P1]Hero headline — scale it up, tighten the leading, more contrast.
[P2]The CTA fails AA contrast: darken the color.
[P3]Remove the duplicate pricing card · 2 comments merged.
→ paste into Claude · Cursor · ChatGPTCopy prompt

01

The gap between a comment and a change

A client comment is not a bad ticket because the client is careless. It is a bad ticket because they are looking at the page while they write it. "This one is too big" makes complete sense with a cursor hovering over the element. In your inbox two days later it means nothing, and you are the one who has to reconstruct it.

Writhink closes that gap at both ends. When the comment is created it captures what the client did not have to type: the page URL, the element the pin is attached to, where inside that element the pin sits, whether they were on desktop, tablet or mobile, the viewport size in pixels, and a screenshot of the spot. What it does not capture is the operating system, the browser or the handset model — device type and viewport width are what a layout complaint actually needs, and the rest would only be noise in the prompt.

When you generate the prompt, all of that stays welded to the item the model rewrites. The rewrite changes the wording. It never changes the pin the wording came from.

02

Two things get called AI design review

One is a model that looks at your layout and announces that the contrast is low, the spacing is inconsistent and the hierarchy needs work. Writhink is not that, and we are not planning to be. A model grading a screenshot does not know what the brand is for, what the client already rejected in the last round, which constraint produced the thing it is criticizing, or that the oversized logo is contractual. Its output reads authoritative and is unfalsifiable, which is the worst combination to hand a client who will quote it back at you in the next meeting.

The other meaning is the one that actually eats your week. Five people looked at the design, they said thirty things across an email, a call and two chat threads, and somebody has to convert that into a list of changes with no request lost and no request invented. That is the part Writhink automates.

Nothing here will tell you your hierarchy is off. Plenty of it will stop you doing the same revision twice.

03

What happens when you hit generate

Two passes. The first is plain code. Only the second one is a model.

  1. Step 1

    Group, without a model

    Writhink sorts every open comment by page, then by the element it was pinned to. Exact duplicates collapse into a single item that records it was reported twice. This part is deterministic, so nothing about your feedback's structure can drift between one export and the next.

  2. Step 2

    Number every item

    Each item keeps the permanent number shown on the pin in the review. Item #4 in the prompt is pin #4 on your client's screen. That number survives the rewrite, so when the AI reports back you can match its checklist to the pin the client is watching.

  3. Step 3

    Rewrite, do not invent

    Claude Haiku rewrites each comment so it reads clearly and can be acted on, with the meaning intact. "Make it pop" pinned to a call-to-action becomes a request about that call-to-action, not a page redesign. The model is instructed never to add a request the client did not make.

  4. Step 4

    Flag what is still unclear

    If an item can only be applied by inventing a missing detail, the model leaves the client's own wording alone and tags it (unclear — ask the client). Guessed items are the expensive ones: you build them, the client says that is not what they meant, you build them again.

  5. Step 5

    Close with instructions for the receiving AI

    The prompt ends by telling whichever assistant reads it to merge duplicates, apply the changes one page at a time, produce a checklist ordered by priority, and draft short replies you can paste under the items marked unclear.

04

Before: four comments, as clients actually write them

A realistic inbox after a client spends ten minutes on a staging site.

  • "the header feels off on my phone" — pinned on the nav, mobile, 390 by 844
  • "can we make this bigger" — pinned on the hero button, desktop, 1440 by 900
  • "the button is too small" — pinned on the same hero button four minutes later, by their colleague
  • "pricing page looks weird" — pinned in the middle of /pricing with no element under the pin, tablet, 820 by 1180

05

After: what comes out

One Markdown prompt, grouped by page and by element. Trimmed here to the parts that matter.

  • Page / — component .hero .cta-primary — "#2, #3: increase the visual size of the hero call-to-action button. Reported twice. Desktop, 1440 by 900. Screenshot: (url)."
  • Page / — component header nav — "#1: the header does not sit correctly on mobile at 390 by 844. (unclear — ask the client). Screenshot: (url)."
  • Page /pricing — "#4: the pricing page layout does not look right on tablet, 820 by 1180. (unclear — ask the client). Screenshot: (url)."
  • A closing section asking for a priority-ordered checklist, plus two ready-to-paste replies: one asking what specifically looks off about the header, one asking which part of the pricing page.

06

What stays attached to every item

None of this is typed by your client, and none of it is inferred by the model. It is recorded at the moment the pin is placed.

ContextWhere it comes fromWhy the AI needs it
Page URLThe page the client was on when they pinnedTells the agent which route or file to open
Element anchorThe element under the pin, stored as a selectorTurns "this bit here" into a specific component
Position inside the elementWhere the pin sits, as a percentage of the elementSeparates "the icon in the card" from "the card"
Device type and viewportRecorded with the comment: desktop, tablet or mobile, plus the size in pixelsA layout complaint is meaningless without the width it happened at
ScreenshotTaken automatically of the pinned spotThe assistant can open the image url and see what the client saw
Comment numberThe number on the pin in the reviewMatches the AI's checklist back to the pin your client is looking at
Thread repliesAnything you or the client already said about itStops the agent relitigating a decision that was already made

07

The rules the rewrite runs under

The rewrite pass is deliberately narrow. These are the limits it works inside, in order of how much they matter when something goes wrong.

  • No invented requests. The rewrite makes an item clearer. It never adds a change the client did not ask for, and it never proposes a solution the client did not propose — "I don't like the blue" comes out as an objection, not as a new color.
  • Ambiguity is labeled, not resolved. An item that cannot be made actionable without a guess keeps the client's own words and carries the (unclear — ask the client) tag into the output.
  • Duplicates merge only when they are the same ask about the same element. Two complaints about one button become one item with both pins. Two different complaints about that button stay two items.
  • The model never looks at the screenshots. It keeps each image attached to the right item and leaves the judging to whoever opens it.
  • The original is never overwritten. The thread keeps exactly what your client typed, so any generated line can be checked against its source in two clicks.
  • Priority is a suggested order, not a decision. Reorder it before anyone starts work.
  • Nothing is sent to your client. The drafted replies sit in the output until you post them.

08

Why de-duplication is the part that saves the afternoon

On a real round, the same problem arrives four times in four voices. The client writes the logo is too small on the pricing page. Their colleague writes same here on the about page. A third reviewer pins the header and writes can we make this bigger, and the founder, three days later, asks about the logo again in a reply on someone else's comment. Read as four tasks, that is four tickets, three of which get closed as duplicates by somebody who had to open each one to find out.

Because every one of those pins is anchored to a header element on a specific page, they collapse into one item with four sources, and the sources stay listed underneath it. You fix the header once, reply once, and the four people who raised it all read the answer in the thread they left it in.

The reverse case matters just as much. Two comments on the same element that ask for opposite things are not duplicates and never get merged into a compromise nobody asked for. They stay as two items on one pin, side by side, for a human to settle.

09

Skip the prompt entirely and let an agent read the round

Copying a generated prompt into a chat window is one way to work. The other is to connect your AI client — Claude Code, Cursor, Claude Desktop, anything that speaks MCP — to the Writhink MCP server at mcp.writhink.com, and let it read the round directly rather than through a paste buffer.

What that buys you on a design round is short to describe: the agent pulls the open comments with each pin's context attached, makes the change, answers the reviewer in the thread they left it in, and moves the item to in review — so nobody is relaying a decision from one window into another, and no reviewer is waiting on a status they could have read themselves. The seven tools it has to do that with are documented one by one on /visual-feedback-for-ai-agents.

The limits are the same in this direction as any other. The agent reads what people wrote and the context attached to it. It does not see a judgment of the design, because none was ever produced. Setup is at /mcp.

10

When this is the wrong tool

If a client sends three bullet points by email and you already know exactly what each one means, generating a prompt is ceremony. Paste them into your assistant and get on with it. This earns its place when the feedback comes from someone who will never describe an element in words, and when there are twenty items instead of three.

It also decides nothing for you. The model rewrites and organizes; it never applies a change, never opens the screenshots to judge them, and never rules a request out. The priority in the output is a suggested order for the receiving assistant, not a plan you are locked into.

There is no separate no-model export to reach for either. Export always runs the rewrite pass, and the deterministic version — same grouping, same numbers, same pin metadata, same screenshot urls — appears only as the fallback when the model call fails. To see exactly what was captured before anything touched the wording, read the comments themselves in the review: every original is still sitting on its pin.

Before you count on it

One caveat on PDFs and image sets: that side is fully built, but it has had far less real use than website review. Treat it as a capability rather than a proven workflow.

Writhink is in open beta: everything described here is available and free, no credit card. Paid plans are announced but not purchasable yet. The one limit that applies today is five AI prompt generations a month per organization.

FAQ

Questions people actually ask

Does the AI change what my client asked for?
No. The rule it runs under is explicit: make each comment clear and actionable without altering its meaning and without inventing a request. When an item can only be made actionable by inventing the missing detail, the model keeps the client's own words and tags it as unclear. That is the exact failure it is built to avoid.
Which model runs it, and can I choose?
Claude Haiku, called from the Writhink server. You do not bring an API key and you do not pick the model. The output is plain Markdown, so the assistant you paste it into can be anything: ChatGPT, Claude, Cursor, Copilot or your own coding agent.
What if the AI step fails?
You still get a prompt. The grouping, numbering, duplicate merging, pin metadata and screenshot urls are all produced without a model. The AI pass only improves the wording on top of that, so when it is unavailable you export the deterministic version and nothing is lost except the rewrite.
Can the assistant actually see the screenshots?
Every item carries a screenshot url and the prompt tells the receiving assistant that the url is the reference image for that change. Whether it can fetch a url depends on the assistant. Writhink's own model deliberately does not analyze the images; it only keeps each one attached to the right item.
Does this work for PDFs and image sets too?
Yes. The same pipeline runs on PDF pages and image sets, grouped by page or by image instead of by element, and the item numbers still match the pins the client can see.
Does Writhink critique the design itself?
No, by design. It structures what people said about the design. Automated critique from a model that never saw the brief produces confident nonsense, and a client who reads it will quote it back at you in the next meeting.
Can I review a Figma file?
Not the file. There is no Figma integration of any kind. Export the frames as images or a PDF and upload them, or review the built page once it exists, which is where pinning to a real element pays off anyway.
What happens when two comments contradict each other?
They stay as two items on the same pin. Merging happens only for genuine duplicates, never for opposing requests, and a person decides. There is more on handling that on /design-review-tool.
How does the feedback get into Writhink in the first place?
Three ways. A review link your client opens with no account, a Chrome extension for pages behind a login or on a staging URL, and an embeddable script you drop on a live site so feedback can be left in place at any time. The extension is Chrome only.

Start

Send one link. Get feedback you can build from.

Your clients comment right on the page — no account, no screenshots, no voice notes. Writhink sorts the comments and writes the prompt for your AI.