Task Management App
Overview
In this assessment, you will build a Task Management App that allows users to add tasks with deadlines, assign categories, and update the status of each task. This app will require you to apply a wide range of JavaScript concepts, including arrays, objects, DOM manipulation, conditionals, and local storage to persist the task data.
Objective
You will create a dynamic task management app that lets users:
- Add new tasks with details such as the task name, category, deadline, and status.
- Update the status of tasks to reflect their progress (e.g., “In Progress,” “Completed,” “Overdue”).
- Automatically update task status based on the current date (tasks past their deadline will be marked as “Overdue”).
- Filter tasks by status or category.
- Persist task data using local storage so tasks are saved even after refreshing the page.
Project Requirements
1. Adding New Tasks
- Create input fields for the task name, category, deadline, and an initial status (e.g., “In Progress”).
- Include an “Add Task” button that will add the task to the task list.
- Each task should be stored as an object with properties such as task name, category, deadline, and status.
- Add the task object to an array that holds all tasks.
2. Displaying the Task List
- Create an HTML structure (such as an unordered list or table) to display the task list.
- For each task, display the task name, category, deadline, and status.
- Dynamically update the task list in the browser each time a new task is added or a status is updated.
3. Updating Task Status
- Allow users to update the status of tasks (e.g., “In Progress,” “Completed”) via a dropdown or button.
- Automatically check each task’s deadline and mark tasks as “Overdue” if the current date has passed the deadline.
- Update the displayed task list whenever a task’s status changes.
4. Filtering Tasks
- Add functionality to filter tasks by category or status (e.g., show only “Completed” tasks or tasks under the “Work” category).
- Provide a dropdown or set of buttons for users to choose a filter.
- When a filter is selected, only display the tasks that match the selected category or status.
5. Persisting Task Data with Local Storage
- Use local storage to save the current state of the task list so that tasks are restored when the page is refreshed.
- Ensure that task data (including name, category, deadline, and status) is stored and retrieved correctly.
Project Instructions
-
Create the HTML Structure
- Input fields for task name, category, deadline, and status.
- A button to add new tasks.
- A dropdown or buttons to filter tasks by status or category.
- A display area to show the list of tasks, including options to update task status.
-
Write the JavaScript Code
- Use an array to store tasks, each represented as an object.
- Write functions to add tasks, update task status, check overdue tasks, and filter tasks.
- Use DOM manipulation to display the task list dynamically.
- Implement local storage to persist task data.
-
Test Your Application
- Add multiple tasks and ensure they are displayed correctly.
- Test the “Update Status” functionality to ensure tasks can be marked as “Completed” or “Overdue.”
- Filter tasks by status or category and ensure the correct tasks are displayed.
- Refresh the page and ensure the tasks are restored from local storage.
Tips for Success
- Break down the tasks: Start with the core functionality (adding tasks and displaying them), then move to more complex features like filtering and local storage.
- Test frequently: Test each feature (e.g., task status updates or filters) separately to ensure they work correctly before moving on.
- Keep your code modular: Use functions to organize your logic and make your code more readable and maintainable.
- Think about the user experience: Ensure that the task list is easy to read and that users receive clear feedback when updating or filtering tasks.
Submission Guidelines
-
Code Submission: Push your project to a GitHub repository, and commit frequently throughout development. Ensure your code is clean, well-organized, and commented.
- The repository should include:
index.html
: The main HTML file.style.css
: CSS for styling the app.app.js
: The JavaScript file where your logic resides.
- Include a brief
README.md
explaining how the app works and any additional features you have implemented.
- The repository should include:
-
Reflection: Write a short reflection (100-200 words) included within the repository discussing:
- Challenges faced during the project.
- How you approached solving those challenges.
- What you would improve if given more time.
-
Submission: Submit the link to your GitHub repository via Canvas.
Rubric for Evaluation
Criteria | Excellent | Good | Satisfactory | Needs Improvement | Incomplete |
---|---|---|---|---|---|
Functionality | (36-40 points) The app fully meets all functional requirements. All features work correctly, including adding tasks, updating status, filtering, and using local storage. | (28-35 points) The app meets most functional requirements, with minor issues (e.g., one feature doesn’t work or is buggy). | (20-27 points) The app meets basic functional requirements, but several features don’t work or are partially implemented. | (1-19 points) The app does not meet key functional requirements. Major features are missing or not functional. | (0 points) No submission or the app does not function. |
Code Quality | (27-30 points) Code is clean, well-organized, and follows best practices for JavaScript. Functions are modular and reusable, with meaningful variable names and comments. | (21-26 points) Code is generally well-written but may have minor issues like redundant code or inconsistent naming. | (15-20 points) Code works but is somewhat disorganized or lacks sufficient comments. May have redundant logic or poor variable names. | (1-14 points) Code is poorly organized or difficult to read. Comments are missing or insufficient. Logic may be unclear or inefficient. | (0 points) No submission or the code is highly disorganized and does not follow best practices. |
User Interface & Display | (18-20 points) The app has a polished and user-friendly interface. Task information is displayed clearly, and the app provides feedback for all user actions. | (14-17 points) The app has a mostly functional interface, but it may lack polish or clarity in some areas (e.g., missing feedback for user actions). | (10-13 points) The app’s interface is basic but functional. Some features may be difficult to understand or use. | (1-9 points) The interface is difficult to navigate or confusing. Important task details are not displayed or are hard to read. | (0 points) No submission or the user interface is incomplete and not functional. |
Reflection | (9-10 points) The reflection provides a detailed, thoughtful overview of the challenges faced, how they were addressed, and potential improvements. | (7-8 points) The reflection addresses challenges and solutions but lacks depth in describing potential improvements. | (5-6 points) The reflection touches on challenges but does not fully explore the problem-solving process or potential improvements. | (1-4 points) The reflection is brief and does not provide much insight into the challenges faced or how they were resolved. | (0 points) No submission or the reflection is missing. |