Daily Planner is a small Windows desktop planner that prompts you at a fixed interval to review today's tasks.
It is built with Python's standard tkinter GUI toolkit. Optional tray support is provided by pystray and Pillow.
- Daily task planning with one task per line.
- Automatic carry-over of unfinished tasks from yesterday.
- Click a task row to toggle completed / pending.
- Periodic reminder popup with configurable interval.
- Recent completion summary chart.
- Light / dark theme switch.
- Optional Windows autostart.
- Single-instance guard to avoid launching duplicate app instances.
pip install -r requirements.txtpython main.pyTask data is stored as JSON files in the project-level data/ directory:
data/
YYYY-MM-DD.json
Each file contains the plan for one day:
{
"date": "2026-04-30",
"tasks": [
{
"id": 1777534881306,
"text": "Example task",
"done": false,
"created_at": "2026-04-30T15:41:21.306586",
"completed_at": null
}
]
}planner/
main.py # Application entry point
planner.ico # App icon
requirements.txt
app/
config.py # App constants and paths
resources.py # Resource path helper for dev / PyInstaller
storage.py # JSON file persistence
models.py # Task dict construction helpers
task_service.py # Task business operations
state.py # Runtime app state
autostart.py # Windows registry autostart
single_instance.py # Single-instance lock
ui/
main_window.py
plan_window.py
reminder_window.py
summary_window.py
interval_window.py
theme.py
data/ # Runtime task data, ignored by git
main.pyonly starts the application.- UI modules under
app/ui/handle presentation and user interaction. app/task_service.pyowns task operations such as replacing the daily plan and toggling completion.app/storage.pyonly reads and writes JSON files.app/state.pykeeps runtime-only state such as the active timer, selected theme, and main window reference.
Install PyInstaller if needed:
pip install pyinstallerBuild:
pyinstaller --noconsole --onefile -i planner.ico --add-data "planner.ico;." main.pyThe generated executable will be written to dist/.