# pdevjn/todoapp architecture

> Architecture diagram of the GitHub repository pdevjn/todoapp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pdevjn/todoapp
- Repository: https://github.com/pdevjn/todoapp

## Overview

todoapp is a native-window TODO and time-tracking app. Users manage scheduled items and categories, start/stop execution timers, then review logs, calendar history, and daily summaries. The documented workflow is backed by a domain service and JSON persistence; configuration and cached holidays are separate concerns. UI construction and several service calls are visible in excerpts, but some wiring and feature implementations were not sampled, so uncertain relationships are omitted.

Main entry points: [`src/todoapp/main.py`](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/main.py) (Native app entry), [`src/todoapp/domain/service.py`](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/domain/service.py) (Todo service), [`src/todoapp/ui/log_view.py`](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/log_view.py) (Work log), [`src/todoapp/ui/main_view.py`](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/main_view.py) (Main panel)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["App interface"]
  node_entry["Native app entry<br/>[main.py]"]
  node_mainview["Main panel<br/>[main_view.py]"]
  node_listview["Item editor<br/>[list_view.py]"]
  node_keyboard["Keyboard controls<br/>[keyboard.py]"]
  node_state["View state<br/>[app_state.py]"]
  node_log["Work log<br/>[log_view.py]"]
  node_timeline["History calendar"]
  node_calendar["Calendar view<br/>[calendar_view.py]"]
  node_summary["Daily summaries"]
  node_categoryui["Category dialogs"]
  node_itemdialogs["Item dialogs<br/>[edit_dialog.py]"]
  node_recordedit["Record editor"]
  node_js["Browser handlers<br/>[js_handlers.py]"]
end

subgraph group_domain["Task domain"]
  node_service["Todo service<br/>[service.py]"]
  node_models["Task and records<br/>[models.py]"]
  node_layout["Record layout<br/>[record_layout.py]"]
end

subgraph group_storage["Persistence"]
  node_todojson[("Todo JSON store<br/>[json_repository.py]")]
  node_config[("App settings")]
end

subgraph group_support["Calendar support"]
  node_holidayrepo[("Holiday cache")]
end

node_user(("User"))
node_holidayapi["Holiday CSV source"]

node_user -->|"launches"| node_entry
node_entry -->|"builds"| node_mainview
node_entry -->|"builds"| node_listview
node_entry -->|"builds"| node_log
node_entry -->|"wires"| node_calendar
node_entry -->|"builds"| node_timeline
node_entry -->|"builds"| node_summary
node_entry -->|"builds"| node_categoryui
node_entry -->|"builds"| node_itemdialogs
node_entry -->|"builds"| node_recordedit
node_mainview -->|"queries"| node_service
node_listview -->|"queries"| node_service
node_keyboard -->|"dispatches"| node_service
node_keyboard -->|"updates"| node_state
node_mainview -->|"updates"| node_state
node_log -->|"queries"| node_service
node_log -->|"opens"| node_timeline
node_calendar -->|"queries"| node_service
node_summary -->|"aggregates"| node_service
node_categoryui -->|"manages"| node_service
node_itemdialogs -->|"edits"| node_service
node_recordedit -->|"edits"| node_service
node_log -->|"uses"| node_js
node_categoryui -->|"uses"| node_js
node_timeline -->|"uses"| node_layout
node_service -->|"manipulates"| node_models
node_service -->|"loads and saves"| node_todojson
node_entry -->|"configures"| node_config
node_entry -->|"loads and saves"| node_holidayrepo
node_entry -->|"fetches CSV"| node_holidayapi

