[go: up one dir, main page]

0% found this document useful (0 votes)
179 views38 pages

Project Report For Task Manager

The document is a summer internship report by Saranya Sri R, detailing the development of a task manager application using React, aimed at enhancing personal productivity and task management. The application features user authentication, task creation, and data persistence through local storage, ensuring privacy and security for individual users. The report outlines the project's objectives, technology stack, system analysis, and key features, highlighting its user-centric design and functionality.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
179 views38 pages

Project Report For Task Manager

The document is a summer internship report by Saranya Sri R, detailing the development of a task manager application using React, aimed at enhancing personal productivity and task management. The application features user authentication, task creation, and data persistence through local storage, ensuring privacy and security for individual users. The report outlines the project's objectives, technology stack, system analysis, and key features, highlighting its user-centric design and functionality.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 38

KGiSL Institute of Technology

(An Autonomous Institution)


Affiliated to Anna University, Approved by AICTE, Recognized by UGC,
Accredited byNAAC & NBA (B.E-CSE,B.E-ECE, B.Tech-IT),
365, KGiSL Campus, Thudiyalur Road, Saravanampatti, Coimbatore – 641035.

TASK MANAGER USING REACT


A SUMMER INTERNSHIP REPORT

Submitted by

SARANYA SRI R (711722243098)

in partial fulfilment for the award of the degree

of

BACHELOR OF TECHNOLOGY
IN
DEPARTMENT OF ARTIFICIAL INTELLIGENCE AND DATA
SCIENCE

KGiSL INSTITUTE OF TECHNOLOGY

AUTONOMOUS: COIMBATORE 641 035

NOV 2024
KGiSL Institute of Technology
(An Autonomous Institution)
Affiliated to Anna University, Approved by AICTE, Recognized by UGC,
Accredited byNAAC & NBA (B.E-CSE,B.E-ECE, B.Tech-IT),
365, KGiSL Campus, Thudiyalur Road, Saravanampatti, Coimbatore – 641035.

BONAFIDE CERTIFICATE

Certified that this Internship report on CraftConnect E-Commerce Platform at


WEB INNOVENTIX is the bonafide work of SARANYA SRI R who belongs to
III Year Artificial Intelligence & Data Science “B” during Fifth Semester of
Academic Year 2024-2025.

FACULTY INCHARGE HEAD OF THE DEPARTMENT

Certified that the candidates were examined by us for AD3512 Summer


Internship Viva held on at KGiSL Institute of Technology, Saravanampatti,
Coimbatore 641035.

INTERNAL EXAMINER EXTERNAL EXAMINER


ACKNOWLEDGEMENT

We express our deepest gratitude to our Chairman and Managing


Director Dr. Ashok Bakthavachalam for providing us with an environment to
complete our Internship project successfully.

We are grateful to our CEO of Academic Initiatives Mr. AravindKumar


Rajendran and our beloved Secretary Dr. Rajkumar N. Our sincere thanks to
honourable Principal Dr. Suresh Kumar S for his support, guidance, and
blessings.

We would like to thank Dr. Selva Sheela K, Head of the Department,


and Internship Coordinator Ms. Ramani P, Department of Artificial
Intelligence and Data Science for her firm support during the entire course of this
Internship and who modelled us both technically and morally for achieving
greater success in this project work.

We also thank all the faculty members of our department for their help in
making this Internship project a successful one. Finally, we take this opportunity
to extend our deep appreciation to our Family and Friends, for all they meant to
us during the crucial times of the completion of our project
ABSTRACT

During my internship at Pinesphere, I developed a task manager application

designed to enhance personal productivity and streamline task management for

users. The project aimed to provide a digital solution for users to manage tasks

effectively while maintaining individual data privacy across multiple accounts.

Each user could log in, manage their tasks, and ensure their data remains separate

from others.

The application was built with a focus on user-centric design, enabling seamless

task management. The backend was developed using Python with SQLite for

managing user data and task entries, while the frontend was crafted with HTML,

CSS, and JavaScript for a dynamic and responsive interface. The task manager

allowed users to create, view, and update tasks, each tied to their individual login

credentials. The application also included a login feature to ensure that task

histories were preserved across sessions.

By incorporating secure login functionality, real-time task updates, and user-

specific task histories, this project demonstrated the potential of a simple yet

effective task management system. It highlighted how digital tools can increase

