Goal
Create the canvas collaboration and live presence family for multi-user spatial work.
Minimum serious v0 ownership
LiveCursor
PresenceStack
PresenceSyncIndicator
SelectionPresence
CommentPin
ThreadBubble
FollowMode
HandoffBeacon
Why
A living canvas should feel inhabited. Presence, sync health, anchored comments, attention routing, and follow behavior are core—not add-ons.
Explicit non-duplicates
This family must not duplicate or merely re-skin:
LiveFeed — event feed, not live spatial presence
AvatarGroup — static participant grouping, not live canvas presence
- existing chat/message components — discussion transport is different from object-anchored collaboration
Toast / Alert — existing transient feedback primitives should be reused instead of building a new alert system here
KeyboardShortcutsHelp and Command — existing keyboard-help/command surfaces should be reused, not replaced
EmptyState issue #38 — empty states are a shared primitive problem; this family should define collaboration-specific usage, not fork the component
Acceptance criteria
- define cursor, sync-health, attention, anchored comment, and follow interactions
- define how collaboration state renders without overwhelming the canvas
- define object-anchored discussion behavior
- define how live connection and sync health are surfaced calmly
- keep the family compatible with both async comments and live sessions
Goal
Create the canvas collaboration and live presence family for multi-user spatial work.
Minimum serious v0 ownership
LiveCursorPresenceStackPresenceSyncIndicatorSelectionPresenceCommentPinThreadBubbleFollowModeHandoffBeaconWhy
A living canvas should feel inhabited. Presence, sync health, anchored comments, attention routing, and follow behavior are core—not add-ons.
Explicit non-duplicates
This family must not duplicate or merely re-skin:
LiveFeed— event feed, not live spatial presenceAvatarGroup— static participant grouping, not live canvas presenceToast/Alert— existing transient feedback primitives should be reused instead of building a new alert system hereKeyboardShortcutsHelpandCommand— existing keyboard-help/command surfaces should be reused, not replacedEmptyStateissue#38— empty states are a shared primitive problem; this family should define collaboration-specific usage, not fork the componentAcceptance criteria