The Task Manager application is a modern, full-stack task management tool built with Next.js, TypeScript, Material-UI (MUI) on the frontend, and Node.js, Express, MongoDB on the backend.
It allows users to create, edit, delete, and manage tasks efficiently. The application supports authentication with role-based access (User/Admin) and profile management, including avatar uploads via Cloudinary.
The UI is designed to be clean and professional, inspired by modern web apps, with responsive design ensuring usability on both desktop and mobile devices.
- Login/Signup functionality.
- JWT-based authentication with token management.
- Role-based user management (User/Admin).
- Redirects unauthorized users to the login page.
- Create, edit, delete tasks.
- Update task status: Pending, In Progress, Completed.
- Display tasks in a sortable table with details including owner, creation date, and status.
- Edit tasks via modal dialogs.
- Edit profile information (name, email, avatar).
- Upload profile avatar images to Cloudinary.
- Modals with clean form validation.
- Material-UI components for a modern interface.
- Responsive layout with Grid system.
- Friendly notifications and error messages.
- User greeting with avatar and logout functionality.
- Frontend: Next.js, React, TypeScript, Material-UI (MUI)
- Backend: Node.js, Express
- Database: MongoDB (Atlas)
- Authentication: JWT stored in localStorage
- State Management: React hooks
- File Uploads: Cloudinary for avatar and file storage
- Clone the repository:
git clone <repo-url>
cd task-manager-app- Install dependencies:
npm install- Set environment variables:
Frontend → .env.local
NEXT_PUBLIC_API_URL=http://localhost:5090Backend → .env
MONGO_URI=<your-mongo-uri>
PORT=5090
JWT_SECRET=<your-secret-key>
JWT_EXPIRES_IN=7d
CLOUDINARY_CLOUD_NAME=<your-cloud-name>
CLOUDINARY_API_KEY=<your-api-key>
CLOUDINARY_API_SECRET=<your-api-secret>- Run the backend server:
npm start- Run the frontend development server:
npm run dev📍 Frontend → http://localhost:3000 📍 Backend → http://localhost:5090
├── pages
│ ├── index.tsx # Login page
│ ├── signup.tsx # Signup page
│ ├── task.tsx # Main tasks page
├── components
│ ├── EditTaskModal.tsx # Task edit modal
│ ├── EditProfileModal.tsx # Profile edit modal
├── types
│ └── types.ts # TypeScript interfaces and enums
├── utils
│ └── auth.ts # Token management utilities
├── routes
│ ├── auth.js # Auth routes (login, signup)
│ ├── task.js # Task CRUD routes
├── models
│ ├── User.js # User schema
│ ├── Task.js # Task schema
├── middleware
│ └── authMiddleware.js # JWT auth validation
├── server.js # Entry point
- Enter email and password.
- Click Login to authenticate.
- Redirects to the Tasks page upon success.
- Fill in name, email, password, and role.
- Click Sign Up.
- Automatically redirects to Login page.
- Create Task: Fill in title and description → click Create Task.
- Edit Task: Click task title → open modal → edit.
- Delete Task: Click Delete button.
- Change Status: Use dropdown to update task status.
- Edit Profile: Click Edit Profile to update name, email, or avatar.
- Logout: Click Logout to sign out.
- Modal dialog for editing task title and description.
- Auto-populates with current task data.
- Save updates via API.
- Modal dialog for editing user profile.
- Allows name, email, and avatar updates.
- Uses
FormDatato handle file uploads to Cloudinary.
- Displays tasks in a Material-UI Table.
- Provides CRUD operations and status management.
- Handles user authentication and redirects if unauthorized.
- Forms with validation.
- Handles API calls for authentication.
- Redirects to appropriate pages after success.
setToken,getToken,removeTokenfor JWT handling.
NEXT_PUBLIC_API_URL=http://localhost:5090MONGO_URI=<your-mongo-uri>
PORT=5090
JWT_SECRET=<your-secret-key>
JWT_EXPIRES_IN=7d
CLOUDINARY_CLOUD_NAME=<your-cloud-name>
CLOUDINARY_API_KEY=<your-api-key>
CLOUDINARY_API_SECRET=<your-api-secret>- next, react, react-dom
- @mui/material
- typescript
- express
- mongoose
- jsonwebtoken
- bcryptjs
- dotenv
- cloudinary
- multer
-
Fork the repo.
-
Create a new branch:
git checkout -b feature/xyz
-
Commit changes:
git commit -m 'Add xyz feature' -
Push to branch:
git push origin feature/xyz
-
Create a pull request.
This project is licensed under the MIT License.