efficiency by providing users with a secure, organized way to track their

responsibilities.
INTRODUCTION

1. Empowering Personal Productivity: The Task Manager application is

designed to address the growing need for digital task management in

personal and professional spaces. It provides an intuitive, secure platform

for users to manage their daily tasks and track progress across multiple

sessions.

2. Bridging the Gap Between Users and Their Tasks: This task manager

ensures that each user has their own space to track tasks, set deadlines, and

stay organized. By providing users with a personalized experience, the

platform fosters productivity while maintaining individual privacy.

3. Fostering Seamless Task Management: The application aims to provide

an accessible and user-friendly task management system, allowing users to

enter tasks, mark them as completed, and view pending tasks all in one

place. This empowers users to stay on top of their responsibilities without

distraction.

4. Secure User Accounts and Data Privacy: The platform ensures that each

user's task history is stored securely and remains accessible only to them.

By implementing user authentication and session management, the

application prevents unauthorized access and ensures data security.

5. Scalable Platform for Users: While tailored to individual users, the


system is designed to scale effectively, allowing the addition of new users

without impacting the platform’s performance.

TECHNOLOGY

Frontend and Backend Development:

1. React (JavaScript):

React was utilized for both frontend and backend development. React’s

component-based architecture was used to create dynamic user interfaces,

handling all aspects of user interaction, including login, task creation, and

task viewing. React interacts with the browser’s local storage to maintain

state and persist data.

2. Local Storage:

The application uses the browser's local storage to save user login

information and task data. This allows data to persist even after the page

is refreshed or when users log in again, without requiring an external

database or server-side persistence.

Deployment and Hosting:

1. Google Chrome:

The application was deployed directly on Google Chrome, where it is


accessed and run locally in the browser. Chrome provides an efficient

platform for hosting the React application with fast performance and

reliable support for modern web technologies.

SYSTEM ANALYSIS

Existing System:

In the current landscape of personal task management, many tools are available,

ranging from simple to feature-rich platforms. However, most existing task

managers suffer from a few common challenges:

1. Limited Personalization: Many task management applications do not

allow for personalization at the individual user level. They provide

generic features without catering to specific user needs, such as user

history or task persistence.

2. Lack of User-Specific Task History: Most task management systems do

not retain user-specific data across sessions or logins, causing users to

lose track of their previous tasks every time they return. This results in a

disjointed experience and a lack of continuity for users.

3. Complex Interface: Several task managers are not intuitive, leading to a

steep learning curve for new users. Additionally, the user interfaces often

overwhelm users with too many features that are not essential for task
management.

4. No Authentication System: Many existing systems do not have secure

login mechanisms or fail to provide an authentication system, making it

challenging to track individual users and their unique data.

Proposed Solution:

The proposed task manager system addresses these challenges by offering a

personalized, secure, and intuitive solution to task management:

1. User Authentication & Task Persistence:

o The system will allow users to register, log in, and manage their

tasks securely. Upon logging in, users will be presented with their

specific task list, which is stored locally within the browser's

storage.

o User login credentials and tasks are saved persistently in the

browser, ensuring that each user retains access to their individual

tasks upon re-login or after a page refresh.

2. Personalized Task Management:

o Users will be able to add, update, delete, and mark tasks as

completed, with these changes being specific to their individual

account.

o The task manager will maintain a history of tasks for each user,

allowing them to view past tasks and track their progress over time.
3. Simple and Intuitive Interface:

o The user interface will be designed to be clean, simple, and easy to

navigate. The goal is to provide a seamless task management

experience where users can quickly add tasks and keep track of

their progress without unnecessary distractions.

4. Real-Time Updates:

o Changes made by the user to their task list (such as adding, editing,

or deleting tasks) will be reflected immediately in the user

interface, offering a smooth and responsive experience.

5. Security and Authentication:

o Users will be able to log in securely, ensuring that their tasks are

stored separately and not shared across users. The login system

ensures that no two users can access each other's task lists,

maintaining data privacy.

Benefits of the Proposed System:

1. Improved User Experience:

o By offering personalized task management and an intuitive

interface, the application ensures that users can efficiently manage

their tasks without feeling overwhelmed.

2. Data Persistence:

o Unlike many other task management tools, the system retains tasks
for each user, ensuring that all data is preserved across sessions

