Project Overview
Study Planner is a React-based web application designed to help students manage their academic tasks, schedules, and notes efficiently. Built as part of the INFO655 Web Programming course at Drexel University, this project demonstrates proficiency in React concepts, including component interaction, state management, custom hooks, context API, conditional rendering, and styling. It also incorporates features like browser notifications which shows the understanding of the curiculum
The application is hosted on GitHub Pages at: https://AthmeeyaM.github.io/INFO-655-project-Study-Planner-/.
Scope and Contents
- Component Interaction: Components like
Dashboard,TaskList,CalendarPage,NotesSection, andSettingsshare data via custom hooks and context. - Data Sharing: The
useTaskshook centralizes task management, whileDarkModeContextandNotificationContextmanage global settings. - Custom Hooks:
useTasksencapsulates task-related logic with localStorage persistence. - Styles: Inline CSS with dynamic theming for light/dark modes.
- Conditional Rendering: Dynamic UI updates based on task status, section edits, and settings toggles.
The project is deployed on GitHub Pages using HashRouter to handle routing in a static environment.
Features
-
Dashboard (
Dashboard.jsx):- Add, edit, and delete tasks with due dates, times, and notification settings.
- Toggle task completion with a checkbox.
- Displays pending and completed tasks separately with styled differentiation.
- Integrates dark mode theming via
DarkModeContext.
-
Task Manager (
TaskList.jsx):- Organize tasks into customizable sections (e.g., "General," "Work").
- Add, edit, rename, and delete sections.
- Edit tasks inline with due dates, times, and notification settings.
- Persistent storage via
useTaskshook andlocalStorage.
-
Calendar (
CalendarPage.jsx):- View tasks on a calendar interface using
react-calendar. - Click a date to see tasks due on that day, displaying titles and times.
- Supports dark mode styling.
- View tasks on a calendar interface using
-
Notes (
NotesSection.jsx):- Create, edit, and delete notes with titles and descriptions.
- View full note details in a modal dialog.
- Grid layout for notes with truncation and dark mode support.
- LocalStorage persistence for notes.
-
Settings (
Settings.jsx):- Toggle dark mode globally using
DarkModeContext. - Enable/disable browser notifications via
NotificationContext.
- Toggle dark mode globally using
-
Navbar (
Navbar.jsx):- Responsive sidebar navigation with links to all pages.
- Adapts to dark mode with dynamic styling.
-
Custom Hooks (
useTasks.js):- Manages tasks and sections with CRUD operations (Create, Read, Update, Delete).
- Sorts tasks by due date and persists data in
localStorage.
-
Contexts:
DarkModeContext.js: Global dark mode state withlocalStoragepersistence and body style updates.NotificationContext.js: Manages notification settings and schedules browser notifications for tasks.
How to Run the Project
Prerequisites
- Node.js (v16 or later recommended) and npm installed.
- Git installed for cloning the repository.
Steps to Run Locally
- Clone the Repository:
git clone https://github.com/AthmeeyaM/INFO-655-project-Study-Planner-.git
cd INFO-655-project-Study-Planner-- To install dependencies:
npm install
- Run the code:
npm run dev
Steps to deploy
- Build the Project
npm run build
- Deploy
npm run deploy
Deployed Site
My project app is running live at https://AthmeeyaM.github.io/INFO-655-project-Study-Planner-/
Use Cases
Use Case 1: Managing Daily Tasks
- User: A student preparing for midterms.
- Action:
- Navigate to
/dashboard. - Add a task: "Review Chapter 5" with due date "2025-03-22" and time "14:00," setting a 2-hour notification.
- Toggle the task as completed once finished.
- Navigate to
- Outcome: Task appears in "Pending Tasks," moves to "Completed Tasks" when checked, and a notification fires 2 hours before 2:00 PM on March 22, 2025.
Use Case 2: Organizing Tasks by Category
- User: A student juggling coursework and projects.
- Action:
- Go to
/tasks. - Add a section "CS Projects" via the "New Section" button.
- Add "Finish React App" to "CS Projects" with a due date.
- Drag "Review Chapter 5" from "General" to "CS Projects."
- Go to
- Outcome: Tasks are organized by section, and dragging persists the change in
localStorage.
Use Case 3: Checking Due Dates
- User: A student planning study sessions.
- Action:
- Visit
/calendar. - Click "March 22, 2025" to see "Finish React App" due at 14:00.
- Visit
- Outcome: Calendar displays tasks for the selected date, aiding in scheduling.
Use Case 4: Taking Study Notes
- User: A student summarizing lectures.
- Action:
- Go to
/notes. - Click "Add Note," enter "Lecture 3: Hooks" with a description.
- View the note in a dialog, then edit it to add more details.
- Go to
- Outcome: Notes are saved, editable, and viewable in a modal.
Use Case 5: Customizing Experience
- User: A student preferring a dark theme.
- Action:
- Navigate to
/settings. - Enable "Dark Mode" and "Notifications."
- Navigate to
- Outcome: App switches to dark theme, and notifications are enabled for tasks.
Shortcomings and Potential Improvements
Shortcomings
- Drag-and-drop in
TaskListoption can rearrange tasks between sections. - Calendar doesn’t visually mark dates with tasks.
- Could have improved the UI in the calendar page and overall.
Improvements
- Add task reordering within sections using
react-beautiful-dnd. - Store notification schedules in
localStorageor a backend. - Enhance
CalendarPagewith date markers for tasks usingtileContent.
Project Highlights
- Custom Hook:
useTasksprovides a reusable, centralized task management system. - Theming: Seamless dark mode across all components with context.
- Notification: Ability to toggle notification preference.