click node_entry "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/main.py"
click node_mainview "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/main_view.py"
click node_listview "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/list_view.py"
click node_keyboard "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/keyboard.py"
click node_state "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/app_state.py"
click node_log "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/log_view.py"
click node_timeline "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/record_timeline_dialog.py"
click node_calendar "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/calendar_view.py"
click node_summary "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/category_summary_dialog.py"
click node_categoryui "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/category_list_dialog.py"
click node_itemdialogs "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/edit_dialog.py"
click node_recordedit "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/record_edit_dialog.py"
click node_js "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/js_handlers.py"
click node_service "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/domain/service.py"
click node_models "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/domain/models.py"
click node_layout "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/domain/record_layout.py"
click node_todojson "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/repository/json_repository.py"
click node_config "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/repository/config_repository.py"
click node_holidayrepo "https://github.com/pdevjn/todoapp/blob/main/src/todoapp/repository/holiday_repository.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_entry,node_mainview,node_listview,node_keyboard,node_state,node_log,node_timeline,node_calendar,node_summary,node_categoryui,node_itemdialogs,node_recordedit,node_js,node_user toneBlue
class node_service,node_models,node_layout toneAmber
class node_todojson,node_config toneMint
class node_holidayrepo toneRose
class node_holidayapi toneIndigo
```

## Components

### App interface

- [Native app entry](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/main.py): `src/todoapp/main.py`
- [Main panel](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/main_view.py): `src/todoapp/ui/main_view.py`
- [Item editor](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/list_view.py): `src/todoapp/ui/list_view.py`
- [Keyboard controls](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/keyboard.py): `src/todoapp/ui/keyboard.py`
- [View state](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/app_state.py): `src/todoapp/ui/app_state.py`
- [Work log](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/log_view.py): `src/todoapp/ui/log_view.py`
- [History calendar](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/record_timeline_dialog.py): `src/todoapp/ui/record_timeline_dialog.py`
- [Calendar view](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/calendar_view.py): `src/todoapp/ui/calendar_view.py`
- [Daily summaries](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/category_summary_dialog.py): `src/todoapp/ui/category_summary_dialog.py`
- [Category dialogs](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/category_list_dialog.py): `src/todoapp/ui/category_list_dialog.py`
- [Item dialogs](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/edit_dialog.py): `src/todoapp/ui/edit_dialog.py`
- [Record editor](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/record_edit_dialog.py): `src/todoapp/ui/record_edit_dialog.py`
- [Browser handlers](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/ui/js_handlers.py): `src/todoapp/ui/js_handlers.py`

### Task domain

- [Todo service](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/domain/service.py): `src/todoapp/domain/service.py`
- [Task and records](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/domain/models.py): `src/todoapp/domain/models.py`
- [Record layout](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/domain/record_layout.py): `src/todoapp/domain/record_layout.py`

### Persistence

- [Todo JSON store](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/repository/json_repository.py): `src/todoapp/repository/json_repository.py`
- [App settings](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/repository/config_repository.py): `src/todoapp/repository/config_repository.py`

### Calendar support

- [Holiday cache](https://github.com/pdevjn/todoapp/blob/main/src/todoapp/repository/holiday_repository.py): `src/todoapp/repository/holiday_repository.py`

### Other components

- **User**
- **Holiday CSV source**

## Connections

- User → Native app entry: launches (evidence: `README.md`)
- Native app entry → Main panel: builds (evidence: `src/todoapp/main.py`)
- Native app entry → Item editor: builds (evidence: `src/todoapp/main.py`)
- Native app entry → Work log: builds (evidence: `src/todoapp/main.py`)
- Native app entry → Calendar view: wires (evidence: `src/todoapp/main.py`)
- Native app entry → History calendar: builds (evidence: `src/todoapp/main.py`)
- Native app entry → Daily summaries: builds (evidence: `src/todoapp/main.py`)
- Native app entry → Category dialogs: builds (evidence: `src/todoapp/main.py`)
- Native app entry → Item dialogs: builds (evidence: `src/todoapp/main.py`)
- Native app entry → Record editor: builds (evidence: `src/todoapp/main.py`)
- Main panel → Todo service: queries (evidence: `src/todoapp/ui/main_view.py`)
- Item editor → Todo service: queries (evidence: `src/todoapp/ui/list_view.py`)
- Keyboard controls → Todo service: dispatches (evidence: `src/todoapp/ui/keyboard.py`)
- Keyboard controls → View state: updates (evidence: `src/todoapp/ui/keyboard.py`)
- Main panel → View state: updates (evidence: `src/todoapp/ui/main_view.py`)
- Work log → Todo service: queries (evidence: `src/todoapp/ui/log_view.py`)
- Work log → History calendar: opens (evidence: `src/todoapp/ui/log_view.py`)
- Calendar view → Todo service: queries (evidence: `src/todoapp/ui/calendar_view.py`)
- Daily summaries → Todo service: aggregates (evidence: `src/todoapp/ui/category_summary_dialog.py`)
- Category dialogs → Todo service: manages (evidence: `src/todoapp/ui/category_list_dialog.py`)
- Item dialogs → Todo service: edits (evidence: `src/todoapp/ui/edit_dialog.py`)
- Record editor → Todo service: edits (evidence: `src/todoapp/ui/record_edit_dialog.py`)
- Work log → Browser handlers: uses (evidence: `src/todoapp/ui/log_view.py`)
- Category dialogs → Browser handlers: uses (evidence: `src/todoapp/ui/category_list_dialog.py`)
- History calendar → Record layout: uses (evidence: `src/todoapp/ui/record_timeline_dialog.py`)
- Todo service → Task and records: manipulates (evidence: `src/todoapp/domain/service.py`)
- Todo service → Todo JSON store: loads and saves (evidence: `src/todoapp/domain/service.py`)
- Native app entry → App settings: configures (evidence: `src/todoapp/main.py`)
- Native app entry → Holiday cache: loads and saves (evidence: `src/todoapp/main.py`)
- Native app entry → Holiday CSV source: fetches CSV (evidence: `src/todoapp/main.py`)
