Problem
Teams need a project board that updates in real time without everyone refreshing the page.
What I built
Split frontend and backend services. The API emits socket events on task, project, and membership changes. The React client subscribes and patches local state.
Architecture
React + Vite frontend talks to a Node backend. Socket.IO rooms scoped per project. JWT auth on REST and socket handshake.
API highlights
- REST for CRUD on projects, tasks, members
- Socket events: task:created, task:updated, project:memberAdded
- Role gates on both API middleware and UI
Challenges
- Keeping socket state in sync when users join mid-session
- Optimistic drag-and-drop with server reconciliation
ReactNode.jsSocket.IOTypeScriptRedux Toolkit