without requiring a server or cloud-based infrastructure.

3. Enhanced Security:

o The user authentication system ensures that task data is only

accessible by the authenticated user, providing privacy and

protection for each user's data.

4. Simplicity and Efficiency:

o The system focuses on simplicity, reducing complexity and

ensuring that the user can focus on the tasks at hand without

getting distracted by unnecessary features.

Proposed System Architecture:

• Frontend (React): React will be used for creating a dynamic user

interface, allowing for a smooth and interactive experience.

• Local Storage: The system will leverage the browser's local storage to

maintain user authentication details and their task history, ensuring data

persistence even across page refreshes.

• Authentication: The application will include basic login functionality,

ensuring that each user has a private, secure task manager.


SYSTEM SPECIFICATIONS

SOFTWARE REQUIREMENTS:

1. Operating System:

o Windows 10/11, macOS, or Linux (Ubuntu recommended for

deployment).

2. Browser:

o Google Chrome (for running and testing the application).

3. Frontend Technologies:

o React: JavaScript library for building the user interface. It enables

dynamic updates and component-based architecture.

o HTML5: Used for structuring the web pages.

o CSS3: For styling the application and ensuring responsiveness.

o JavaScript: Provides interactivity and is used in conjunction with

React to manage state, events, and dynamic rendering.

4. Text Editor/IDE:

o Visual Studio Code (VS Code) or Sublime Text: For writing and

editing the code.

o Node.js: To run JavaScript outside the browser and manage

dependencies via npm (Node Package Manager).

o npm (Node Package Manager): Used for managing and installing

libraries and packages for React.


5. Web Browser for Deployment:

o Google Chrome: Used for deploying and testing the web

application. You can also use other browsers like Firefox or Edge

for cross-browser testing.

6. Database:

o Local Storage: Instead of a traditional database, the application uses

the browser's local storage to store user login details and task history

persistently.

7. Libraries & Tools:

o React Router: For navigation between pages (e.g., Login Page,

Task Manager).

o Material-UI or Bootstrap (optional): For pre-built UI components

and styling (if used).

o React Context API or Redux (optional): To manage global state,

such as user login status or task management.

HARDWARE REQUIREMENTS:

1. Processor:

o Intel Core i3/i5/i7 or equivalent (recommended for smooth

development and running the application).

o Quad-Core Processor or higher for running React applications


smoothly.

2. RAM:

o Minimum of 4 GB (recommended 8 GB or more for better

performance during development and testing).

3. Storage:

o Minimum of 10 GB of free disk space for storing project files and

managing dependencies.

o If using version control and a repository, ensure adequate storage for

project management (GitHub repository).

4. Graphics:

o Integrated or discrete graphics (Graphics Processing Unit) with

support for rendering the user interface smoothly.

5. Display:

o 1366x768 resolution or higher display for comfortable coding and

UI development.

o Full HD (1920x1080) display is recommended for better clarity and

multi-tasking.

6. Internet Connectivity:

o Required for downloading dependencies, using npm, accessing the

GitHub repository, and deploying the application.

o High-speed internet for efficient development and collaboration.


7. Peripherals:

o Mouse and Keyboard: Essential for coding and UI development.

PROJECT DESCRIPTION

Project Overview:

The Task Manager is a web-based application developed as part of an internship

at Pinesphere. The application was designed to help users manage their tasks

effectively by allowing them to create, view, and update tasks in a user-friendly

interface. The project focuses on providing a simple yet powerful solution for

individual users to track their work and stay organized. With features like user

authentication, task creation, and persistence across sessions, the application

ensures that each user’s data remains private and secure.

The Task Manager is a React-based application that allows users to manage their

tasks independently. Users can log in, add tasks, mark tasks as completed, and

view their task history. Data is stored in the browser's local storage, ensuring that

task details persist even if the application is closed or reopened. The project

emphasizes user-centered design, focusing on providing a clean, intuitive

interface that prioritizes ease of use.


Key Features:
1. User Authentication:
o Users can sign up and log in to the application securely.
Authentication details (username and password) are validated,
ensuring that only registered users can access their personal task list.
2. Task Management:
o Users can create tasks, set task descriptions, and mark them as
completed. Each task can be viewed and managed from the task list,
allowing users to stay on top of their responsibilities.
3. Persistent Data Storage:
o Task details, including the task name, description, and completion
status, are stored in the browser’s local storage. This ensures that the
data is retained even if the user logs out or closes the browser.
4. Separate Task Manager for Each User:
o The application maintains a separate task list for each user, ensuring
that each person’s tasks are private and not accessible by others.
Each user’s tasks are unique to their login credentials.
CODE

