Working with reports
The inbox, the five statuses, comments, and what the reporter sees.
The inbox
Each project has one inbox, newest first. It shows open items by default, and All includes resolved ones.
Each line carries enough to triage without opening anything: the page, the browser, how long ago, and how many JavaScript errors or failed requests came with it.
The report
A report lays out everything the reporter did not type, in the order you would ask for it: the screenshot with the element outlined, the selector and its text, the full environment, the JavaScript errors, every failed request with status and timing, and the console.
The widget takes the capture automatically when the form opens. On top of it a reporter can attach up to three images of their own, 2 MB each, within a ceiling on the whole report that the form keeps to as images are added. One that does not fit beside the reporter's other images is refused there and then, while they can still swap it for something smaller, rather than when they press Send. When only the automatic capture is in the way, the reporter's image wins. The report goes without the capture, and the form says so. The same happens at Send on a page that has logged so much that the capture and the logs will not travel together. The report goes with the logs, and the widget tells the reporter it went without the capture.
If a report cannot be sent because your app is down, or their connection dropped between the button and the request, what they typed is kept and offered back the next time they open the form. That holds even if they close the tab in between.
Statuses
The reporter sees the same five steps as a timeline on their status link, so "is anyone looking at this?" stops being an email.
Comments
There are two kinds, chosen with a checkbox:
- Visible to the reporter: Appears on their status link and is emailed to them
- Internal: Stays with your team
The reporter can reply from their link. Their replies come back into the same thread.
A round of feedback has a thread of its own as well as one per finding, for questions about the whole round, such as "which of these is worth doing first". The reporter's status link shows both threads in one feed, because they have one link and two feeds would be two places to check. A reply to the round reaches the team the same way.
Email goes out automatically, and never more than needed:
| When | Who gets it |
|---|---|
| A report is filed | The reporter, with their status link |
| A reporter-visible comment is added, on a report or a round | The reporter |
| Status becomes Resolved | The reporter |
A failed email never fails a report.
Trackers work the same way, except that a failed send is shown. If Send instantly could not reach Notion or Linear, the report says so and the inbox marks it not sent, with the reason: the token was refused, the destination is gone, or the tracker was unreachable. Nothing is lost either way; press Send once the cause is fixed and the warning clears.
Who can see what
Reports belong to the project, projects belong to a workspace, and every view re-checks that you are a member of it. Being sent a report's internal URL is not enough to open it.
The one public surface is the reporter's own /r/<token> link.