A modern, feature-rich task management application similar to Vikunja, built with the MERN stack (MongoDB, Express, React, Node.js). Designed for both teams and individual users to manage tasks, projects, and deadlines efficiently.
- ✅ Task Management: Create, edit, delete, and organize tasks
- ✅ Projects & Lists: Organize tasks into projects and lists
- ✅ Subtasks: Break down large tasks into manageable subtasks
- ✅ Priority Levels: Categorize tasks by priority (low, medium, high)
- ✅ Labels/Tags: Customizable labels for task categorization
- ✅ Due Dates & Reminders: Set deadlines and receive email reminders
- ✅ Recurring Tasks: Support for daily, weekly, monthly recurring tasks
- ✅ Collaboration: Assign tasks, share projects/lists, and comment on tasks
- ✅ Advanced Filtering: Filter tasks by priority, due date, labels, assigned user
- ✅ Search: Full-text search across tasks
- ✅ Dark/Light Mode: Theme customization
- ✅ User Authentication: JWT-based authentication with 2FA support
- ✅ Role-Based Access Control: Viewer, Editor, Admin roles
- ✅ Backup & Restore: Export and import user data
- ✅ Google Calendar Integration: Sync tasks with Google Calendar
- ✅ Responsive Design: Optimized for desktop and mobile
- Node.js - Runtime environment
- Express - Web framework
- MongoDB - Database
- Mongoose - ODM
- JWT - Authentication
- Bcrypt - Password hashing
- Speakeasy - Two-factor authentication
- Nodemailer - Email notifications
- Google APIs - Calendar integration
- Node-cron - Scheduled tasks
- React - UI library
- React Router - Routing
- React Query - Data fetching
- Axios - HTTP client
- Date-fns - Date utilities
- React Hot Toast - Notifications
- React Icons - Icon library
projex/
├── backend/
│ ├── models/ # MongoDB models
│ ├── routes/ # API routes
│ ├── middleware/ # Auth & RBAC middleware
│ ├── services/ # Business logic services
│ └── server.js # Express server
├── frontend/
│ ├── src/
│ │ ├── components/ # Reusable components
│ │ ├── pages/ # Page components
│ │ ├── context/ # React contexts
│ │ └── App.js # Main app component
│ └── public/ # Static files
└── README.md
- Node.js (v14 or higher)
- MongoDB (v4.4 or higher)
- npm or yarn
- Navigate to backend directory:
cd backend- Install dependencies:
npm install- Create
.envfile from.env.example:
cp .env.example .env- Configure environment variables in
.env:
PORT=5000
MONGODB_URI=mongodb://localhost:27017/projex
JWT_SECRET=your-super-secret-jwt-key
JWT_EXPIRE=7d
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=[email protected]
EMAIL_PASS=your-app-password
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_REDIRECT_URI=http://localhost:5000/api/auth/google/callback
FRONTEND_URL=http://localhost:3000- Start the server:
npm run dev- Navigate to frontend directory:
cd frontend- Install dependencies:
npm install- Start the development server:
npm startThe app will be available at http://localhost:3000
From the root directory:
npm run devThis will start both backend and frontend concurrently.
POST /api/auth/register- Register new userPOST /api/auth/login- Login userGET /api/auth/me- Get current userPOST /api/auth/enable-2fa- Enable 2FAPOST /api/auth/verify-2fa- Verify 2FA tokenPOST /api/auth/disable-2fa- Disable 2FA
GET /api/tasks- Get all tasks (with filters)GET /api/tasks/:id- Get single taskPOST /api/tasks- Create taskPUT /api/tasks/:id- Update taskDELETE /api/tasks/:id- Delete taskPATCH /api/tasks/:id/complete- Toggle completionPOST /api/tasks/:id/subtasks- Add subtask
GET /api/projects- Get all projectsGET /api/projects/:id- Get single projectPOST /api/projects- Create projectPUT /api/projects/:id- Update projectDELETE /api/projects/:id- Delete projectPOST /api/projects/:id/members- Add memberDELETE /api/projects/:id/members/:memberId- Remove member
GET /api/lists- Get all listsGET /api/lists/:id- Get single listPOST /api/lists- Create listPUT /api/lists/:id- Update listDELETE /api/lists/:id- Delete listPOST /api/lists/:id/members- Add member
GET /api/labels- Get all labelsPOST /api/labels- Create labelPUT /api/labels/:id- Update labelDELETE /api/labels/:id- Delete label
GET /api/comments/task/:taskId- Get task commentsPOST /api/comments- Create commentPUT /api/comments/:id- Update commentDELETE /api/comments/:id- Delete comment
GET /api/backup/export- Export user dataPOST /api/backup/import- Import user data
- Navigate to Tasks page
- Click "New Task"
- Fill in task details (title, description, list, priority, due date)
- Click "Create"
- Go to Settings
- Click "Enable Two-Factor Authentication"
- Scan QR code with authenticator app
- Enter verification code to confirm
- Go to Settings
- Click "Connect Google Calendar"
- Authorize the application
- Tasks with due dates will automatically sync to your calendar
- Go to Settings
- Click "Export Data"
- Download your backup JSON file
- JWT Authentication: Secure token-based authentication
- Password Hashing: Bcrypt with salt rounds
- Two-Factor Authentication: TOTP-based 2FA
- Role-Based Access Control: Granular permissions
- Input Validation: Express-validator for request validation
- CORS Protection: Configured CORS policies
This is an open-source project. Contributions are welcome!
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License - see LICENSE file for details
- Push notifications
- Mobile app (React Native)
- Advanced analytics and reporting
- Custom workflows
- Integration with more third-party services
- Plugin system for extensibility
- Advanced recurring task patterns
- Task templates
- Time tracking
For issues and questions, please open an issue on GitHub.
Inspired by Vikunja and other modern task management applications.
To resume this session: cursor-agent --resume=cdc62758-7cc5-487d-9a31-00343d18033e