App.js (main code)

import React, { useState, useEffect } from 'react';


import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-
dom';
import TaskInput from './components/TaskInput';
import FilterButtons from './components/FilterButtons';
import TaskList from './components/TaskList';
import LoginPage from './components/LoginPage';
import './App.css';

function App() {
const [tasks, setTasks] = useState([]);
const [filter, setFilter] = useState("All");
const [isLoggedIn, setIsLoggedIn] = useState(false);
const [username, setUsername] = useState("");

// Load tasks when username changes (user logs in)


useEffect(() => {
if (username) {
const savedTasks = JSON.parse(localStorage.getItem(username + "_tasks"));
if (savedTasks) setTasks(savedTasks);
}
}, [username]);

// Save tasks to localStorage when tasks or username change


useEffect(() => {
if (username && tasks.length) {
localStorage.setItem(username + "_tasks", JSON.stringify(tasks));
}
}, [tasks, username]);

const addTask = (text) => {


const newTask = { id: Date.now(), text, completed: false };
setTasks([...tasks, newTask]);
};

const toggleTask = (id) => {


setTasks(
tasks.map((task) =>
task.id === id ? { ...task, completed: !task.completed } : task
)
);
};

const deleteTask = (id) => {


setTasks(tasks.filter((task) => task.id !== id));
};

const filteredTasks = tasks.filter((task) => {


if (filter === "Completed") return task.completed;
if (filter === "Incomplete") return !task.completed;
return true;
});
return (
<Router>
<Routes>
<Route path="/" element={isLoggedIn ? <Navigate to="/task-manager" /> :
<LoginPage setIsLoggedIn={setIsLoggedIn} setUsername={setUsername} />}
/>
<Route path="/task-manager" element={isLoggedIn ? (
<div className="container">
<h1>Task Manager</h1>
<TaskInput addTask={addTask} />
<FilterButtons setFilter={setFilter} />
<TaskList tasks={filteredTasks} toggleTask={toggleTask}
deleteTask={deleteTask} />
</div>
):(
<Navigate to="/" />
)} />
</Routes>
</Router>
);
}

export default App;

App.css (main css styling)

