Skip to content

Latest commit

Β 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“‹ Task Manager

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.

🏒 Yunometa Company Assignment

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.

🎯 Assignment Objectives

  • 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

πŸ“ˆ Technical Demonstrated Skills

  • 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

Task Manager React Node.js MongoDB

🌐 Live Demo

πŸš€ Check out the live demo here: Task Manager Live Demo

πŸ“ Demo Credentials:

⚠️ Note: The demo is hosted on a free platform and may take a few moments to load on first visit.

✨ Features

πŸ‘€ User Management

  • πŸ” 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

πŸ“ Task Management

  • ⚑ 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

🎨 User Interface

  • πŸ“± 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

πŸš€ API Features

  • πŸ”Œ 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

πŸ› οΈ Technology Stack

🎯 Backend

Node.js

  • Node.js - JavaScript runtime Express.js
  • Express.js - Web framework MongoDB
  • MongoDB - NoSQL database Mongoose
  • Mongoose - MongoDB object modeling JWT
  • JWT - JSON Web Tokens for authentication bcryptjs
  • bcryptjs - Password hashing CORS
  • CORS - Cross-origin resource sharing

🎨 Frontend

React

  • React 19.2.0 - UI library Vite
  • Vite - Build tool and development server Bootstrap
  • Bootstrap 5 - CSS framework Axios
  • Axios - HTTP client for API calls React Router
  • React Router DOM - Client-side routing

πŸ“‹ Prerequisites

  • Node.js Node.js (version 14 or higher)
  • MongoDB MongoDB (local installation or cloud service like MongoDB Atlas)
  • npm npm or yarn package manager

πŸš€ Installation

1️⃣ Clone the repository

git clone <repository-url>
cd task-manager

2️⃣ Backend Setup

cd backend
npm install

Create 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=5000

Start the backend server:

npm run dev

3️⃣ Frontend Setup

cd ../frontend
npm install
npm run dev

🎯 Usage

  1. 🌐 Open your browser and navigate to http://localhost:5173 (frontend)
  2. πŸ‘€ Register a new account or login with existing credentials
  3. βœ… 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.

πŸ“š API Endpoints

πŸ” Authentication Routes (/api/auth)

  • POST /register - πŸ“ Register a new user
  • POST /login - πŸ”‘ Login user
  • GET /profile - πŸ‘€ Get user profile (protected)
  • PUT /profile - ✏️ Update user profile (protected)
  • PUT /change-password - πŸ”‘ Change user password (protected)

πŸ“ Task Routes (/api/tasks)

  • 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.

πŸ“ Project Structure

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

🀝 Contributing

  1. 🍴 Fork the repository

  2. 🌿 Create a feature branch (git checkout -b feature/AmazingFeature)

  3. πŸ’Ύ Commit your changes (git commit -m 'Add some AmazingFeature')

  4. πŸ“€ Push to the branch (git push origin feature/AmazingFeature)

  5. πŸ”ƒ 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                        β”‚
                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    

πŸ“„ License

This project is licensed under the ISC License.


πŸ™ Acknowledgments

  • React React team for the amazing UI library
  • Bootstrap Bootstrap for the beautiful UI components
  • MongoDB MongoDB for the powerful database solution

Made with ❀️ by Shiva

⭐ If you like this project, give it a star!

About

Yunometa Company Assignment 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.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages