A full-stack web application for managing personal tasks with user authentication. Users can register, log in, create, update, delete, and view their tasks in a clean, responsive interface.
This project was developed as part of a Yunometa Company assignment to demonstrate full-stack development capabilities. The Task Manager application showcases proficiency in modern web technologies, database management, authentication systems, and responsive UI design.
- Full-Stack Development: Implement both frontend and backend components
- Authentication System: Secure user registration and login functionality
- Database Integration: MongoDB integration with Mongoose ODM
- RESTful API: Well-structured API endpoints for CRUD operations
- Modern UI: Responsive design using React and Bootstrap
- Security Best Practices: JWT authentication and password hashing
- Error Handling: Comprehensive error management throughout the application
- Frontend: React hooks, state management, routing, API integration
- Backend: Express.js, middleware, route handling, database operations
- Database: Schema design, relationships, indexing, validation
- Security: Authentication, authorization, data validation, CORS
- Development: Environment configuration, build tools, version control
π Check out the live demo here: Task Manager Live Demo
π Demo Credentials:
- Email: 1.user@example.com , 2.user1@example.com
- Password: user123 , 2.user123
β οΈ Note: The demo is hosted on a free platform and may take a few moments to load on first visit.
- π Secure Registration: User registration with email validation, username uniqueness, and password strength requirements
- π« JWT Authentication: Secure login with JSON Web Tokens for session management
- π€ Profile Management: View and update user profile including first name, last name, and avatar
- π Password Management: Change password functionality with secure hashing
- π Account Status: Active/inactive account management with last login tracking
- β‘ CRUD Operations: Create, read, update, and delete tasks
- π Task Status: Track task progress with statuses: pending, in-progress, completed
- π― Priority Levels: Assign priority levels: low, medium, high
- π Due Dates: Set and track due dates for tasks
- π Subtasks: Break down tasks into smaller subtasks with completion tracking
- π·οΈ Tags: Categorize tasks with custom tags for better organization
- π Search Functionality: Full-text search across task titles, descriptions, and tags
- π User-Specific Tasks: Each user has their own isolated task list
- π± Responsive Design: Mobile-friendly interface built with Bootstrap
- π§ Intuitive Navigation: Clean navbar with easy access to tasks and profile
- π Task Cards: Visual task representation with status indicators
- β Form Validation: Client-side and server-side validation for all inputs
- β³ Loading States: User feedback during API calls and page loads
- π RESTful Endpoints: Well-structured API with consistent response formats
- π‘οΈ Authentication Middleware: Protected routes with JWT verification
β οΈ Error Handling: Comprehensive error responses and logging- π CORS Support: Cross-origin resource sharing for frontend integration
- π Health Check: Server health monitoring endpoint
- Node.js - JavaScript runtime
- Express.js - Web framework
- MongoDB - NoSQL database
- Mongoose - MongoDB object modeling
- JWT - JSON Web Tokens for authentication
- bcryptjs - Password hashing
- CORS - Cross-origin resource sharing
- React 19.2.0 - UI library
- Vite - Build tool and development server
- Bootstrap 5 - CSS framework
- Axios - HTTP client for API calls
- React Router DOM - Client-side routing
Node.js (version 14 or higher)
MongoDB (local installation or cloud service like MongoDB Atlas)
npm or yarn package manager
git clone <repository-url>
cd task-managercd backend
npm installCreate a .env file in the backend directory with the following variables:
MONGO_URI=mongodb://localhost:27017/taskmanager
JWT_SECRET=your_jwt_secret_key_here
PORT=5000Start the backend server:
npm run devcd ../frontend
npm install
npm run dev- π Open your browser and navigate to
http://localhost:5173(frontend) - π€ Register a new account or login with existing credentials
- β
Once logged in, you can:
- π View your task list
- β Create new tasks
- βοΈ Edit existing tasks
- ποΈ Delete tasks
- π€ Update your profile
The backend API will be running on http://localhost:5000.
POST /register- π Register a new userPOST /login- π Login userGET /profile- π€ Get user profile (protected)PUT /profile- βοΈ Update user profile (protected)PUT /change-password- π Change user password (protected)
GET /- π Get all tasks for the authenticated user (protected)POST /- β Create a new task (protected)PUT /:id- βοΈ Update a task by ID (protected)DELETE /:id- ποΈ Delete a task by ID (protected)
π All task routes require authentication via JWT token in the Authorization header.
task-manager/
βββ π backend/
β βββ π config/
β β βββ π db.js
β βββ π controllers/
β β βββ π authController.js
β β βββ π taskController.js
β βββ π middleware/
β β βββ π authMiddleware.js
β βββ π models/
β β βββ π User.js
β β βββ π Task.js
β βββ π routes/
β β βββ π authRoutes.js
β β βββ π taskRoutes.js
β βββ π server.js
β βββ π package.json
β βββ π .env (create this file)
βββ π frontend/
β βββ π public/
β βββ π src/
β β βββ π components/
β β βββ π pages/
β β βββ π services/
β β βββ π App.jsx
β β βββ π main.jsx
β βββ π package.json
β βββ βοΈ vite.config.js
βββ π README.md
-
π΄ Fork the repository
-
πΏ Create a feature branch (
git checkout -b feature/AmazingFeature) -
πΎ Commit your changes (
git commit -m 'Add some AmazingFeature') -
π€ Push to the branch (
git push origin feature/AmazingFeature) -
π Open a Pull Request
ββββββββββββββββββββββββββββββββββ β CLIENT (UI) β β React + Vite + β β Axios + Bootstrap + Router β ββββββββββββββββββββββββββββββββββ β β HTTP Requests (Axios) βΌ ββββββββββββββββββββββββββββββββββ β FRONTEND LAYER β β - Login / Register Pages β β - Tasks Page (CRUD UI) β β - Profile Page β β - State Management (Hooks) β β - Form Validation β ββββββββββββββββββββββββββββββββββ β β API Calls (JSON) βΌ βββββββββββββββββββββββββββββββββββββββββββββββββββ β BACKEND API β β Node.js + Express.js β βββββββββββββββββββββββββββββββββββββββββββββββββββ€ β ROUTES (REST API) β β /api/auth β β βββ POST /register β β βββ POST /login β β βββ GET /profile (Protected) β β βββ PUT /profile (Protected) β β βββ PUT /change-password (Protected) β β β β /api/tasks β β βββ GET / (Protected) β β βββ POST / (Protected) β β βββ PUT /:id (Protected) β β βββ DELETE /:id (Protected) β βββββββββββββββββββββββββββββββββββββββββββββββββββ€ β MIDDLEWARE β β - authMiddleware (JWT Verification) β β - Error Handler β βββββββββββββββββββββββββββββββββββββββββββββββββββ€ β CONTROLLERS β β - authController.js β β - taskController.js β βββββββββββββββββββββββββββββββββββββββββββββββββββ β β Mongoose Queries βΌ ββββββββββββββββββββββββββββββββββ β DATABASE LAYER β β MongoDB + Mongoose β ββββββββββββββββββββββββββββββββββ€ β Collections: β β - users β β β’ firstname β β β’ lastname β β β’ email β β β’ password (hashed) β β β’ avatar β β β’ lastLogin β β β β - tasks β β β’ title β β β’ description β β β’ status β β β’ priority β β β’ tags β β β’ dueDate β β β’ subtasks β β β’ userId (FK) β β β ββββββββββββββββββββββββββββββββββ β² β β DB Connection (MONGO_URI) β ββββββββββββββββββββββββββββββββββ β ENVIRONMENT CONFIG β β (.env File Settings) β β - MONGO_URI β β - JWT_SECRET β β - PORT β ββββββββββββββββββββββββββββββββββ
This project is licensed under the ISC License.
React team for the amazing UI library
Bootstrap for the beautiful UI components
MongoDB for the powerful database solution
Made with β€οΈ by Shiva
β If you like this project, give it a star!