Nexus Task Manager is a fully functional, interactive DOM-based web application designed to revolutionize personal task and workflow management. Built entirely with Vanilla JavaScript, HTML5, and CSS3, this application demonstrates advanced client-side logic, state management, and dynamic DOM manipulation without any framework dependencies.
The application solves the real-world problem of managing, organizing, and tracking tasks effectively with features like priority levels, due dates, categorization, task filtering, and persistent data storage using browser's LocalStorage API.
In today's fast-paced world, individuals and teams struggle with:
- Task Disorganization: Managing multiple tasks without a structured system
- Priority Ambiguity: Difficulty identifying which tasks are most important
- Progress Tracking: Lack of visibility into completed vs. pending work
- Data Loss: Tasks being forgotten or lost due to absence of persistent storage
- Workflow Fragmentation: Needing multiple tools for different task management aspects
Nexus Task Manager provides a comprehensive, all-in-one task management platform that combines intuitive UI/UX with powerful functionality, enabling users to:
- Create, edit, and delete tasks seamlessly
- Prioritize work using three-level priority system (Low, Medium, High)
- Categorize tasks for better organization
- Track progress with real-time statistics
- Filter tasks by status, priority, and search criteria
- Manage deleted tasks with recovery options
- Export task data for record-keeping
- ✅ Add new tasks with comprehensive details (title, description, priority, category, due date)
- ✅ Edit existing tasks with modal-based interface
- ✅ Delete tasks with confirmation modal (prevents accidental deletions)
- ✅ Mark tasks as completed/incomplete with toggle functionality
- ✅ Bulk operations: Delete all tasks, select multiple tasks for batch operations
- ✅ Filter by Status: All, Completed, Pending
- ✅ Filter by Priority: All, High, Medium, Low
- ✅ Real-time Search: Find tasks by title or description
- ✅ Category-wise organization and filtering
- ✅ Responsive filter UI with both desktop and mobile support
- ✅ Three-level priority system (Low, Medium, High) with visual indicators
- ✅ Mark tasks as "Important" for quick identification
- ✅ High-priority task counter in statistics dashboard
- ✅ Color-coded priority indicators in task cards
- ✅ Real-time statistics dashboard displaying:
- Total Tasks
- Completed Tasks
- Pending Tasks
- High Priority Tasks
- ✅ Task completion timestamps
- ✅ Task creation date tracking
- ✅ Visual progress indicators
- ✅ Set optional due dates for tasks
- ✅ Min date validation (prevents past dates)
- ✅ Visual due date display in task cards
- ✅ Sort tasks by due date (implicit through organization)
- ✅ LocalStorage Integration: All tasks persist across browser sessions
- ✅ Automatic Saving: Changes instantly saved to LocalStorage
- ✅ JSON Data Format: Structured task objects stored as JSON
- ✅ Soft Delete: Tasks moved to trash instead of permanent deletion
- ✅ Restore Functionality: Recover deleted tasks from trash
- ✅ Permanent Delete: Option to permanently remove tasks
- ✅ Delete Countdown Timer: Visual timer showing when soft-deleted items will be permanently removed (30 days)
- ✅ Batch Restore/Delete Operations
- ✅ Export all tasks as JSON file
- ✅ Preserve complete task metadata
- ✅ Downloadable backup for data safety
- ✅ Modern glassmorphism design with gradient backgrounds
- ✅ Smooth animations and transitions
- ✅ Toast notifications for user feedback (success, error, warning)
- ✅ Modal dialogs for confirmations and edits
- ✅ Responsive design for mobile, tablet, and desktop
- ✅ Interactive form controls with visual feedback
- ✅ Floating Action Button (FAB) for quick task addition
- ✅ Semantic HTML structure
- ✅ ARIA labels and descriptions
- ✅ Keyboard navigation support
- ✅ Form validation with error messages
- ✅ Visual feedback for all interactions
- ✅ Loading states and animations
// Dynamic element creation
const taskElement = document.createElement('div');
taskElement.classList.add('task-card');
// Content manipulation
element.textContent = 'New Title';
element.innerHTML = '<i class="fas fa-check"></i>';
// Style manipulation
element.style.backgroundColor = '#ff5722';
element.classList.add('completed');- Creating elements dynamically for task cards
- Updating DOM based on user interactions
- Removing/toggling elements based on state
// Event delegation for efficient handling
taskList.addEventListener('click', (e) => {
if (e.target.closest('.delete-btn')) {
deleteTask(taskId);
}
});
// Form submission
taskForm.addEventListener('submit', handleAddTask);
// Input events
searchInput.addEventListener('input', (e) => {
filterTasks(currentFilter, e.target.value);
});
// Event listeners for priority selection
document.querySelectorAll('.priority-option').forEach(option => {
option.addEventListener('click', selectPriority);
});- Click Events: Task actions (edit, delete, complete)
- Form Submission: Add/edit task submission
- Input Events: Real-time search filtering
- Event Delegation: Efficient handling of dynamically added elements
- Custom Event Handling: Priority selector, category selection
// Query selectors
const task = document.getElementById('taskItem-123');
const allTasks = document.querySelectorAll('.task-card');
const parent = element.closest('.container');
// Parent/Child traversal
const taskCard = button.closest('.task-card');
const children = container.querySelectorAll(':scope > .task-item');- Using
getElementById()for specific elements - Using
querySelector()andquerySelectorAll()for complex selections - Traversing DOM tree to find parent/child elements
- Using
closest()for event delegation
element.classList.add('active');
element.classList.remove('hidden');
element.classList.toggle('completed');
element.classList.contains('priority-high');- Adding/removing classes for styling changes
- Toggling states (active, completed, expanded)
- Conditional class application based on data
if (tasks.length === 0) {
taskList.innerHTML = '<p class="empty-state">No tasks</p>';
} else {
taskList.innerHTML = tasks.map(renderTaskHTML).join('');
}- Showing/hiding elements based on conditions
- Rendering content based on filter criteria
- Displaying statistics based on task data
<div class="priority-option" data-priority="high"></div>
// Accessing data attributes
const priority = element.dataset.priority;
element.dataset.taskId = '12345';- Using data attributes to store metadata
- Retrieving data from DOM elements
- Using for event delegation logic
// Client-side state storage
let tasks = JSON.parse(localStorage.getItem('nexusTasks')) || [];
let currentFilter = 'all';
// Updating DOM based on state changes
updateStats(); // Re-render statistics
renderTasks(); // Re-render task list
saveTasks(); // Persist state to LocalStorage- Maintaining application state in JavaScript
- Keeping DOM in sync with data state
- Persisting state to LocalStorage
// Update specific text content
document.getElementById('totalTasks').textContent = tasks.length;
// Update HTML content
taskList.innerHTML = generateTasksHTML(filteredTasks);
// Update form values
document.getElementById('editTaskTitle').value = task.title;- Updating text content
- Rendering HTML from data
- Populating form fields
// Show modal
editModal.classList.add('active');
// Close modal
editModal.classList.remove('active');
// Handle backdrop click
modalBackdrop.addEventListener('click', closeModal);- Creating modal dialogs dynamically
- Managing modal visibility with classes
- Handling modal interactions
// Using CSS transitions triggered by class changes
element.classList.add('fade-out');
// Adding animation classes from animate.css
element.classList.add('animate__animated', 'animate__slideInUp');
// Smooth scrolling
element.scrollIntoView({ behavior: 'smooth', block: 'start' });- Coordinating CSS animations with JavaScript
- Using animation libraries with DOM classes
- Implementing smooth scroll behavior
- HTML5: Semantic markup and structure
- CSS3: Advanced styling with:
- Flexbox for layout
- Grid for responsive design
- CSS Variables for theming
- Glassmorphism effects
- Gradient backgrounds
- Media queries for responsiveness
- JavaScript (ES6+): Core application logic
- Arrow functions
- Destructuring
- Template literals
- Async/await patterns
- Array methods (map, filter, find, etc.)
- Font Awesome 6.4.0: Icon library for UI elements
- Google Fonts: Typography (Poppins, Orbitron)
- Animate.css 4.1.1: CSS animation library
- LocalStorage API: For data persistence
- LocalStorage: Client-side data persistence
- Date API: Task creation and due date handling
- DOM API: Complete DOM manipulation
- Event API: Comprehensive event handling
- CSS Object Model: Dynamic styling
Task Manager/
├── index.html # Main dashboard page
├── index.css # Main styling
├── index.js # Main application logic
└── Readme.md # Project documentation
- Main application interface
- Header with logo and export button
- Statistics dashboard with real-time counters
- Task creation form with complete fields
- Task list container for rendering tasks
- Filter and search controls
- Modal dialogs for edit and delete confirmations
- Core application logic
- Task CRUD operations (Create, Read, Update, Delete)
- Event listeners and handlers
- LocalStorage management
- Statistics calculation
- Task filtering and searching
- Toast notification system
- Export functionality
- Enhanced task management interface
- Includes all features of index.html
- Additional restore/recover deleted tasks functionality
- Menu-based actions with dropdown
- Multi-select task operations
- Advanced task management logic
- Soft delete with countdown timer
- Restored tasks functionality
- Bulk operations (delete selected, restore selected)
- Delete countdown auto-update
- Menu and filter dropdowns
- Responsive design layouts
- Glassmorphism styling
- Animation definitions
- Theme colors and gradients
- Mobile-first responsive design
- Enhanced styling for task page
- Dropdown menus
- Modal styling
- Additional animations
- Modern web browser (Chrome, Firefox, Safari, Edge - ES6+ support)
- Git (optional, for cloning repository)
-
Download the project files
git clone https://github.com/yourusername/nexus-task-manager.git cd nexus-task-manager -
Open in browser
- Simply open
index.htmlin your web browser - Or use Live Server extension in VS Code for development
- Simply open
- Install "Live Server" extension in VS Code
- Right-click on
index.html - Select "Open with Live Server"
- Application will open in default browser
# Python 3
python -m http.server 8000
# Python 2
python -m SimpleHTTPServer 8000Then navigate to http://localhost:8000 in browser.
- No package manager (npm, yarn) needed
- No build process required
- No backend server needed
- Works offline with LocalStorage persistence
- Scroll to the "Add New Task" form
- Enter task Title (required)
- Add Description (optional)
- Select Priority level (Low, Medium, High)
- Choose Category (optional, defaults to "General")
- Set Due Date (optional, min date is today)
- Check Mark as Important if needed
- Click "Add Task" button
- Task appears in the main list and statistics update
- View All: Click "All Tasks" filter (default)
- View by Status:
- "Completed" - show finished tasks
- "Pending" - show incomplete tasks
- View by Priority:
- "High Priority" - show urgent tasks
- "Medium Priority"
- "Low Priority"
- Search: Type in search box to find tasks by title
- Click the "Edit" button on a task card
- Modify any field in the modal
- Click "Update Task" to save
- Close modal with "Cancel" or by clicking outside
- Click the checkmark icon on a task card
- Task moves to completed state
- Statistics update automatically
- Click the "Delete" button on task card
- Confirm deletion in modal
- Task moves to trash/recycle (soft delete)
- Task can be restored within 30 days
- Click Menu (three dots) in header
- Select "Restore Deleted Tasks"
- View all deleted tasks with countdown timers
- Restore: Move back to active tasks
- Permanently Delete: Remove forever
- Click "Export" button in header
- JSON file downloads with all tasks
- Useful for backup or data transfer
- Total Tasks: Count of all tasks created
- Completed: Count of finished tasks
- Pending: Count of incomplete tasks
- High Priority: Count of high-priority tasks
- Searches across task titles and descriptions
- Works with active filter (doesn't override filters)
- Case-insensitive search
- Deleted tasks stored separately
- 30-day countdown before permanent deletion
- Restore deleted tasks anytime
- Batch restore/delete operations
- Real-time updates as tasks are modified
- Visual display with icons
- Helps track productivity
- Automatically saves to browser's LocalStorage
- Survives browser restart
- No server-side storage needed
- Success messages for completed actions
- Error alerts for invalid inputs
- Warning messages for edge cases
- Auto-dismiss after 5 seconds
- Works on desktop (1920px+)
- Optimized for tablet (768px-1024px)
- Mobile-first approach (320px+)
- Flexible layouts using Flexbox/Grid
// Global state
let tasks = JSON.parse(localStorage.getItem('nexusTasks')) || [];
// State changes
function addTask(newTask) {
tasks.unshift(newTask);
saveTasks(); // Persist to localStorage
renderTasks(); // Update DOM
updateStats(); // Update statistics
showToast(...); // User feedback
}// Single listener for multiple elements
taskList.addEventListener('click', (e) => {
const editBtn = e.target.closest('.edit-btn');
const deleteBtn = e.target.closest('.delete-btn');
const completeBtn = e.target.closest('.complete-btn');
if (editBtn) editTask(...);
if (deleteBtn) deleteTask(...);
if (completeBtn) toggleTaskCompletion(...);
});function handleAddTask(e) {
e.preventDefault();
const title = document.getElementById('taskTitle').value.trim();
// Validation
if (!title) {
showToast('Error!', 'Title is required', 'error');
return;
}
// Processing
createTask(title);
clearForm();
}// Save to LocalStorage
function saveTasks() {
localStorage.setItem('nexusTasks', JSON.stringify(tasks));
}
// Load from LocalStorage
function loadTasks() {
tasks = JSON.parse(localStorage.getItem('nexusTasks')) || [];
renderTasks();
}Edit CSS variables in the stylesheet:
:root {
--primary-color: #6366f1;
--success-color: #10b981;
--error-color: #ef4444;
}- Add input field to HTML form
- Extract value in
handleAddTask() - Add property to task object
- Display in task card template
- Update edit functionality
Change in priority selector HTML and JavaScript:
<div class="priority-option priority-critical" data-priority="critical">Critical</div>Change timer duration in task.js:
const DELETE_COUNTDOWN_DAYS = 30; // Modify this value- Browser-Only Storage: Data limited to single device/browser (no cloud sync)
- Storage Limit: LocalStorage typically limited to 5-10MB per domain
- No User Authentication: All data publicly accessible in browser
- No Real-time Sync: No synchronization across multiple tabs/devices
- No Backend: Export/import requires manual file handling
- Mobile Design: While responsive, touch gestures not fully optimized
- No Categories Backend: Category selection limited to predefined list
- No Recurring Tasks: Cannot set repeating task patterns
- Backend API integration for cloud storage
- User authentication and account system
- Multi-device synchronization
- Task reminders and notifications
- Recurring task scheduling
- Team collaboration features
- Mobile app version
- Dark/Light theme toggle
- Task tags and custom categories
- Analytics and productivity reports
- Issue: Tasks disappear after page refresh
- Solution: Check if LocalStorage is enabled in browser settings
- Check: Open DevTools → Application → LocalStorage → Look for 'nexusTasks'
- Issue: "Add Task" button doesn't work
- Solution: Ensure task title field has content (required field)
- Check: Browser console for JavaScript errors (F12 → Console)
- Issue: Filtered view shows incorrect tasks
- Solution: Clear search field if using both search and filter
- Check: Refresh page (filters reset to default)
- Issue: Cannot find task in restore menu
- Solution: Check if 30-day countdown expired (permanent deletion)
- Check: Task page (task.html) for advanced restoration
- Issue: CSS not loading correctly
- Solution: Ensure all CSS files are in correct directories
- Check: Browser DevTools → Network tab to confirm CSS file loads
- Issue: Icons appear as blank squares
- Solution: Requires internet for Font Awesome CDN
- Check: Internet connection and CDN availability
| Browser | Version | Support |
|---|---|---|
| Chrome | 90+ | ✅ Full Support |
| Firefox | 88+ | ✅ Full Support |
| Safari | 14+ | ✅ Full Support |
| Edge | 90+ | ✅ Full Support |
| Opera | 76+ | ✅ Full Support |
| IE 11 | All | ❌ Not Supported |
- No ES6+ support (arrow functions, template literals, destructuring)
- No CSS Grid/Flexbox full support
- No LocalStorage API limitations
- ✅ Fully functional DOM-based web application
- ✅ Built with Vanilla JavaScript (no frameworks)
- ✅ Heavy DOM manipulation throughout
- ✅ Comprehensive event handling
- ✅ Application-level state management
- ✅ Client-side data persistence (LocalStorage)
- ✅ Responsive design implementation
- ✅ Real-world problem solving (task management)
- ✅ Edge case handling (validation, confirmations)
- ✅ Well-structured, commented code
- ✅ Professional README documentation
- ✅ Ready for demo video submission
Project Name: Nexus Task Manager
Type: DOM-Based Web Application
Category: Productivity / Task Management
Framework: Vanilla JavaScript (No External Frameworks)
Version: 1.0.0
Last Updated: January 2026
- Modular Functions: Each function has single responsibility
- Naming Conventions: Clear, descriptive variable and function names
- Comments: Strategic comments explaining complex logic
- Error Handling: Validation and error messages for user actions
- Performance: Efficient DOM manipulation, event delegation
- Advanced DOM traversal with
closest(),querySelector(),querySelectorAll() - Event delegation for dynamic elements
- Conditional rendering based on state
- State-driven DOM updates
- Class-based styling management
- Modal and overlay management
- Real-time DOM updates with user feedback
- Complete CRUD operations (Create, Read, Update, Delete)
- Data persistence across sessions
- Soft delete with recovery mechanism
- Real-time statistics and analytics
- Search and filter functionality
- User feedback system (notifications)
- Responsive, production-ready UI
For issues or questions:
- Check the Troubleshooting section
- Review browser console for errors (F12)
- Verify LocalStorage is enabled
- Try clearing browser cache and reload
Developed with ❤️ for Web Dev II (Batch 2029) Final Project
This project demonstrates mastery of DOM manipulation, JavaScript fundamentals, and frontend engineering principles without relying on any external frameworks.