LIVE · AUDIT-CHAINED · EU-RESIDENT
SYSTEM · 99.99% UPTIME
v 1.0 ↗ MADE IN EU
Capture

In-session collaborative whiteboard

Operator and field user draw on the same canvas in real time — measurements, arrows, "where is the dent" annotations. Every snap captures both the rendered PNG and the Excalidraw scene JSON, hashed together. Tamper with either side after the fact and the audit chain catches it.

What gets captured

Rendered PNG

What everyone saw

The pixel-exact image rendered at snap time. Survives the case file viewer for years without needing Excalidraw to be loadable — drop the PNG into a court bundle and it speaks for itself.

Excalidraw scene JSON

The shapes that made it

Canonical-JSON dump of the scene elements: every stroke, every arrow, every label. Re-render the JSON later and you get a byte-identical PNG — the cryptographic proof that the rendered image wasn't doctored after capture.

Combined SHA-256 anchors PNG + canonical JSON together. Change one byte in either and the chain breaks.

Why both sides

A rendered PNG alone is convincing but theoretically forgeable — any image editor produces a pixel-correct fake. A scene JSON alone is unreadable to a court — strokes and coordinates in a viewer the judge doesn't have. Together: the JSON proves the image is the deterministic render of these shapes; the image proves what the participants actually saw on screen. Tamper with the image without touching the JSON and the re-render check fires; tamper with the JSON and the hash doesn't match.

Live collaboration model

Strokes propagate over the LiveKit data channel with conflict-free element IDs — both sides can draw at once without locking. The operator can lock a tile to themselves (one-way annotation, common in claims walkthroughs) or open it up (true co-edit, common in remote training).

ModeWho can draw
Operator-lockedOnly the operator. Field user watches the annotations land — common in inspection-by-the-book flows.
Open canvasBoth sides. Field user can circle "this is what I meant" without taking a turn.
Snap-and-keep"Snap the current state and open the collab annotator on it" — captures a still and reopens it for asynchronous annotation later.

Reading it back from the API

Whiteboards land as Evidence rows with kind=whiteboard. List them via GET /api/v1/public/sessions/{id}/whiteboards, request a signed download URL via GET /api/v1/public/evidence/{id}/download. Both the rendered PNG and a verify endpoint for the scene JSON are documented in the Whiteboards API reference.

Try the live canvas

The demo session ships with the operator + field side already paired. Open it in two browsers, draw on both — the strokes propagate; the snap captures both layers; the audit chain anchors both.