The cool layer · concepts evaluated
Candidates for "what makes people show Dock to a friend", judged on value, fit with the loop, and cost. Verdicts are commitments, not vibes.
Proposed versions + review flow build highest value
Today a republish goes live instantly. Add a proposed state: anyone (especially an agent) can publish a candidate version; reviewers see proposed-vs-current as a diff, then approve (it becomes current) or request changes (a thread on the proposal). The pull-request model, applied to artifacts.
Why this wins: it completes the loop's missing half. Agents become safe contributors: they can propose all day, and a human gate decides what ships. No competitor in this space has review states on artifacts.
@agent in comments build
Mention a connected agent in a thread ("@claude tighten the executive summary"). The webhook (B2) fires with full thread context; the agent reads it over MCP, publishes a proposed version, and replies in-thread. Reviewer approves from the same screen.
Why this wins: it is the signature demo. Comment → agent revision → approve, without leaving the page. Rides entirely on B2 + proposed versions; the marginal cost is a mention parser and an agent registry per org.
dock dev · live watch mode build
dock dev ./report.md republishes on save, and every open viewer refreshes over the existing version.published SSE event. Reviewers literally watch an agent iterate, version by version.
Why this wins: demo magic at near-zero cost. The SSE channel and the republish path already exist; this is a file watcher and an iframe reload.
Pin comments · point anchors build
Text selection fails on charts, dashboards, and image-heavy pages. Add a second selector type to the anchor standard: a pin (element path + offset) dropped anywhere on the rendered page, shown as a numbered marker. Same threads, same re-anchoring honesty ("element changed" instead of silent drift).
Why this wins: AI output is increasingly visual. Figma-style pins on any HTML makes Dock the review surface for all of it, and the anchor client was built to carry a second selector type.
Live cursors · multiplayer presence build
Figma-style named cursors moving over the artifact while others view it, riding the presence we already have. A WebSocket lane in the same container (@hono/node-ws, no new service) carries throttled, ephemeral cursor positions; the dock-client grows a cursor capability (report the local pointer doc-relative, draw remote cursors inside the sandboxed iframe, where coordinates are honest). Selection-sharing rides the same channel later.
- Self-host: works out of the box. One container does in-process fan-out; no Redis, no config. Self-host is the easy case, not the cut one.
- Hosted scale: a Durable Object relay (the PartyKit pattern,
partyserver): one DO per artifact, WebSocket Hibernation so idle connections cost nothing, a short-lived token minted by the API so authz stays with can(). Cursors are ephemeral pure fan-out, exactly what DOs are for, and it keeps the Node container stateless.
- One
wss:// URL either way: the client never knows which transport is behind it. Container WS ships first; the DO relay is a hosted-tier swap, not a rewrite. (No "Workers-first" violation: the core stays in the container; this is an edge accessory for one high-frequency lane.)
Why this wins: instant "this place is alive" feeling at low cost. The iframe coordinate wrinkle is the actual work, and the anchor client was built to carry exactly this kind of capability.
Embeds + unfurl cards build
OpenGraph preview images generated per artifact (title, version, comment count, thumbnail) plus oEmbed, so links unfurl rich in Slack, Notion, and Linear.
Why this wins: distribution. Every shared link becomes an ad for the loop. Cheap, and it compounds.
GitHub Action build
dock-publish action: CI publishes the build (docs site, coverage report, generated artifact) to a stable Dock URL with the comment loop attached. A thin wrapper over the CLI + scoped tokens (A2).
Collections maybe · AI change summaries maybe
Collections (group artifacts into a shareable hub page): useful, not differentiating; build when teams ask. AI change summaries ("what changed in v7", thread digests for stakeholders): genuinely valuable, but it puts an LLM dependency near core. If built: bring-your-own-key, env-gated, never required.
Public gallery pass · deck mode pass
Gallery/explore: a social surface is an abuse surface; nothing public-by-default before C4 exists. Slide/deck mode: renderer scope creep; HTML artifacts already do this.