A modern, feature-rich todo list application built as part of The Odin Project's Full Stack JavaScript curriculum. This project demonstrates mastery of ES6 modules, webpack bundling, factory functions, and local storage persistence.
- π Project Management: Organize todos into multiple projects
- β Full CRUD Operations: Create, read, update, and delete todos
- π― Priority Levels: Categorize tasks as low, medium, or high priority
- π Due Date Tracking: Set and track due dates with relative time display
- πΎ Local Storage: Automatic data persistence across sessions
- π¨ Modern UI/UX: Beautiful gradient design with smooth animations
- π± Responsive Design: Works seamlessly on desktop, tablet, and mobile
- β‘ Performance Optimized: Fast loading and smooth interactions
- π Real-time Updates: Instant UI updates without page refresh
Visit the live application: TaskFlow Demo
- Vanilla JavaScript (ES6+): Modern JavaScript features and syntax
- HTML5: Semantic markup
- CSS3: Custom properties, Grid, Flexbox, animations
- Webpack 5: Module bundling and asset management
- webpack-dev-server: Development server with hot reload
- webpack-merge: Configuration management for dev/prod environments
- date-fns: Modern date utility library for formatting and manipulation
- html-webpack-plugin: Automatic HTML generation
- css-loader: CSS module processing
- style-loader: Style injection
- html-loader: HTML asset handling
Before you begin, ensure you have the following installed:
- Node.js (v14 or higher)
- npm (v6 or higher)
- A modern web browser
- Git for version control
-
Clone the repository
git clone https://github.com/top-submissions/fullstackjs-todo-list.git cd fullstackjs-todo-list -
Install dependencies
npm install
-
Start development server
npm run dev
The application will open automatically at
http://localhost:8080
npm run dev # Start development server with hot reload
npm run watch # Watch mode - rebuilds on file changesnpm run build # Create optimized production build
npm run build:dev # Create development build for debuggingfullstackjs-todo-list/
βββ dist/ # Compiled output (auto-generated)
βββ docs/ # Project documentation
βββ src/
β βββ modules/
β β βββ todoLogic.js # Todo factory functions and methods
β β βββ projectLogic.js # Project management and state
β β βββ storage.js # LocalStorage persistence layer
β β βββ domController.js # DOM manipulation and UI updates
β βββ styles.css # Global styles and animations
β βββ template.html # HTML template
β βββ index.js # Application entry point
βββ .gitignore
βββ LICENSE
βββ README.md
βββ package.json
βββ webpack.common.js # Shared webpack configuration
βββ webpack.dev.js # Development webpack configuration
βββ webpack.prod.js # Production webpack configuration
The application uses factory functions for creating todos and projects, demonstrating object-oriented programming principles without classes:
// Example: Creating a todo
const todo = createTodo(
"Complete project",
"Finish the todo list app",
"2025-01-15",
"high"
);Logic is separated into distinct modules:
- todoLogic.js: Business logic for individual todos
- projectLogic.js: Project management and app state
- storage.js: Data persistence using localStorage
- domController.js: UI rendering and event handling
All data is automatically saved to localStorage:
- Survives browser refreshes and closures
- JSON serialization with method restoration
- Graceful handling of missing or corrupted data
- Click "New Project" in the sidebar
- Enter a project name
- Click "Create"
- Select a project from the sidebar
- Click "Add Task" button
- Fill in the todo details:
- Title (required)
- Description
- Due date (required)
- Priority level
- Additional notes
- Click "Save Task"
- View/Edit: Click the "View/Edit" button to modify todo details
- Complete: Mark todos as complete with the "Complete" button
- Delete: Remove todos with the "Delete" button
- Switch Projects: Click on any project in the sidebar
- Delete Project: Click the "Delete" button next to a project (requires at least 2 projects)
The application features a modern, professional design inspired by contemporary web applications:
- Gradient Backgrounds: Beautiful purple gradient backdrop
- Glass Morphism: Subtle transparency effects
- Smooth Animations: Polished transitions and hover effects
- Visual Hierarchy: Clear information architecture
- Color-Coded Priorities: Instant visual feedback
- Responsive Layout: Adapts to any screen size
The application is optimized for performance:
- Minimal JavaScript bundle size
- Efficient DOM updates
- CSS animations using GPU acceleration
- Lazy loading where applicable
- Optimized asset delivery
Data is stored locally in your browser using the Web Storage API:
- Location:
localStorageunder keytodoAppData - Format: JSON serialized objects
- Privacy: Data never leaves your device
- Inspection: View in DevTools β Application β Local Storage
The application can be tested manually:
- Create multiple projects
- Add todos with various priorities
- Edit and complete todos
- Delete todos and projects
- Refresh the page to verify persistence
- Test on different screen sizes
- Chrome (latest 2 versions)
- Firefox (latest 2 versions)
- Safari (latest 2 versions)
- Edge (latest 2 versions)
Contributions are welcome! Please feel free to submit a Pull Request. For major changes:
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project fulfills the following requirements:
- β Factory functions for todos
- β Separate application logic from DOM
- β Multiple projects/lists
- β Full CRUD operations
- β LocalStorage persistence
- β Webpack module bundling
- β Date handling with external library
- β Modern UI with priority indicators
- Drag and drop todo reordering
- Todo search and filtering
- Export/import data functionality
- Dark mode toggle
- Keyboard shortcuts
- Todo subtasks/checklists
- Calendar view
- Task reminders
This project is licensed under the MIT License - see the LICENSE file for details.
- The Odin Project - Comprehensive web development curriculum
- date-fns - Modern JavaScript date utility library
- Webpack - Module bundler
- Design inspiration from modern productivity apps
MatimotTheTimoters
- GitHub: @MatimotTheTimoters
- Repository: top-submissions/fullstackjs-todo-list
If you encounter any issues or have questions:
- Open an issue
- Check existing documentation
- Review the code comments
Made with β€οΈ as part of The Odin Project curriculum