A step-by-step guide to building a collaborative task management platform with real-time updates.
# Core packages
npm init -y
npm i express mongoose dotenv cors socket.io jsonwebtoken bcryptjs
server/
├── config/
│ └── db.js # MongoDB connection
├── models/
│ ├── User.js # name, email, password, teams[]
│ ├── Team.js # name, description, owner, members[]
│ └── Task.js # title, description, status, assignee, teamId, dueDate
├── routes/
│ ├── auth.js # /register, /login
│ ├── teams.js # CRUD + member management
│ └── tasks.js # CRUD + status/assignment updates
├── middleware/
│ ├── auth.js # JWT verification
│ └── validation.js # Request validation
├── socket/
│ ├── socketManager.js # Main socket setup
│ ├── taskEvents.js # task_created, task_updated etc
│ ├── teamEvents.js # join_team, leave_team
│ └── userEvents.js # user_active, user_status
├── utils/
│ ├── jwt.js # Token generation/validation
│ └── errorHandler.js # Global error handling
└── server.js # Express + Socket.io setup
npx create-react-app client
cd client
npm i @reduxjs/toolkit react-redux axios socket.io-client react-beautiful-dnd tailwindcss
client/
├── src/
│ ├── components/
│ │ ├── Auth/
│ │ │ ├── Login.jsx
│ │ │ └── Register.jsx
│ │ ├── Dashboard/
│ │ │ ├── Header.jsx
│ │ │ └── Sidebar.jsx
│ │ ├── Tasks/
│ │ │ ├── TaskBoard.jsx # Main drag-drop board
│ │ │ ├── TaskCard.jsx # Individual task
│ │ │ ├── TaskForm.jsx # Create/edit form
│ │ │ └── TaskColumn.jsx # Status column
│ │ └── Teams/
│ │ ├── TeamList.jsx
│ │ ├── TeamForm.jsx
│ │ └── MemberList.jsx
│ ├── redux/
│ │ ├── store.js
│ │ └── slices/
│ │ ├── authSlice.js # Auth state
│ │ ├── teamSlice.js # Teams CRUD
│ │ ├── taskSlice.js # Tasks + DnD
│ │ └── socketSlice.js # Real-time state
│ ├── utils/
│ │ ├── api.js # Axios setup
│ │ ├── socket.js # Socket.io setup
│ │ └── constants.js # App constants
│ ├── hooks/
│ │ ├── useSocket.js # Socket hooks
│ │ └── useAuth.js # Auth hooks
│ ├── context/
│ │ └── SocketContext.jsx # Socket provider
│ ├── styles/
│ │ └── index.css # Tailwind imports
│ └── App.jsx # Routes setup