Aftab
Aftab
S. H. JONDHALE POLYTECHNIC
DOMBIVLI (WEST), DIST (THANE)
A PROJECT REPORT ON
TO-DO LIST WEB-APPLICATION
SUBMITTED BY
GUIDED BY
MRS. N. D. Moholkar
DOMBIVLI (WEST)
2024 – 2025
1
MAHARASHTRA STATE BOARD OF TECHNICAL EDUCATION
CERTIFICATE
EXTERNAL EXAMINER
2
ACKNOWLEDGEMENT
We also express our gratitude and thanks to all our teachers and other
faculty members of Computer Department, S.H Jondhale Polytechnic
for their sincere co-operation in completing this Major project.
3
ABSTRACT
4
CONTENTS
1. INTRODUCTION---------------------------------------------- 7-8
1.1 Motivation
1.2 Problem definition
1.3 Objective of Project
1.4 Scope of the Project
2. LITERATURE SURVEY--------------------------------------9-10
2.1 Existing System
2.2 Disadvantages of Existing system
2.3 Proposed System
3. ANALYSIS------------------------------------------------------ 11-14
3.1 Software Requirement Specification
3.1.1 User requirement
3.1.2 Software requirement
3.1.3 Hardware requirement
4. DESIGN--------------------------------------------------------- 14-22
4.1 DFD/ER diagram
4.2 ER – Diagram
4.3 Modules
5
5. IMPLEMENTATION & RESULTS--------------------- 23-43
5.1 Implementation Methodology
5.2 Code
5.3 Output Screens
7. CONCLUSION----------------------------------------------- 46 -47
REFERENCES-------------------------------------------------- 48
6
1. INTRODUCTION
In the era of digital transformation, where productivity and efficiency are at the
forefront of both personal and professional life, managing tasks effectively has
become increasingly essential. Traditional to-do applications offer basic
functionalities but lack integration with communication tools, leading to
fragmented workflows. As teams become more distributed and the need for
seamless collaboration grows, the demand for a unified system that incorporates
task scheduling, communication, and calendar synchronization is more evident
than ever. This project addresses these modern requirements by combining
multiple functionalities into a single, user-friendly web application
• Calendar sync is based on the Google Calendar API, and its features are
limited to what is available within this integration.
• Enhances usability with cloud storage for file attachments and reporting
tools.
8
2. LITERATURE SURVEY
There are several existing task management and productivity tools such as
Todoist, Microsoft To Do, Trello, and Google Tasks that help users organize their
daily tasks. These systems provide basic features like task creation, due dates,
and reminders. Some of them offer limited calendar integration, while others
support collaboration on shared tasks. However, most of these applications
operate in silos and often lack real-time communication features and deeper
calendar synchronization. Additionally, customization in terms of themes or UI
is very limited.
Other platforms like Slack or Microsoft Teams offer chat and team collaboration,
but task tracking is secondary or dependent on third-party integrations. Users
often have to switch between multiple tools to manage their tasks, communicate
with others, and handle reminders or events, which can reduce overall
productivity.
9
4. Inefficient Workflow – Users are required to manage tasks, chat, and
calendar events in separate apps.
5. Lack of User Control – Users often don’t have control over how their tasks
are displayed or sorted.
To overcome the limitations of the existing systems, the proposed To-Do List Web
App is developed with the following advanced features:
5. Task Management – Create, update, and track tasks with priority, due dates,
and completion status.
6. User Analytics & Reporting – Visual reports and stats on user activity, task
trends, and productivity.
10
3. ANALYSIS
This section outlines the essential functionalities expected by the end users of the
system:
• Task Management: The system should allow users to create, update, and
delete to-do tasks with appropriate details such as title, description, date,
and time.
• Reminders and Alarms: The system must provide users with the ability to
set reminders for tasks to receive timely notifications.
11
• User Authentication: Only registered users should be allowed access to the
system. Secure login and session management must be in place.
This section lists the technologies and tools required to build and run the
application:
• Frontend Technologies:
• Backend Technologies:
• Database:
• Real-Time Communication:
12
• Calendar Integration:
o Google Calendar API: Allows users to sync their tasks with Google
Calendar and receive notifications.
• Other Tools:
The system also maintains a master database to store hidden to-do entries that are
not visible to users but necessary for internal operations.
These are the minimum hardware specifications required for running and testing
the application on both server and client ends:
• Client-Side Requirements:
o RAM: Minimum 4 GB
• Server-Side Requirements:
13
o Minimum 8 GB RAM, 100 GB storage
4. DESIGN
DFD Level 0
Overview:
This is the highest-level view of the system. It shows the entire system as a single
process and its interaction with external entities.
Flow Explanation:
14
• The system receives or sends:
DFD Level 1
15
Overview:
This breaks the single process from Level 0 into sub-processes showing more
detailed interaction.
Flow Explanation:
1. User:
2. System Processes:
o 1.2 Chat fetches and stores User Data for chatting context.
16
DFD Level 2
Overview:
Shows even deeper breakdown of the internal operations and data flows between
processes.
Flow Explanation:
3. 1.4 Chat:
o Sends/receives messages.
4. Databases/External Interfaces:
18
4.2 ER-Diagram :
4.3 Modules
1. Authentication Module
This module is responsible for handling user login, registration, and session
control. It ensures secure access and protects user data with encrypted password
storage.
a) User Registration – Allows new users to sign up with email and password.
19
b) User Login – Validates credentials to provide access to the dashboard.
This module provides users with tools to manage their daily tasks. It supports
basic operations along with task prioritization and alerts.
a) Add Task – Users can create new tasks with title, date, and description.
d) Alarms & Reminders – Users can set alerts to be notified on due time.
This module enables users to communicate instantly through chat. It is built using
Socket.io for real-time, event-based communication.
This module connects the task list with Google Calendar. It ensures tasks are
reflected in the user's calendar for better scheduling.
a) Google API Integration – Authorizes the user’s Google account for syncing.
5. Settings Module
20
This module allows the customization of UI themes to enhance user experience.
It saves preferences for consistency in future sessions.
4.4 Pseudocode :
Initialize Application
User Registration/Login
If new user:
Else:
Dashboard Load
21
Display items in UI
Add Task
Store in database
Edit/Delete Task
Update database
Chat Functionality
Logout
22
5. IMPLEMENTATION & RESULTS
5.2 Code
App.jsx
23
import {Toaster} from "react-hot-toast";
useEffect(() => {
checkAuth()
}, [checkAuth]);
<Routes>
<Route path="/" element={authUser ? <TodoPage /> : <Navigate
to="/login" />} />
<Route path="/signup" element={!authUser ? <SignUpPage /> :
<Navigate to="/" />} />
<Route path="/login" element={!authUser ? <LoginPage /> : <Navigate
to="/" />} />
<Route path="/todo" element={authUser ? <TodoPage /> : <Navigate
to="/login" />} />
24
<Route path="/chat" element={authUser ? <HomePage /> : <Navigate
to="/login" />} />
<Route path="/settings" element={<SettingPage />} />
<Route path="/profile" element={authUser ? <ProfilePage /> : <Navigate
to="/login" />} />
</Routes>
<Toaster />
</div>
);
};
Homepage.jsx :
import { useChatStore } from "../store/useChatStore";
return (
<div className="h-screen bg-base-200">
<div className="flex items-center justify-center pt-20 px-4">
<div className="bg-base-100 rounded-lg shadow-cl w-full max-w-6xl h-
[calc(100vh-8rem)]">
<div className="flex h-full rounded-lg overflow-hidden">
<Sidebar />
25
{!selectedUser ? <NoChatSelected />: <ChatContainer /> }
</div>
</div>
</div>
</div>
);
};
export default HomePage;
LoginPagw.jsx :
26
await login(formData); // ✅ Await it
} catch (error) {
console.log("Login failed:", error); // Optional extra safety
}
};
return (
<div className="h-screen grid lg:grid-cols-2">
{/* Left Side - Form */}
<div className="flex flex-col justify-center items-center p-6 sm:p-12">
<div className="w-full max-w-md space-y-8">
{/* Logo */}
<div className="text-center mb-8">
<div className="flex flex-col items-center gap-2 group">
<div
className="w-12 h-12 rounded-xl bg-primary/10 flex items-center
justify-center group-hover:bg-primary/20
transition-colors"
>
<MessageSquare className="w-6 h-6 text-primary" />
</div>
<h1 className="text-2xl font-bold mt-2">Welcome Back</h1>
<p className="text-base-content/60">Sign in to your account</p>
</div>
</div>
27
<span className="label-text font-medium">Email</span>
</label>
<div className="relative">
<div className="absolute inset-y-0 left-0 pl-3 flex items-center
pointer-events-none">
<Mail className="h-5 w-5 text-base-content/40" />
</div>
<input
type="email"
className={`input input-bordered w-full pl-10`}
placeholder="[email protected]"
value={formData.email}
onChange={(e) => setFormData({ ...formData, email: e.target.value
})}
/>
</div>
</div>
<div className="form-control">
<label className="label">
<span className="label-text font-medium">Password</span>
</label>
<div className="relative">
<div className="absolute inset-y-0 left-0 pl-3 flex items-center
pointer-events-none">
<Lock className="h-5 w-5 text-base-content/40" />
</div>
<input
type={showPassword ? "text" : "password"}
className={`input input-bordered w-full pl-10`}
28
placeholder="••••••••"
value={formData.password}
onChange={(e) => setFormData({ ...formData, password:
e.target.value })}
/>
<button
type="button"
className="absolute inset-y-0 right-0 pr-3 flex items-center"
onClick={() => setShowPassword(!showPassword)}
>
{showPassword ? (
<EyeOff className="h-5 w-5 text-base-content/40" />
):(
<Eye className="h-5 w-5 text-base-content/40" />
)}
</button>
</div>
</div>
29
</form>
<div className="text-center">
<p className="text-base-content/60">
Don't have an account?{" "}
<Link to="/signup" className="link link-primary">
Create account
</Link>
</p>
</div>
</div>
</div>
SettingPage.jsx :
30
const PREVIEW_MESSAGES = [
{ id: 1, content: "Hey! How's it going?", isSent: false },
{ id: 2, content: "I'm doing great! Just working on some new features.", isSent:
true },
];
return (
<div className="h-screen container mx-auto px-4 pt-20 max-w-5xl">
<div className="space-y-6">
<div className="flex flex-col gap-1">
<h2 className="text-lg font-semibold">Theme</h2>
<p className="text-sm text-base-content/70">Choose a theme for your
chat interface</p>
</div>
31
<div className="absolute inset-0 grid grid-cols-4 gap-px p-1">
<div className="rounded bg-primary"></div>
<div className="rounded bg-secondary"></div>
<div className="rounded bg-accent"></div>
<div className="rounded bg-neutral"></div>
</div>
</div>
<span className="text-[11px] font-medium truncate w-full text-
center">
{t.charAt(0).toUpperCase() + t.slice(1)}
</span>
</button>
))}
</div>
32
<div>
<h3 className="font-medium text-sm">John Doe</h3>
<p className="text-xs text-base-content/70">Online</p>
</div>
</div>
</div>
33
12:00 PM
</p>
</div>
</div>
))}
</div>
Backend :
index.js :
dotenv.config();
app.use(express.json());
app.use(cookieParser());
app.use(cors({
origin: 'http://localhost:5173', // Vite frontend
credentials: true, // if you're using cookies or auth headers
}));
35
app.use("/api/auth", authRoutes);
app.use("/api/chat", chatRoutes);
app.use('/api/todos', todoRoutes);
app.use('/api/google', googleRoutes);
server.listen(PORT, () => {
console.log("server is running on port:" +PORT);
connectDB();
})
authRoutes.js :
router.post("/signup",signup);
router.post("/login",login);
router.post("/logout",logout);
36
router.get("/check", protectRoute,checkAuth);
// authRoutes.js
router.get('/profile', protectRoute, (req, res) => {
res.json({
id: req.user.id,
email: req.user.email,
googleTokens: req.user.googleTokens,
});
});
chatRoutes.js :
37
google.js :
todoRoutes.js :
import express from 'express';
import { protectRoute } from "../middleware/auth.middleware.js";
import {
getTodos,
createTodo,
updateTodo,
deleteTodo,
} from '../controllers/todoController.js';
const router = express.Router();
// Apply protectRoute middleware to all routes
router.use(protectRoute);
router.get('/', getTodos);
router.post('/', createTodo);
router.put('/:id', updateTodo);
router.delete('/:id', deleteTodo);
39
export default router;
Signup page
Login page
40
User Account
41
Google signin page
Profile page
42
Chat section
Settings page
43
6. COST ANALYSIS
4 Software Tools (DB Clients, Code Editors, etc.) ₹200 / License ₹400
Total ₹19,200
Total
44
6.3 Miscellaneous Cost Analysis
Total ₹1,500
Total ₹1,500
45
7. CONCLUSION
The To-Do List Web Application with real-time chat and calendar
synchronization is a comprehensive solution for task management and team
collaboration. It addresses the common limitations of traditional task
management systems by combining task management, communication, and
integration with external tools like Google Calendar. The system is built using
modern technologies such as Node.js, React.js, and MongoDB, ensuring
scalability and maintainability. The project successfully meets the objectives set
out, and it has the potential for further expansion with additional features such as
task sharing, notifications, and advanced chat functionalities.
Future Scope
46
COURSE OUTCOMES (COS)
The theory, practical experiences and relevant soft skills associated with this
course are to be taught and implemented, so that the student demonstrates the
following industry oriented COs associated with the above mentioned
competency:
47
REFERENCES
https://youtube.com/@codesistency
https://youtube.com/@brocodez
https://youtube.com/@javascriptmastery
https://youtube.com/@freecodecamp
https://reactjs.org/docs/getting-started.html
https://nodejs.org/en/docs
https://developers.google.com/calendar/api
48