6.2 KiB
iny-Todo
A modern, feature-rich todo list application built with Express.js and vanilla JavaScript. This application provides a clean interface for managing your daily tasks with persistent storage and an intuitive drag-and-drop reordering system.
Built with AI Assistants: This entire application was developed as an experiment to test the capabilities of locally hosted LLMs running on consumer-grade hardware. Using agentic coding techniques, every line of code was generated through iterative agent interactions without any cloud-based APIs or external AI services. This demonstrates what's possible with AI-assisted software development workflows running entirely on personal machines.
Features
Core Functionality
- Create Todos: Add new tasks with a simple input field
- View Todos: See all your tasks in a clean, organized list
- Edit Todos: Click on any todo text to edit it inline
- Complete Tasks: Check off items as you finish them
- Delete Todos: Remove completed or unwanted tasks
- Drag & Drop Reordering: Reorganize your tasks by dragging and dropping them into your preferred order
User Experience
- Dark/Light Mode Toggle: Switch between dark and light themes with a single click
- Customizable Title: Click on the "Todo List" title to rename it
- Visual Indicators: Clear visual feedback when dragging items to reorder
- Responsive Design: Clean, modern interface that adapts to your preferences
Technical Features
- Persistent Storage: All todos are saved to a
todos.jsonfile, so your data persists between sessions - RESTful API: Full REST API endpoints for external integration
- CORS Enabled: Supports cross-origin requests for potential mobile or web app integrations
- Auto-Initialization: Automatically creates the storage file if it doesn't exist
Technologies Used
- Backend: Node.js with Express.js v5.2.1
- Frontend: Vanilla JavaScript, HTML5, CSS3
- Storage: File-based JSON storage
- Styling: CSS Variables for theming support
Prerequisites
Before you begin, ensure you have the following installed:
- Node.js (v14 or higher recommended)
- npm (comes bundled with Node.js)
Installation & Setup
1. Clone or Download the Project
Make sure you have all the project files in your directory:
project/
├── server.js
├── index.html
├── package.json
└── todos.json (created automatically)
2. Install Dependencies
Navigate to the project directory and run:
npm install
This will install the required dependencies:
express- Web framework for Node.jscors- Middleware for enabling CORS
3. Start the Server
Run the server with:
node server.js
You should see the following message:
Todo API server running at http://localhost:3000
4. Access the Application
Open your web browser and navigate to:
http://localhost:3000
Usage Guide
Adding a New Todo
- Type your task in the input field labeled "What needs to be done?"
- Click the "Add" button or press Enter
- Your new todo will appear in the list
Marking a Todo as Complete
- Click the checkbox to the left of any todo to toggle its completion status
- Completed items will have a strikethrough text style
Editing a Todo
- Click directly on the todo text you want to edit
- The text will become an editable input field
- Type your changes and press Enter or click outside to save
Deleting a Todo
- Click the delete button on the right side of any todo to remove it
Reordering Todos
- Click and hold on the drag handle (⋮⋮) on the left side of any todo
- Drag the todo to your desired position
- You'll see visual indicators showing where the item will be inserted
- Release to drop the todo in its new position
Dark Mode Toggle
- Click the moon/sun icon in the top-right corner to switch between dark and light themes
- Your theme preference is saved automatically
Changing the Title
- Click on the "Todo List" title at the top of the page
- Type your custom title
- Press Enter or click outside to save
API Endpoints
The application provides a RESTful API for programmatic access:
Get All Todos
GET /todos
Returns all todos as a JSON array.
Create a Todo
POST /todos
Content-Type: application/json
{
"text": "Your todo text here"
}
Creates a new todo and returns it with an assigned ID.
Update a Todo
PUT /todos/:id
Content-Type: application/json
{
"text": "Updated text (optional)",
"completed": true (optional)
}
Updates the specified todo by ID.
Delete a Todo
DELETE /todos/:id
Deletes the todo with the specified ID.
Reorder Todos
POST /reorder
Content-Type: application/json
{
"order": [1, 2, 3]
}
Reorders todos based on the array of IDs provided.
File Structure
project/
├── server.js # Express.js backend server
├── index.html # Frontend HTML with embedded CSS and JavaScript
├── package.json # Node.js dependencies
└── todos.json # Persistent storage file (auto-created)
Data Storage
All todo data is stored in a todos.json file in the project root directory. This file is:
- Automatically created on first run if it doesn't exist
- Updated after every create, update, delete, or reorder operation
- Persisted even after server restart
Default Port
The application runs on port 3000 by default. You can change this by modifying the PORT constant in server.js.
Troubleshooting
Common Issues
Port already in use: If port 3000 is already occupied, either:
- Stop the process using port 3000
- Change the
PORTvariable inserver.jsto a different value
Todos not persisting:
Check that the todos.json file has write permissions in your project directory.
Dependencies not installed:
Run npm install again to ensure all dependencies are properly installed.
License
This project is provided as-is for educational and personal use.
Future Enhancements
Potential features for future versions:
- Category/tags support
- Due dates and reminders
- Priority levels
- Search and filter functionality
- Export/import todos
- Cloud synchronization