Skip to content

Rooms & artifacts

A Room is every report filed against one artifact — a single thing under review, like one AI-generated page, one preview deploy, or one branch build. When you point the widget at an artifact, all feedback for it collects in that artifact’s Room, separate from feedback on the next build.

This is what powers artifact-review mode: hand the widget an artifact, and each report it files is tagged with that artifact so the dashboard can group them.

A Room is not a database record. It is a grouping of reports that share the same artifact id. Each report carries its artifact inline in context.artifact, and the artifact’s id is mirrored to context.artifactId — the key the dashboard groups by. Create a new artifact id and a new Room appears; stop using one and its Room simply stops collecting.

The dashboard’s Room selector lists every artifact id seen in the project’s reports (labelled by the artifact’s title, falling back to its id), plus All artifacts to drop the filter. The Room header shows the artifact’s tool, goal, and constraints when you set them.

An artifact is described by a small metadata bag, all fields optional except id:

FieldTypeDescription
idstringRequired. Stable key for this artifact. Same id → same Room. Max 200 chars.
titlestringHuman label shown in the Room selector and header.
toolstringThe AI builder that produced it — e.g. lovable, bolt, cursor.
sourcestringFreeform origin marker (commit, prompt id, generation run).
goalstringWhat the artifact was meant to do — shown in the Room header.
constraintsstring[]Requirements it had to satisfy — shown in the Room header.
urlstringLink to the artifact (must be http/https).
metaRecord<string, string>Extra string key/values.

You set this at init through the artifact option, or via the data-artifact-id script-tag attribute. See the widget reference for the exact wiring and a per-branch example.

A Room answers which artifact a report is about. A channel answers what kind of feedback it is (bug, idea, question). They are independent: every report has exactly one channelKey and optionally one context.artifactId, and the dashboard filters on each separately. A single Room contains reports across all your channels; a single channel contains reports across all your Rooms.