Task Tracker is a local-first productivity and fitness tracker built with Flask, Jinja templates, HTMX, and CSV-backed persistence. It combines task management, time-sensitive planning, workouts, lightweight analytics, and a few optional local integrations without requiring a database.
- manage tasks and subtasks grouped by annotation
- shortlist actionable items manually or automatically
- track
Time Sensitivetasks with dates, optional times, recurrence, and a calendar strip - sync selected
Time Sensitivetasks to macOS Calendar.app - log workouts and view cumulative calorie analytics
- keep data in daily CSV snapshots with optional mirrored backups
- Python 3.9+
pip- optional: Playwright for browser smoke tests
- optional: Bring! credentials for shopping-list sync
- optional: macOS for Calendar sync, Notes export, startup script, and app bundle
./setup.shManual setup also works:
python3 -m venv .venv
./.venv/bin/python -m pip install --upgrade pip
./.venv/bin/python -m pip install -r requirements.txtFor browser smoke-test support:
./setup.sh --devDirect Python launch:
./.venv/bin/python app.pyStartup script:
./scripts/startup.shThe app runs at http://127.0.0.1:7463.
On macOS you can also open Task Tracker.app after running setup.
This app bundle is currently a convenience launcher for a configured repo checkout, not a fully self-contained packaged app. In practice that means:
- run
./setup.shfirst - keep the repository files in place
- use the app bundle as an alternative to
python app.pyor./scripts/startup.sh
Use direct Python launch rather than the macOS app bundle or shell scripts.
In PowerShell:
python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python app.pyThen open http://127.0.0.1:7463.
- create, complete, delete, and reorder tasks
- expand and collapse subtask panels
- manually shortlist subtasks
- auto-shortlist due-soon
Time Sensitiveitems - persisted dark mode preference
- dedicated
Time Sensitiveannotation - due date and optional due time
- recurrence options: daily, every two days, weekly, biweekly, monthly
- 7-day and 28-day calendar strip views
- manual Calendar.app sync for selected items
- macOS Calendar.app integration via AppleScript
- calendar picker, including a dedicated
Task Trackercalendar option - date-only tasks default to
9:00 AMto10:00 AM - reminders at
30and5minutes before - completion renames linked events to
[Done] ... - deletion removes linked events
- home workout logging with per-set tracking
- basketball logging by duration
- gym pull-ups by reps and sets
- rowing by distance
- cumulative calorie chart over time
Best-supported platform. This includes:
- core Flask app
- Calendar sync
- Notes export helper
- startup script
Task Tracker.app
The core web app should run with direct Python launch. These should work or be close to working:
- tasks, subtasks, shortlist
- workouts and analytics
- Bring integration, assuming dependencies are installed
These remain macOS-specific:
- Calendar sync in
services/calendar_service.py - Notes export in
scripts/maintenance/export_to_notes.py Task Tracker.appscripts/startup.sh
Similar to Windows: the core Flask app is the realistic target, while macOS-specific integrations are unavailable.
Core suite:
python3 -m pytest -qOptional browser smoke tests:
python3 -m pytest -q tests/test_ui_smoke.pyTask_Tracker/
├── app.py
├── config.py
├── docs/
├── models/
├── routes/
├── scripts/
├── services/
├── static/
├── templates/
├── tests/
└── README.md
Key locations:
models/tasks.py: task and subtask persistence and behaviormodels/workouts.py: workout persistence and calorie modelroutes/tasks.py: tasks, shortlist, time-sensitive planning, Calendar syncroutes/workouts.py: workout routes and HTMX refresh flowroutes/analytics.py: task and workout chart endpointsservices/calendar_service.py: macOS Calendar bridgedocs/plans/: roadmap and feature plansdocs/summaries/: architecture and feature summariesscripts/maintenance/: one-off maintenance helpersscripts/recovery/: storage and sync recovery helpers
Bring! sync is routed through scripts/bring_sync.py. To configure it:
python3 scripts/setup_bring.pyThe Notes export helper is separate from the main Flask app:
python3 scripts/maintenance/export_to_notes.pyThe app writes daily CSV snapshots for:
- tasks
- subtasks
- workouts
- workout sets
It also supports:
- a primary data directory
- an optional mirrored backup directory
- pre-push protection against accidentally staging personal log CSVs