TODO App
A full-featured terminal-based TODO application with reminders, built using the Textual TUI framework.
Overview
The TODO app provides a modern, interactive interface for managing tasks with categories, progress tracking, due dates, and reminder notifications.
Features
- Task Management: Create, edit, delete, and toggle tasks
- Categories: Organize tasks into customizable categories
- Progress Tracking: Track task completion percentage
- Due Dates: Set and monitor task deadlines
- Reminders: Schedule reminder notifications for tasks
- Smart Lists: Pre-built filters (All, Upcoming, Past Due, Completed)
- Desktop Notifications: Get notified when reminders are due
- Background Service: Auto-start reminder daemon at login
- Smart Icons: Automatic Nerd Font detection with emoji/text fallback
Quick Start
Launch the App
The app will open in a full-screen terminal interface with: - Left sidebar: Smart lists and categories - Center panel: Task list - Bottom bar: Keyboard shortcuts
Basic Usage
Navigate:
- ↑/↓ or j/k - Move between items
- Tab - Switch between sidebar and task list
Manage Tasks:
- n - Create new task
- e - Edit selected task
- d - Delete selected task
- Space - Toggle task completion
- r - Manage reminders for selected task
Switch Views:
- k - Show categories view (when in tasks)
- t - Show tasks view (when in categories)
Exit:
- q - Quit application
Task Management
Creating Tasks
- Press
nor type in the input box at the bottom - Fill in the task details:
- Name: Task description (required)
- Category: Select from dropdown
- Status: New, In Progress, or Completed
- Progress: 0-100%
- Due Date: YYYY-MM-DD format
- Press
SaveorEnter
Example:
Name: Complete project documentation
Category: Work
Status: In Progress
Progress: 50
Due Date: 2025-11-15
Editing Tasks
- Select a task
- Press
eto open edit screen - Modify any field
- Press
Save
Completing Tasks
Toggle Status:
- Select a task and press Space to mark as completed/incomplete
Manual Completion: - Edit the task and set Status to "Completed" or Progress to 100%
With Reminders: When completing a task that has reminders, you'll see a confirmation dialog: - Remove Reminders: Delete all reminders for the task - Keep Reminders: Complete task but keep reminders active - Cancel: Don't complete the task
Categories
Using Categories
Categories help organize tasks into logical groups. Built-in system categories: - 📝 General (default) - 💼 Work - 🏠 Personal - 📚 Study
Managing Categories
- Press
kto switch to categories view - Use the same shortcuts:
n- New categorye- Edit category (custom categories only)d- Delete category (custom categories only)t- Return to tasks view
Creating Custom Categories
- In categories view, press
n - Enter format:
CategoryName:Icon - Example:
Shopping:🛒 - Example:
Health:💪
Reminders
Setting Reminders
- Select a task
- Press
rto open reminders screen - Click
Addto create a new reminder - Enter date/time in format:
YYYY-MM-DD HH:MM - Example:
2025-11-15 09:00 - Save the reminder
Multiple Reminders: You can set multiple reminders for a single task (e.g., one day before, one hour before).
Managing Reminders
Edit:
1. Select a reminder
2. Click Edit or press e
3. Update the date/time
4. Save
Delete:
1. Select a reminder
2. Click Delete or press d
3. Confirm deletion
Reminder Notifications
When a reminder is due, you'll receive a desktop notification with: - Task name - Due date (if set) - Current progress (if > 0%)
Example Notification:
⏰ Reminder: Complete project documentation
Task: Complete project documentation
Due: 2025-11-15
Progress: 50%
Background Service
The reminder daemon runs in the background and checks for due reminders every 60 seconds.
Installing the Service
This will:
1. Copy the service file to ~/.config/systemd/user/
2. Enable auto-start at login
3. Start the service immediately
Managing the Service
Check Status:
# View service status
systemctl --user status todo-reminder.service
# Or use make target
make check-todo-service
Control Service:
# Stop service
systemctl --user stop todo-reminder.service
# Start service
systemctl --user start todo-reminder.service
# Restart service
systemctl --user restart todo-reminder.service
View Logs:
# Live logs from systemd
journalctl --user -u todo-reminder.service -f
# Or view daemon log file
tail -f ~/.config/cli_utils/logs/reminder_daemon.log
Uninstalling the Service
Smart Lists
Pre-built filters for quick task access:
All Tasks
Shows all tasks regardless of status or due date.
Upcoming
Tasks with due dates in the future.
Past Due
Tasks with due dates that have passed.
Completed
Tasks marked as completed.
Data Storage
Database Location
The app uses SQLite for data storage. All tasks, categories, and reminders are stored locally.
Log Files
Daemon activity, notifications sent, and errors are logged here.
Backup
To backup your tasks:
# Copy the database file
cp ~/.config/cli_utils/todo.db ~/backup/todo_backup.db
# Restore from backup
cp ~/backup/todo_backup.db ~/.config/cli_utils/todo.db
Keyboard Reference
Global
q- Quit application↑/↓- Navigate up/downEnter- Select itemEsc- Cancel input
Task View
n- New taske- Edit taskd- Delete taskSpace- Toggle completionr- Manage remindersk- Switch to categories
Category View
n- New categorye- Edit categoryd- Delete categoryt- Switch to tasks
Examples
Daily Workflow
Morning Setup:
# Launch app
cli-utils local system-info todo
# Review upcoming tasks (click "Upcoming" in sidebar)
# Set reminders for important tasks (press 'r')
# Update progress on ongoing tasks (press 'e')
During the Day:
- Receive reminder notifications
- Toggle tasks as complete (press Space)
- Add new tasks as they come up (press n)
End of Day: - Review completed tasks (click "Completed") - Plan tomorrow's tasks - Set reminders for morning tasks
Project Management Example
- Create Project Category:
- Press
kfor categories -
Press
nand enter:MyProject:📊 -
Add Project Tasks:
-
Set Reminders:
- Day before each due date at 9:00 AM
-
Morning of due date at 8:00 AM
-
Track Progress:
- Update progress percentage as you work
- Toggle to completed when done
Tips and Tricks
Efficient Task Entry
Type directly in the input box at bottom of screen. The app will open the edit screen with the name pre-filled.
Keyboard-First Workflow
All operations can be performed with keyboard shortcuts - no mouse needed!
Reminder Strategy
- Set reminders 24 hours before for important tasks
- Set reminders 1 hour before for time-sensitive tasks
- Use multiple reminders for critical deadlines
Progress Tracking
- Use 0% for not started
- Use 25%, 50%, 75% for active tasks
- Use 100% to auto-complete tasks
Category Colors
Use emojis in category names for visual distinction: - 🔥 Urgent - ⭐ Priority - 📅 Scheduled - 💡 Ideas
Troubleshooting
Notifications Not Working
Check if notify-send is installed:
Check service status:
View daemon logs:
Service Won't Start
Check journalctl:
Common issues:
- Python environment not found: Ensure uv is installed
- Project path incorrect: Reinstall with make install-todo-service
- Database permissions: Check ~/.config/cli_utils/todo.db permissions
Database Issues
Reset database (WARNING: deletes all data):
Icons Showing Emoji Instead of Nerd Fonts
If you see emoji (👤 💼 ✅) instead of Nerd Font icons:
For new categories (created after icon system install): 1. Check if Nerd Fonts are installed:
- Ensure your terminal is using a Nerd Font
- Restart the terminal and app
For existing categories (created before icon system):
Categories store their icons in the database. To migrate emoji to Nerd Fonts:
This will convert all emoji icons to their Nerd Font equivalents while preserving category data.
What the migration does: - Updates Personal (👤 → ) - Updates Work (💼 → ) - Updates any custom categories with emoji icons - Safe to run multiple times
Architecture
Components
Main App (todo_app.py) - Textual TUI application - Task and category views - Sidebar navigation
Database (database.py) - SQLite backend - Task, category, and reminder storage - Notification tracking
Reminder Daemon (reminder_daemon.py) - Background service - 60-second check interval - Plugin-based notification system
Notification Plugins - Base plugin architecture - Desktop notification plugin (notify-send) - Extensible for email, SMS, etc.
Technology Stack
- UI Framework: Textual (Python TUI framework)
- Database: SQLite3
- CLI Framework: Typer
- Service Manager: systemd (Linux)
- Notifications: notify-send (Linux desktop)
Future Enhancements
Potential features for future development:
- Additional Notification Plugins: Email, SMS, webhook
- Task Priorities: High, medium, low priority levels
- Subtasks: Break down tasks into smaller steps
- Tags: Cross-category task organization
- Search: Find tasks by name, date, or content
- Recurring Tasks: Automatic task creation on schedule
- Export/Import: JSON/CSV export for backup
- Task Dependencies: Link tasks with prerequisites
- Time Tracking: Log time spent on tasks
- Reports: Generate productivity reports
Contributing
The TODO app is part of the CLI Utils project. To contribute:
- Source code:
src/cli_utils/commands/local/system_info/_todo_app/ - Follow the project's contribution guidelines
- Add tests for new features
- Update documentation
See Also
- Command Reference - All CLI commands
- Quick Reference - Quick command guide
- Makefile Reference - Build automation