body {
margin: 0;
padding: 0;
font-family: "Poppins", sans-serif;
background: linear-gradient(135deg, #6e8efb, #a777e3);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
color: #333;
}

.container {
background: #fff;
width: 400px;
padding: 30px;
border-radius: 15px;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
text-align: center;
animation: fadeIn 0.5s ease-in-out;
}

@keyframes fadeIn {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
h1 {
font-size: 28px;
color: #6e8efb;
margin-bottom: 20px;
font-weight: bold;
}

/* Additional CSS: Task Input, Buttons, and List */


.task-input-container {
display: flex;
gap: 10px;
margin-bottom: 20px;
}

.task-input {
flex: 1;
padding: 10px;
border: 1px solid #ddd;
border-radius: 30px;
outline: none;
font-size: 16px;
background: #f9f9f9;
transition: 0.3s;
}

.task-input:focus {
border-color: #6e8efb;
background: #fff;
box-shadow: 0 0 8px rgba(110, 142, 251, 0.6);
}

.add-button {
padding: 10px 20px;
border: none;
background: linear-gradient(90deg, #6e8efb, #a777e3);
color: white;
font-size: 16px;
font-weight: bold;
border-radius: 30px;
cursor: pointer;
transition: all 0.3s ease-in-out;
}

.add-button:hover {
background: linear-gradient(90deg, #a777e3, #6e8efb);
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.2);
transform: scale(1.05);
}

/* Task List */
.task-list {
list-style: none;
padding: 0;
margin: 0;
}

.task-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 15px;
background: #f9f9f9;
border: 1px solid #ddd;
border-radius: 10px;
margin-bottom: 10px;
}

.task-buttons button {
border: none;
padding: 8px 12px;
border-radius: 30px;
cursor: pointer;
}
/* Filter Buttons Container */
.filter-buttons {
display: flex;
justify-content: center;
gap: 10px;
margin: 20px 0;
}

/* Filter Button */
.filter-button {
padding: 8px 15px;
background: linear-gradient(90deg, #ff7f50, #ff6347); /* New color scheme
(coral shades) */
color: white;
font-size: 14px; /* Smaller font size */
font-weight: bold;
border: none;
border-radius: 25px; /* Slightly smaller border radius */
cursor: pointer;
transition: all 0.3s ease-in-out;
}

/* Hover effect for filter buttons */


.filter-button:hover {
background: linear-gradient(90deg, #ff6347, #ff7f50); /* Reverse gradient on
hover */
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2);
transform: scale(1.05);
}

Login and signup page


LoginPage.js

import React, { useState } from 'react';


import './LoginPage.css'; // Add custom styling for the LoginPage

const LoginPage = ({ setIsLoggedIn, setUsername }) => {


const [isLogin, setIsLogin] = useState(true); // Toggle between login and signup
const [username, setUsernameInput] = useState('');
const [password, setPassword] = useState('');
const [error, setError] = useState('');
// Retrieve user data from localStorage
const getUserDatabase = () => {
const data = localStorage.getItem('userDatabase');
return data ? JSON.parse(data) : [];
};

// Save user data to localStorage


const saveUserDatabase = (database) => {
localStorage.setItem('userDatabase', JSON.stringify(database));
};

const handleLogin = (e) => {


e.preventDefault();

const trimmedUsername = username.trim(); // Trim spaces from the username


const trimmedPassword = password.trim(); // Trim spaces from the password

const userDatabase = getUserDatabase();

// Find the user from the database (case-insensitive)


const user = userDatabase.find(
(user) => user.username.toLowerCase() ===
trimmedUsername.toLowerCase()
);

// Check if user exists and passwords match


if (user && user.password === trimmedPassword) {
setUsername(trimmedUsername); // Set the username in App.js
setIsLoggedIn(true);
setError('');
} else {
setError('Invalid username or password. Please sign up.');
}
};

const handleSignup = (e) => {


e.preventDefault();

const trimmedUsername = username.trim(); // Trim spaces from the username


const trimmedPassword = password.trim(); // Trim spaces from the password

const userDatabase = getUserDatabase();

// Check if the user already exists in the database


const existingUser = userDatabase.find(
(user) => user.username.toLowerCase() ===
trimmedUsername.toLowerCase()
);

// If user exists, show an error message


if (existingUser) {
setError('Username already taken. Please choose a different one.');
} else if (trimmedUsername && trimmedPassword) {
// Add the new user to the database
userDatabase.push({ username: trimmedUsername, password:
trimmedPassword });

// Save the updated user database to localStorage


saveUserDatabase(userDatabase);

setUsername(trimmedUsername); // Set the username in App.js


setIsLoggedIn(true);
setError('');
} else {
setError('Both fields are required!');
}
};

return (
<div className="login-container">
<h1>{isLogin ? 'Login' : 'Sign Up'}</h1>
<form onSubmit={isLogin ? handleLogin : handleSignup}
className="login-form">
<input
type="text"
placeholder="Username"
value={username}
onChange={(e) => setUsernameInput(e.target.value)}
className="input-field"
/>
<input
type="password"
placeholder="Password"
value={password}
onChange={(e) => setPassword(e.target.value)}
className="input-field"
/>
<button type="submit" className="submit-button">
{isLogin ? 'Login' : 'Sign Up'}
</button>
</form>

{error && <p className="error-message">{error}</p>} {/* Display error


message */}

<button onClick={() => setIsLogin(!isLogin)} className="toggle-button">


{isLogin ? 'Need an account? Sign Up' : 'Already have an account? Login'}
</button>
</div>
);
};

export default LoginPage;

LoginPage.css

.login-container {
background-color: #fff;
width: 400px;
padding: 30px;
border-radius: 15px;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
text-align: center;
animation: fadeIn 0.5s ease-in-out;
}
.login-container h1 {
color: #6e8efb;
margin-bottom: 20px;
font-size: 28px;
}

.input-field {
width: 100%;
padding: 10px;
margin-bottom: 20px;
border: 1px solid #ddd;
border-radius: 30px;
outline: none;
font-size: 16px;
background: #f9f9f9;
}

.input-field:focus {
border-color: #6e8efb;
background: #fff;
box-shadow: 0 0 8px rgba(110, 142, 251, 0.6);
}

.submit-button {
padding: 10px 20px;
background: linear-gradient(90deg, #6e8efb, #a777e3);
color: white;
border-radius: 30px;
font-size: 16px;
border: none;
cursor: pointer;
}

.submit-button:hover {
background: linear-gradient(90deg, #a777e3, #6e8efb);
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.2);
transform: scale(1.05);
}

.toggle-button {
background: none;
border: none;
color: #6e8efb;
font-size: 14px;
cursor: pointer;
}

FiltterButtons.js

import React from "react";

const FilterButtons = ({ setFilter }) => {


return (
<div className="filter-buttons">
<button onClick={() => setFilter("All")} className="filter-button">
All
</button>
<button onClick={() => setFilter("Completed")} className="filter-button">
Completed
</button>
<button onClick={() => setFilter("Incomplete")} className="filter-button">
Incomplete
</button>
</div>
);
};

export default FilterButtons;

TaskInput.js

import React, { useState } from "react";

const TaskInput = ({ addTask }) => {


const [task, setTask] = useState("");

const handleSubmit = (e) => {


e.preventDefault();
if (task.trim() === "") return;
addTask(task);
setTask("");
};

return (
<div className="task-input-container">
<input
type="text"
placeholder="Enter a task"
value={task}
onChange={(e) => setTask(e.target.value)}
className="task-input"
/>
<button onClick={handleSubmit} className="add-button">
Add Task
</button>
</div>
);
};

export default TaskInput;

TaskList.js

import React from "react";

const TaskList = ({ tasks, toggleTask, deleteTask }) => {


return (
<ul className="task-list">
{tasks.map((task) => (
<li key={task.id} className="task-item">
<span
className={`task-text ${task.completed ? "completed" : ""}`}
onClick={() => toggleTask(task.id)}
>
{task.text}
</span>
<div className="task-buttons">
<button
className="complete-button"
onClick={() => toggleTask(task.id)}
>
{task.completed ? "Undo" : "Complete"}
</button>
<button
className="delete-button"
onClick={() => deleteTask(task.id)}
>
Delete
</button>
</div>
</li>
))}
</ul>
);
};

export default TaskList;


Index.js

import React from "react";


import ReactDOM from "react-dom/client";
import App from "./App";

const root = ReactDOM.createRoot(document.getElementById("root"));


root.render(<App />);

index.css

body {
font-family: Arial, sans-serif;
}

.App {
text-align: center;
margin-top: 20px;
}

h1 {
color: #4CAF50;
}

h2 {
color: #2196F3;
}
Login Page

Signup Page:
Tash Manager (main page):
CONCLUSION

The Task Manager application developed during the internship at Pinesphere

effectively addresses the need for a simple, user-friendly platform to manage

personal tasks. By utilizing React for both frontend and backend, the project

demonstrates the potential of modern JavaScript frameworks to build full-stack

applications with dynamic user interfaces. One of the key highlights of this

project is the seamless task management experience, where users can create,

view, and update tasks in a straightforward manner.

A notable feature of the Task Manager is the secure user authentication, which

ensures that each user has access to their own personalized task list. This,

combined with persistent data storage using the browser's local storage,

guarantees that task information is preserved across sessions, making the app

more reliable and user-centric. The local storage solution was chosen to eliminate

the need for complex server-side setups, streamlining the development process

while ensuring efficient data handling.

The design of the application emphasizes simplicity, with a focus on ease of use

and navigation. Features like the back button for navigation between the task

manager and login page, as well as the ability to mark tasks as complete, create

new tasks, and view them in a list, make this tool effective for personal use.

Through this project, I gained valuable experience in React development,

working with state management, authentication, and data persistence. I also


learned the importance of providing a secure and reliable user experience,

especially when dealing with personal data.

The Task Manager serves as a solid foundation for further improvements, such

as integrating more advanced features like task prioritization, due dates, or even

collaborative task management. Ultimately, this project not only meets the

immediate goal of providing a personal task management solution but also lays

the groundwork for future development and scaling.

By completing this project, I was able to apply my theoretical knowledge of web

development to a practical, real-world scenario, enhancing my skills and

understanding of both the technical and user-experience aspects of application

development. This project has reinforced my interest in full-stack development,

particularly in building applications that have a direct impact on user productivity

and organization.

You might also like