Welcome to the Task Management Application, a robust, full-stack solution built to help individuals and teams organize, track, and complete their tasks efficiently. Designed with a modern user interface and a powerful backend, this application provides a seamless experience for task tracking, reporting, and calendar management.
- 🔒 Secure Authentication: Robust user authentication system including Login, Register, Forgot Password, and Reset Password functionality, secured with JWT and bcrypt.
- ✅ Comprehensive Task Management: Create, view, update, and delete tasks. Categorize tasks by Priority (Low, Medium, High, Urgent) and track their Status (Pending, inProgress, Completed, Overdue) with automatic status lifecycle management.
- 📊 Interactive Dashboard: Visual insights into your productivity with charts and statistics (powered by Recharts).
- 📅 Calendar Integration: A full-featured calendar view to visualize task deadlines and schedules intuitively (powered by
react-big-calendar). - 📈 Advanced Reporting: Generate detailed reports of your tasks and activities with the ability to export them directly to PDF (using
jspdf). - 👤 User Profiles & Notifications: Manage your personal profile, including avatar uploads, and receive active updates via a notification system.
- 📱 Responsive & Modern UI: A sleek, beautifully designed interface utilizing Tailwind CSS, Framer Motion (tw-animate-css), and Radix UI components for an excellent user experience across all devices.
- React 19 with Vite for blazing fast development and builds.
- Tailwind CSS (v4) & Radix UI for accessible, customizable, and modern styling.
- React Router DOM v7 for seamless, client-side routing.
- Recharts for interactive data visualization.
- Axios for handling HTTP requests.
- React Big Calendar & React Day Picker for scheduling interfaces.
- jsPDF & jsPDF-AutoTable for dynamic PDF report generation.
- Sonner for beautiful, customizable toast notifications.
- Node.js & Express.js for a scalable, high-performance API.
- MongoDB & Mongoose for flexible NoSQL database management.
- JSON Web Tokens (JWT) for secure, stateless API authorization.
- Bcrypt.js for strong password hashing and security.
- Nodemailer for handling email communications (e.g., OTP and password resets).
- Cloudinary & Multer for efficient media and image uploads.
The project follows a standard client-server architecture, divided into two main directories:
📦 Todo
┣ 📂 assets # Screenshots and static assets for README
┣ 📂 backend # Express.js RESTful API & MongoDB Setup
┃ ┣ 📂 src
┃ ┃ ┣ 📂 config # Database and environment configurations
┃ ┃ ┣ 📂 controllers # Business logic for corresponding routes
┃ ┃ ┣ 📂 middleware # Custom middlewares (auth, file uploads, etc.)
┃ ┃ ┣ 📂 models # Mongoose Schemas (User, Task)
┃ ┃ ┣ 📂 routes # Express API routes (userRoute, taskRoute)
┃ ┃ ┣ 📂 utils # Helper functions
┃ ┃ ┗ 📜 server.js # Entry point for backend
┃ ┗ 📜 package.json
┣ 📂 frontend # React/Vite Frontend Application
┃ ┣ 📂 src
┃ ┃ ┣ 📂 components # Reusable React components (UI, auth wrappers)
┃ ┃ ┣ 📂 contexts # React Context for global state (AuthContext)
┃ ┃ ┣ 📂 hooks # Custom React hooks
┃ ┃ ┣ 📂 layout # Structural layout components (AppLayout)
┃ ┃ ┣ 📂 lib # Library configurations
┃ ┃ ┣ 📂 pages # Main application views (Dashboard, Tasks, Calendar, etc.)
┃ ┃ ┗ 📜 App.jsx # Root routing component
┃ ┣ 📜 vite.config.js
┃ ┗ 📜 package.json
┗ 📜 package.json # Root package manager
Follow these instructions to set up the project locally on your machine.
-
Clone the repository:
git clone https://github.com/quangthoIT/Todo.git cd Todo -
Install Dependencies: You can install dependencies for both frontend and backend using the root script:
npm run build
(Alternatively, navigate to the
frontendandbackenddirectories separately and runnpm installin each). -
Environment Variables:
- Navigate to the
backenddirectory and create a.envfile. - Add the necessary environment variables required for the backend services:
PORT=5001 MONGODB_URI=your_mongodb_connection_string JWT_SECRET=your_jwt_secret_key # Nodemailer config (Email & App Password) # Cloudinary config (Cloud Name, API Key, API Secret)
- Navigate to the
frontenddirectory and create a.envfile if necessary (e.g., config forVITE_API_URLpointing to localhost:5001 locally).
- Navigate to the
To run the application in your local development environment:
-
Start the Backend API Server:
cd backend npm run dev # The server typically runs on http://localhost:5001
-
Start the Frontend Client: Open a new terminal session.
cd frontend npm run dev # The Vite client typically runs on http://localhost:5173
(Note: Ensure your MongoDB server is up and running before starting the backend).

