Skip to content

Feature Request: Collaborative Rooms #313

@grubmanItay

Description

@grubmanItay

Problem: Getting team feedback on a plan requires a tedious export/import cycle per person — export link, teammate reviews locally, exports their link back, you import it, repeat for every reviewer.

Proposed solution: A "Create Room" button in the Share tab that creates a live, shared session. The creator gets a URL to send to teammates. Everyone who opens it sees the same plan and can annotate it simultaneously, with
annotations syncing across all participants via polling (~2.5s). Only the room creator can approve/deny. The room URL grants access (no auth required).

Architecture notes from prototyping:

  • Rooms can be hosted on the existing paste service — no WebSocket/tunneling needed. The paste service stores room metadata + an append-only annotation log keyed by room:{id}:meta and room:{id}:ann:{timestamp}
  • Requires adding a list(prefix) method to the PasteStore interface (FS store scans dataDir, KV store uses native list API)
  • 5 new API endpoints: create room, get room state, push annotations, poll annotations (with cursor), close room
  • E2E encrypted with AES-256-GCM — key lives in the URL fragment, never sent to server. Creator token is hashed server-side (SHA-256)
  • Client needs: useRoom hook (manages join/poll/push lifecycle), RoomBanner component (status bar with participants), name prompt on join
  • Polled annotations must go through applySharedAnnotations() to anchor to the DOM — same pipeline as shared URL import
  • Room URL should use window.location.origin as base (not the share portal) so it works both locally and in production
  • The annotate server needs pasteApiUrl passed through (currently missing from AnnotateServerOptions)
  • Use theme-aware colors (semantic tokens like bg-primary, bg-secondary, etc.) for participant avatars, not hard-coded Tailwind colors

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions