Triage every Figma comment from one design review board
Pull every open comment thread across your Figma projects into one board with frame previews, then reply, assign an owner, and file to Linear from the row.
Build me a design review board where my team works through Figma feedback in one place instead of hunting comment pins across a dozen files.
On first open, the app asks me to paste a Figma team ID from my team URL, since the Figma API cannot discover teams on its own, and then uses Get Team Projects to list the projects in that team. I pick which projects the board covers and that selection is saved in the app so the board reloads with the same scope every time. For each selected project, Get Project Files lists the files, and I can toggle individual files off if I do not want them on the board.
The main view is an inbox-style board of comment threads. For every file in scope, call Get Comments and follow the pagination.next_page URLs until they run out, then group the flat comment list into threads by parent_id so replies sit under their root comment. Each row shows the thread text with replies collapsed, the author name and avatar, the file and page it came from, and how long the thread has been sitting there computed from created_at and shown as something like six days old rather than a raw timestamp. Sort oldest first by default. If the comment data carries a resolved timestamp from Figma, show it as read-only context and keep that row out of the open filter.
Each row also shows a rendered preview of the frame the pin sits on. A Figma comment carries its position in client_meta, which is either a node id with an offset or raw canvas coordinates. When there is a node id, use Get File Nodes to find the enclosing frame and Render Images of File Nodes to render it as a PNG thumbnail. Node ids come back from the API with colons while URLs use hyphens, so convert between the two forms in the right direction for each call. Render URLs expire after about thirty days, so cache them with a timestamp and re-render when stale instead of storing them forever. When a comment has no node id, fall back to the file thumbnail and label the row as pinned to the canvas.
The Figma API has no operation for resolving a comment, so the board keeps its own triage state instead. For each Figma comment id, persist a status (open, accepted, wont fix, needs info), an owner picked from the team, a category (copy, visual design, product behavior, accessibility, technical risk), and a free-text note. Store this in the app's own persistence shared across everyone who opens the board rather than per viewer, so the whole team sees the same state and it survives reloads. Be honest in the interface copy: changing status here updates our board, it does not resolve the pin inside Figma. Record who changed a status and when, and show that on the row.
From a row I can do three things. Reply posts my text back into the real Figma thread with Post Comment, passing the root comment id as the parent so it lands as a reply and not a new pin, then refreshes the thread in place. Delete removes a stray comment with Delete Comment, but Figma only lets the original author delete, so enable that button only when the comment author matches the connected Figma account and hide it everywhere else. Promote to Linear opens a small form pre-filled with the thread text, the triage category as a label, and the frame preview, uses List Teams so I can choose the destination team, and files it with Create Issue. The issue description must include a deep link back to the exact frame, built from the file key and the pin node id in hyphen form with the comment id as the fragment. Store the returned issue identifier and URL against the comment id so the row shows a link to the issue afterwards and warns me before filing the same thread twice.
Every file section has a Triage this file's feedback button that kicks off a background agent. The agent reads every open thread on that file, clusters exact duplicates and near-duplicates so the same piece of feedback said three ways collapses into one group with the rest marked as duplicates, categorizes each thread using the same five categories, suggests an owner based on the category and who usually handles that kind of work, and drafts a suggested reply in the voice of a designer answering the commenter. It writes all of that back into the app as pending suggestions attached to the comment ids. The board shows a running state while the agent works and surfaces the suggestions when it lands.
Nothing the agent produces takes effect on its own. Suggestions appear on the row as a pending banner showing the proposed category, owner, duplicate grouping, and draft reply. I can accept a suggestion, which writes it into the triage state, edit the draft before it goes anywhere, or dismiss it. A suggested reply is only posted to Figma when I hit send on it, and a suggested issue is only filed when I confirm the Linear form. Include an accept all per file for the category and owner suggestions since those are low risk, but keep replies and issue filing one at a time.
Give the board filters for status, owner, category, file, author, and age, plus a search box over comment text, and counts across the top for open threads, threads with pending suggestions, and threads older than a week. Figma rate limits the render and file endpoints hardest, so batch node renders per file and load previews lazily as rows scroll into view. Handle the empty states properly: no projects selected yet, no comments in scope, and everything triaged.
What does this prompt do?
- Pulls every comment thread across the Figma projects you choose into one inbox-style board, showing the author, the file, and how long the thread has been waiting
- Renders a preview of the frame each comment pin sits on, so you can judge the feedback without opening the file
- Tracks your team's own triage state on each thread (open, accepted, wont fix, needs info) with an owner and a category, saved so everyone opening the board sees the same rows
- Lets you reply straight into the Figma thread, remove a stray comment you wrote, turn a thread into a Linear issue linked back to the frame, or hand a whole file to an assistant that groups duplicates and drafts replies for you to approve
What do I need to use this?
- A Figma account with access to the team and projects you want to review, including permission to read files and post comments
- Your Figma team ID, copied from the team's web address, because Figma does not let outside tools discover teams on their own
- Design files rather than FigJam boards or slide decks, since frame previews only render from design files
- A Linear workspace, only if you want to file issues from the board
How can I customize it?
- Choose which projects feed the board, and whether it shows every thread or only the ones nobody has replied to yet
- Rename the triage statuses and feedback categories to match the labels your design team already uses
- Pick which Linear team promoted threads land in, and the default priority and labels they get
FAQs
Does marking something done here resolve the comment inside Figma?
Can I delete any comment from the board?
Will my teammates see the same triage state I do?
Does the assistant post or file anything on its own?
Do I need Linear to use this?
Related templates
Open one board each morning, see which voice calls went badly, replay the exact moment the caller got frustrated, and file the fix.
See every customer waiting on a bug fix, file the ticket without creating a duplicate, and tell them the moment engineering ships it.
See every recent deploy across all your Heroku apps in one timeline, then roll back, restart, or file an incident without leaving the screen.
Pick a date range, see which support topics are climbing fastest, read the real customer threads behind them, and file the worst ones as tickets.
See every Hacker News story and comment that mentions your product or your competitors, mark each one new, needs reply or handled, and stop losing threads.
One grid of every table you track, when it last landed, and what broke, with stale tables pinned to the top and an agent that explains why.
Stop hunting comment pins across a dozen Figma files.
Put every open design thread on one board your whole team triages together, with a human check before anything gets posted or filed.