A full-stack project and task management SaaS built with React, Node.js/Express, MySQL, and Prisma ORM. Features role-based access control, a drag-and-drop Kanban board, real-time updates via Socket.io, dark mode, and activity logging.
| Layer | Technology |
|---|---|
| Frontend | React 18, Vite, React Router v6, Axios |
| Styling | Tailwind CSS v3, Inter font |
| Backend | Node.js, Express.js |
| Database | MySQL + Prisma ORM |
| Auth | JWT + bcryptjs |
| Realtime | Socket.io |
| Drag/Drop | @dnd-kit |
Team Task Manager/
├── backend/
│ ├── prisma/
│ │ └── schema.prisma
│ ├── src/
│ │ ├── controllers/
│ │ ├── middleware/
│ │ ├── routes/
│ │ ├── utils/
│ │ ├── validations/
│ │ └── app.js
│ ├── .env.example
│ └── package.json
└── frontend/
├── src/
│ ├── api/
│ ├── components/
│ ├── context/
│ ├── layouts/
│ ├── pages/
│ └── routes/
├── tailwind.config.js
└── package.json
- Node.js v18+
- MySQL v8+ (running locally or remote)
- npm v9+
cd "Team Task Manager"Open mysql or MySQL Workbench and run:
CREATE DATABASE team_task_manager;cd backend
# Install dependencies
npm install
# Copy and configure environment
copy .env.example .envEdit backend/.env:
PORT=5000
DATABASE_URL="mysql://YOUR_USER:YOUR_PASSWORD@localhost:5432/team_task_manager?schema=public"
JWT_SECRET=change_this_to_a_long_random_secret
JWT_EXPIRES_IN=7d
CLIENT_URL=http://localhost:5173# Generate Prisma client
npx prisma generate
# Run database migrations
npx prisma migrate dev --name init
# Start the backend server
npm run devThe API will be available at http://localhost:5000
cd ../frontend
# Install dependencies
npm install
# Start the dev server
npm run devThe app will be available at http://localhost:5173
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/auth/signup | No | Create account |
| POST | /api/auth/login | No | Login, get JWT |
| GET | /api/auth/me | Yes | Get current user |
| PUT | /api/auth/profile | Yes | Update name |
| Method | Endpoint | Role | Description |
|---|---|---|---|
| GET | /api/projects | Any | List projects |
| POST | /api/projects | Admin | Create project |
| GET | /api/projects/:id | Any | Get project |
| PUT | /api/projects/:id | Admin | Update project |
| DELETE | /api/projects/:id | Admin | Delete project |
| POST | /api/projects/:id/members | Admin | Add member |
| DELETE | /api/projects/:id/members/:uid | Admin | Remove member |
| Method | Endpoint | Role | Description |
|---|---|---|---|
| GET | /api/tasks | Any | List tasks |
| POST | /api/tasks | Admin | Create task |
| GET | /api/tasks/:id | Any | Get task |
| PUT | /api/tasks/:id | Admin | Update task |
| DELETE | /api/tasks/:id | Admin | Delete task |
| PATCH | /api/tasks/:id/status | Any* | Update status |
| POST | /api/tasks/:id/comments | Any | Add comment |
*Members can only update status of tasks assigned to them
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/dashboard | Yes | Get stats and activity |
| Variable | Description |
|---|---|
| PORT | Server port (default: 5000) |
| DATABASE_URL | MySQL connection string |
| JWT_SECRET | Secret key for JWT signing |
| JWT_EXPIRES_IN | Token expiry (e.g., 7d) |
| CLIENT_URL | Frontend URL for CORS |
- ✅ JWT authentication with bcrypt password hashing
- ✅ Role-based access control (Admin / Member)
- ✅ Full project CRUD with member management
- ✅ Full task CRUD with status, priority, due dates
- ✅ Dashboard with stats (total, completed, pending, overdue)
- ✅ Activity log feed
- ✅ Dark / Light mode with system preference detection
- ✅ Responsive sidebar layout (mobile overlay)
- ✅ Drag-and-drop Kanban board (@dnd-kit)
- ✅ Toast notifications
- ✅ Modal forms with Escape key support
- ✅ Search and filtering on tasks/projects
- ✅ Status and priority badges
- ✅ Loading spinners
- ✅ Task created/updated/deleted events
- ✅ Project created/updated/deleted events
- ✅ Comment added events
cd backend
npx prisma studioOpens at http://localhost:5555
# Frontend
cd frontend && npm run build
# Backend – set NODE_ENV=production in .env
cd backend && npm start