Live collaboration

When you and your teammates open the same project, you see what each other is doing in real-time. Animot uses a single-editor model — one person makes changes at a time, everyone else watches live, and anyone can ask to take over with one click.

Why single-editor?

Concurrent editing (Figma-style multi-cursor) requires a CRDT layer to merge conflicting changes. For presentation work — where edits tend to be sequential and one author usually drives — single-editor + live mirroring covers 95% of team use cases without the complexity. No merge conflicts, no "last save wins" surprises, no hidden state divergence.

What you see

As the editor

  • Full editing control — your toolbar, handles, and shortcuts work normally.
  • A small presence pill appears at the top-center of the canvas listing teammates currently watching, with a green dot for "live".
  • Your changes broadcast to viewers within ~500ms (debounced via Server-Sent Events).
  • If a teammate asks to take over, a modal pops up: "Bob wants to edit. Hand over?"

As a viewer

  • The canvas is read-only — toolbar buttons, drag handles, and keyboard shortcuts all no-op.
  • A purple banner at the top of the canvas shows who's editing plus presence avatars.
  • Incoming changes apply to your canvas as they're made — pan and zoom still work locally so you can examine details.
  • Click Take over to ask the current editor to hand over.

The take-over flow

StepWhat happens
1. You click Take overModal opens: "Asking {editor}…". Their UI shows a confirmation modal: "You wants to edit. Hand over?"
2a. They click Hand overLock transfers to you. Both UIs update within a second — you become the editor, they become a viewer.
2b. They click Keep editingYour modal flips to "Declined" with a Force Take-over button visible immediately.
2c. They don't respondAfter 15 seconds your modal reveals a Force take over button — useful when the editor's tab is open but idle.
3. Force take-overLock flips immediately, the displaced editor sees a toast "You took over editing" and demotes to viewer mode.

Edge cases

Tab close / network drop

The editor's lock has a 60-second TTL refreshed every 30 seconds via heartbeat. If their tab closes cleanly, a navigator.sendBeacon releases the lock immediately. If they lose network, the lease expires naturally — once stale, anyone else can acquire without confirmation.

Save protection

Even if a viewer's read-only mode is bypassed (custom client, dev tools), the server rejects saves from non-holders. Multiple layers of defense keep concurrent saves race-free, so two people can never overwrite each other.

Returning after a take-over

When someone takes over your editing, your unsaved local changes are NOT pushed to the new editor — only changes you'd already saved. The displaced editor sees a toast and their canvas reverts to the persisted state once the new editor sends their first tick. Save before stepping away if you want a clean handoff.

Plan availability

Live collaboration is a Team plan feature, since it only makes sense in a shared team workspace. Solo Pro users editing their own personal workspaces don't have anyone to collaborate with — the SSE channel is still wired (so future features can use it) but the take-over UI never surfaces.

Coming later: true real-time multi-cursor (Figma-style) via CRDTs is on the roadmap, but only when usage data shows team users hitting the wall with single-editor. For now, single-editor + ~500ms mirror is the simpler, more reliable model.