Product pages

Prototypes

Every shipped Prototypes control: index create, editor chrome, Wayback, Figma, brand match, handoff, apply/fork, code export, chat, and sidebar.

Prototypes is a UI design workspace: chat with the UI agent against a captured product screen (or Figma import), edit in preview or code, then hand off to a coding agent. It is not the core analytics loop.

RouteRole
/projects/:id/prototypesIndex empty state → create
/projects/:id/prototypes/newCreate entry (often redirects into a new id)
/projects/:id/prototypes/:prototypeIdEditor

Editor query params

ParamRole
?c=Conversation id within this prototype
?day=Wayback calendar day
?snapshot=Specific capture snapshot
?route= / ?viewport=May appear when selecting screens (server restore)

Index empty state

ElementCopy / behavior
IllustrationPrototypes illustration
H2No prototypes yet
BodyStart a prototype to chat with the UI agent and edit a captured screen in real time.
New prototypePOST /api/projects/:id/prototypes with {}, dispatches hb:prototypes-changed, navigates to the new editor; button shows Creating… while in flight
ErrorFailed to create prototype: {message}

Creating from the sidebar often uses the same POST then navigates to the new id.

Editor layout

RegionContents
Left asideChat top bar + transcript + composer (resizable 500–600px, default 500; drag separator; double-click resets)
Separatoraria-label="Resize chat panel"Drag to resize · double-click to reset
Right mainCommand bar, address / Wayback bar, Preview iframe or Code panel

Local draft HTML is mirrored to localStorage per prototype + screen so refresh does not lose in-progress edits; Apply / Fork still write server-side.

Chat pane (left)

ControlBehavior
Open sidebarShown when the project sidebar is collapsed; shortcut ⌘B
Editable titleRenames the prototype (not only the chat)
New chatFresh thread inside the same prototype; keeps Wayback selection
View historySwitch conversations (?c=); multiple chats share one canvas
TranscriptStream status, branch/feedback/retry/edit when available
ComposerSubmit / cancel while streaming; Select element toggle when a screen is active; model picker (Change AI model)

Select element: when active, clicking in the preview targets a DOM node for the next edit instruction (targetSelector / targetLabel; clear target from the composer).

Command bar (right top)

ControlWhenBehavior
Preview / CodeHTML displayableSegmented toggle; Code uses CodePanel with floating export
Match my brandScreen activePopover: paste a brand URL → extract tokens → submits a restyle instruction to the designer
Send to coding agent (HandoffChip)HTML presentOpens handoff modal (Cursor / Devin agents)
Apply to screenEdits pending, non-selection variantPersists edit to the shared screen; shows Applying…
Fork screenEdits pendingForks a new screen from the edit; shows Forking…
More actionsDeleteAlwaysDeletes the prototype and leaves the editor

Apply/Fork are hidden for selection-backed variants that do not use that persist path.

Code export (Code view)

Floating cluster:

ControlBehavior
Copy HTMLClipboard; briefly Copied HTML
Download HTMLDownloads {prototype-name}.html

Address bar & Wayback

When a screen/variant is active:

ControlBehavior
Address / route pickerFull URL when siteOrigin known; pick routes from the day’s manifest or saved screens
Wayback day chip / calendarOpens Wayback picker; persists ?day= / ?snapshot= via history.replaceState
Variant switcherAlternate captures for the same route on that day

Uncaptured route on the selected day: overlay offers adjacent prior/next captures or explains nothing was recorded (Checking for nearby captures while loading).

Empty canvas (no screen)

ElementCopy
H2No screen selected
BodyStart from your captured product, a saved prototype, or import a frame from Figma.
Start from product UIOpens product setup / Wayback capture flow
Connect FigmaWhen Figma connector configured but disconnected
Select from FigmaWhen connected — opens import panel
Loading Figma…Status loading
HiddenIf Figma is unconfigured, Figma button is omitted

Figma connection status is cached in sessionStorage (hb:figma-connection-status).

Handoff modal (Send to coding agent)

Eligible agents are Cursor/Devin toolbox agents. Typical fields:

FieldRole
Agent pickerEligible project agents
ProviderCursor / Devin; may require Connect
Repository / refTarget repo (default ref often main)
InstructionsEditable; default asks to implement the prototype design and open a PR
HTML payloadCurrent HTML (size-capped server-side)

Connect flows reuse the shared connector modal when the toolbox is not linked.

ControlBehavior
Prototype rowsNavigate to editor
Empty dashed New PrototypeCreate
Row menuRename / Delete
Presentational iconsSome “options / see all” icons are tooltips only