
Board operations — card moves, column reorders, member presence — propagate via Socket.IO events scoped per workspace room. Drag-and-drop is optimistically applied locally on the originating client and reconciled against the server's authoritative state on broadcast; other clients update silently without re-fetch. Workspace access is enforced at socket handshake: JWT is verified and membership is checked against MongoDB before any room join is admitted. Zustand manages local board state with selector-based subscriptions to prevent unnecessary re-renders on unrelated updates.
Frontend: React 18, Vite, Tailwind CSS, Zustand, React Query, @dnd-kit
Backend: Node.js, Express, Socket.IO
Database: MongoDB, Mongoose
Auth: JWT, bcrypt