A lightweight, fully client-side task management application built using HTML, CSS, and Vanilla JavaScript, with a strong focus on user experience, predictable state handling, and maintainable UI logic — without relying on external frameworks.
This project explores practical frontend engineering patterns, including isolated animations, persistent storage, inline editing, undo actions, and time-based task expiry.
- Project Overview
- Features
- UX & Design Principles
- Project Structure
- Core Logic Overview
- Animation Handling Strategy
- Data Persistence
- Edge Cases Considered
- Installation & Usage
- Technology Stack
- Future Enhancements
- Learning Outcomes
- License
Smart Task Manager is a feature-focused to-do application designed to behave like a real product rather than a simple demo.
The project emphasizes:
- Intentional UI behavior
- Predictable state transitions
- Minimal but effective visual feedback
- Zero external dependencies
The goal is to demonstrate how core frontend concepts can be implemented cleanly using vanilla JavaScript.
- Add tasks via button click or
Enterkey - Input validation prevents empty submissions
- Automatic capitalization for consistency
- Custom animated checkbox
- Visual feedback for completed tasks
- State updates without full list re-render
- Double-click to edit tasks
Enterto saveEscapeor blur to cancel changes
- Smooth delete animation
- Undo toast available for 5 seconds
- Task restoration handled safely
- Tasks older than 24 hours move to an Expired section
- Expired tasks can be restored manually
- Tasks stored using browser
localStorage - Data persists across refreshes and browser restarts
This project follows practical UX guidelines:
- No unnecessary re-renders
- Only affected items animate
- Keyboard-friendly interactions
- Clear visual hierarchy
- Animations used for feedback, not decoration
The interface is designed to remain responsive and predictable during frequent user actions.
├── index.html # Application structure
├── style.css # Styling, layout, and animations
├── script.js # Core logic and state handling
└── README.md # Documentation
- User enters task text
- Input validation occurs
- Task object created with timestamp
- State updated immutably
- UI re-rendered with targeted animation
- State toggled immutably
- Only the updated task receives animation
- List remains stable
- Task text replaced with an input field
- Original task metadata preserved
- Clean save/cancel handling
- Task removed visually
- Temporarily stored in memory
- Restored if undo action is triggered within timeout
Problem Addressed:
Avoiding full list animations on every state update.
Approach Used:
- No default animations on list items
- Animation classes applied conditionally:
animate-infor newly added tasksanimate-checkfor completion toggles
- Animation flags reset after render
This mirrors component-level updates seen in modern frameworks, implemented manually.
- Uses browser
localStorage - Stores full task objects including timestamps
- JSON serialization for safety
- No backend or external services required
- Empty task submissions
- Rapid add/delete operations
- Undo timeout cleanup
- Editing tasks to empty values
- Conflicts between editing and completion
- Restoring expired tasks
git clone <repo-url>
cd smart-task-manager
open index.htmlOpen index.html in any modern browser.
No build steps or dependencies required.
| Layer | Technology |
|---|---|
| Markup | HTML5 |
| Styling | CSS3 (Flexbox, animations) |
| Logic | Vanilla JavaScript (ES6+) |
| Storage | Browser LocalStorage |
| Icons | Font Awesome |
- Drag-and-drop task reordering
- System-aware dark mode
- Task priorities
- Due dates and reminders
- Basic task analytics
This project helped reinforce:
- State-driven UI updates
- Non-trivial DOM manipulation
- Controlled animation patterns
- UX-focused frontend decisions
- Writing maintainable vanilla JavaScript
This project is open-source and available for learning and portfolio use.
This project focuses on understanding fundamentals and building predictable user interfaces without depending on frameworks, emphasizing clarity, maintainability, and user experience.