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.
Rooms are virtual, not stored
Section titled “Rooms are virtual, not stored”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.
The artifact
Section titled “The artifact”An artifact is described by a small metadata bag, all fields optional except id:
| Field | Type | Description |
|---|---|---|
id | string | Required. Stable key for this artifact. Same id → same Room. Max 200 chars. |
title | string | Human label shown in the Room selector and header. |
tool | string | The AI builder that produced it — e.g. lovable, bolt, cursor. |
source | string | Freeform origin marker (commit, prompt id, generation run). |
goal | string | What the artifact was meant to do — shown in the Room header. |
constraints | string[] | Requirements it had to satisfy — shown in the Room header. |
url | string | Link to the artifact (must be http/https). |
meta | Record<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.
Rooms and channels are different axes
Section titled “Rooms and channels are different axes”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.