Real-time presence without the complexity
Real-time collaboration is often associated with CRDTs and complex merge algorithms. For most workspace apps, this is overkill.
What we actually need
For a workspace app, real-time means three things: presence (who is online and where), broadcast sync (when a teammate makes a change, see it without refreshing), and cursor tracking.
None of these require a CRDT. They require a pub/sub system and a conflict resolution strategy — which we handle in the sync engine, not the collab layer.
Room types
We have two kinds of rooms: relay rooms and presence rooms. Relay rooms broadcast mutations to everyone in the room. Presence rooms track cursor positions and active users. Both use WebSockets on a lightweight Node.js collab server.
Why not a CRDT?
CRDTs are the right tool for collaborative text editing. For structured data (tables, task fields), last-write-wins per field is simpler and correct for most use cases. The UX cost of showing merge conflicts is higher than the cost of occasionally overwriting someone else's work.