-
Notifications
You must be signed in to change notification settings - Fork 222
Open
Description
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
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels