A beautiful, feature-rich todo app with daily task tracking, automatic rollover of incomplete tasks, business day tracking, and optional category organization.
- Daily Task Board: View and manage tasks for any specific date
- Task Completion Tracking: Mark tasks as complete with visual feedback
- Automatic Rollover: Move all incomplete tasks from any past date to today with one click
- Drag Day Tracking: See how many business days (excluding weekends) a task has been pending
- Historical Logs: Browse and view what was accomplished on each day
- Progress Statistics: Real-time stats showing completed, pending, total, and dragged tasks
- Light/Dark Mode: Toggle between themes with the 🌙/☀️ button
- Theme Persistence: Your preference is saved and remembered
- Modern UI: Beautiful design with smooth animations and responsive layout
- Custom Modals: Clean confirmation dialogs (no browser alerts)
- Organize Tasks: Assign categories like Work, Personal, Misc to tasks
- Color Coded: Each category has a customizable color
- Filter by Category: View tasks by category in the sidebar or dropdown
- Manage Categories: Create, rename, and delete categories in Settings
- Toggle Feature: Enable/disable categories entirely in Settings
- Show Creation Date: Display when tasks were originally created
- Show Drag Days: Display how many days tasks have been pending
- Show Assigned Date: Display the date tasks are assigned to
- Enable Categories: Toggle the categories feature on/off
- IST Support: All dates and times use Indian Standard Time (Asia/Kolkata)
- Go 1.21 or higher
- SQLite3 (CGO enabled)
-
Clone or navigate to the project directory:
cd TodoApp -
Download dependencies:
go mod tidy
-
Run the application:
go run . -
Open your browser and navigate to:
http://localhost:8080
For faster startup without compilation:
go build -o todoapp .
./todoapp- Type your task in the input field and press Enter or click "Add Task"
- Tasks are automatically assigned to the currently selected date
- Click the checkbox next to a task to mark it as complete
- Completed tasks show with a strikethrough and green checkmark
- Use the ← Prev / Next → buttons to navigate between dates
- Use the date picker to jump to any specific date
- Click Today to quickly return to today's date
- Click "Rollover Pending" to move ALL incomplete tasks from any past date to today
- Tasks retain their creation date for accurate drag day tracking
- The Historical Logs sidebar shows dates with task activity
- Counts show tasks completed ON that day (not just assigned)
- Click any date to view details in a modal
- Go to Settings (⚙️ button)
- Enable "Enable Categories"
- Hover over any task → click 🏷️ to assign a category
- Use the filter dropdown or sidebar to view tasks by category
- Go to Settings (⚙️ button)
- Scroll to "Manage Categories" section
- Click color picker to change category color
- Edit name and press Enter to rename (confirmation modal appears)
- Click 🗑️ to delete a category
| Shortcut | Action |
|---|---|
/ |
Focus the task input field |
t |
Toggle light/dark theme |
Enter |
Confirm action in modals |
Escape |
Close any open modal |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/tasks?date=YYYY-MM-DD |
Get tasks for a specific date |
| POST | /api/tasks |
Create a new task |
| PUT | /api/tasks/{id} |
Update a task |
| DELETE | /api/tasks/{id} |
Delete a task |
| PUT | /api/tasks/{id}/complete |
Toggle task completion |
| PUT | /api/tasks/{id}/category |
Update task's category |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/daily-log?date=YYYY-MM-DD |
Get daily log with stats |
| GET | /api/dates |
Get all dates with tasks |
| GET | /api/history-summaries |
Get completion stats for all dates |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/rollover |
Rollover tasks between specific dates |
| POST | /api/rollover-all |
Rollover all past incomplete tasks to today |
| POST | /api/auto-rollover |
Auto rollover from yesterday to today |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/categories |
Get all categories with task counts |
| POST | /api/categories |
Create a new category |
| PUT | /api/categories/{id} |
Update a category |
| DELETE | /api/categories/{id} |
Delete a category |
| GET | /api/categories/{id}/tasks |
Get tasks for a category |
The app calculates "drag days" - the number of business days a task has been pending since its creation:
- Only counts weekdays (Monday-Friday)
- Excludes Saturday and Sunday
- Shows orange warning when dragging begins (1-2 days)
- Shows red critical warning when dragged 3+ days
TodoApp/
├── main.go # Application entry point and HTTP server
├── models.go # Data structures (Task, Category, DailyLog)
├── database.go # SQLite database operations & IST timezone
├── handlers.go # HTTP request handlers
├── go.mod # Go module dependencies
├── go.sum # Dependency checksums
├── todo.db # SQLite database (created on first run)
├── static/
│ └── index.html # Frontend application (HTML, CSS, JS)
└── README.md # This file
- Database: SQLite (file-based, no external server needed)
- Location:
todo.dbin the project directory - Persistence: All data persists across server restarts
- Settings: User preferences stored in browser's localStorage
Modern browsers with ES6+ support:
- Chrome (recommended)
- Firefox
- Safari
- Edge
MIT License - feel free to use and modify as needed.