A full-stack project management application built with React, Node.js, Express, and MongoDB. This system provides comprehensive project and task management capabilities with user authentication, role-based access control, and real-time notifications.
- JWT-based authentication
- User registration and login
- Password reset via email
- Role-based access control (Admin/Member)
- User profile management
- Create, update, and delete projects
- Add/remove project members
- Project invitation system
- Project status tracking
- Kanban-style board with customizable columns
- Create, update, and delete cards/tasks
- Task assignment to team members
- Priority levels and due dates
- Comments and activity tracking
- Real-time notifications
- Email notifications for important events
- Project invitations
- Task assignments and updates
- Welcome emails for new users
- Password reset emails
- Project invitation emails
- Task assignment notifications
- React 18
- React Router
- Axios for API calls
- Lucide React for icons
- Tailwind CSS for styling
- Node.js
- Express.js
- MongoDB with Mongoose
- JWT for authentication
- Bcrypt for password hashing
- Nodemailer for email functionality
- Node.js (v14 or higher)
- MongoDB (local or cloud)
- npm or yarn
git clone <repository-url>
cd PMScd server
npm installCreate a .env file in the server directory:
NODE_ENV=development
PORT=5000
MONGODB_URI=mongodb://localhost:27017/pms
JWT_SECRET=your-super-secret-jwt-key
JWT_EXPIRE=7d
EMAIL_USER=example@gmail.com
EMAIL_PASS=your password
CLIENT_URL=http://localhost:3000cd client
npm installCreate a .env file in the client directory:
REACT_APP_API_URL=http://localhost:5000/apiRun the database seeder to create default admin user and sample data:
cd server
npm run seedThis will create:
- Admin user:
admin@pms.com/admin123 - Member user:
john@pms.com/member123 - Sample project with cards and notifications
cd server
npm run dev:envcd client
npm startThe application will be available at:
- Frontend: http://localhost:3000
- Backend API: http://localhost:5000
POST /api/auth/register- Register new userPOST /api/auth/login- User loginPOST /api/auth/forgot-password- Request password resetPOST /api/auth/reset-password- Reset passwordPOST /api/auth/refresh-token- Refresh JWT tokenPOST /api/auth/logout- User logout
GET /api/users- Get all users (Admin only)GET /api/users/:id- Get user by IDPOST /api/users- Create user (Admin only)PUT /api/users/:id- Update userDELETE /api/users/:id- Delete user (Admin only)POST /api/users/:id/reset-password- Reset user password (Admin only)
GET /api/projects- Get user's projectsGET /api/projects/:id- Get project detailsPOST /api/projects- Create new projectPUT /api/projects/:id- Update projectDELETE /api/projects/:id- Delete projectPOST /api/projects/:id/members- Add project memberDELETE /api/projects/:id/members/:memberId- Remove project member
GET /api/projects/:projectId/cards- Get project cardsGET /api/cards/:id- Get card detailsPOST /api/cards- Create new cardPUT /api/cards/:id- Update cardDELETE /api/cards/:id- Delete cardPUT /api/cards/:id/status- Update card statusPOST /api/cards/:id/assign- Assign user to cardDELETE /api/cards/:id/assign/:userId- Unassign user from cardPOST /api/cards/:id/comments- Add comment to cardDELETE /api/cards/:id/comments/:commentId- Delete comment
GET /api/notifications- Get user notificationsGET /api/notifications/unread-count- Get unread countPUT /api/notifications/:id/read- Mark notification as readPUT /api/notifications/mark-all-read- Mark all as readDELETE /api/notifications/:id- Delete notification
After running the seeder, you can login with:
Admin Account:
- Email:
admin@pms.com - Password:
admin123
Member Account:
- Email:
john@pms.com - Password:
member123
PMS/
├── client/ # React frontend
│ ├── public/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── contexts/ # React contexts
│ │ ├── utils/ # Utility functions
│ │ └── App.js
│ └── package.json
├── server/ # Node.js backend
│ ├── config/ # Configuration files
│ ├── controllers/ # Route controllers
│ ├── middleware/ # Custom middleware
│ ├── models/ # MongoDB models
│ ├── routes/ # API routes
│ ├── seeders/ # Database seeders
│ └── index.js
└── README.md
- User registers/logs in
- JWT token is generated and stored in localStorage
- Token is automatically attached to API requests
- Token refresh mechanism for seamless experience
- Users can create projects
- Project owners can invite members via email
- Members can view and work on assigned projects
- Admin users can manage all projects
- Kanban board with customizable columns
- Drag-and-drop functionality for task status updates
- Task assignment to team members
- Comments and activity tracking
- Due date management
- Real-time notifications for project updates
- Email notifications for important events
- Notification management (mark as read, delete)
# Backend tests
cd server
npm test
# Frontend tests
cd client
npm testThe project follows standard coding practices:
- ESLint for code linting
- Prettier for code formatting
- Consistent naming conventions
- Proper error handling
- Input validation
- Set up MongoDB Atlas or local MongoDB
- Configure environment variables
- Deploy to platforms like Heroku, Railway, or AWS
- Build the React app:
npm run build - Deploy to platforms like Vercel, Netlify, or AWS S3
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License.
For support or questions, please contact the development team or create an issue in the repository.