# ivanerricis/easytask-tauri architecture

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

- Interactive diagram: https://gitdiagram.com/ivanerricis/easytask-tauri
- Repository: https://github.com/ivanerricis/easytask-tauri

## Overview

EasyTask is a local-first desktop task manager organized around workspaces and hierarchical notes. The user journey starts on the workspace home page, opens a workspace, then works in notes containing groups, sections, and nested tasks; edits are persisted locally. Major README capabilities include automation, templates, audio, archive/trash, search, undo, import/export, and customization. The graph includes those product areas, but several links are documented rather than verified from sampled implementation; unsampled subsystems are represented by their existing directories.

Main entry points: [`src/pages/workspacePage/WorkSpacePage.tsx`](https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/WorkSpacePage.tsx) (Workspace view), [`src/pages/workspacePage/components/groups/GroupTasks.tsx`](https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/groups/GroupTasks.tsx) (Tasks and groups), [`src/main.tsx`](https://github.com/ivanerricis/easytask-tauri/blob/master/src/main.tsx) (App startup and routing), [`src/App.tsx`](https://github.com/ivanerricis/easytask-tauri/blob/master/src/App.tsx) (Provider shell)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop app"]
  node_runtime["App startup and routing<br/>[main.tsx]"]
  node_shell["Provider shell<br/>[App.tsx]"]
  node_settings["Preferences and themes"]
end

subgraph group_workspace["Workspace and notes"]
  node_home["Workspace home<br/>[MainPage.tsx]"]
  node_workspaceview["Workspace view<br/>[WorkSpacePage.tsx]"]
  node_sidebar["Workspace tree<br/>[FileTree.tsx]"]
  node_noteview["Notes and panes<br/>[Note.tsx]"]
  node_workspacecontext["Workspace state<br/>[provider.tsx]"]
end

subgraph group_taskdata["Task operations"]
  node_taskview["Tasks and groups<br/>[GroupTasks.tsx]"]
  node_taskselection["Task selection<br/>[task-selection.ts]"]
  node_notetree["Note tree operations<br/>[note-tree-ops.ts]"]
  node_undo["Undo and redo<br/>[stack.ts]"]
end

subgraph group_extras["Product features"]
  node_automation["Automation rules"]
  node_templates["Templates<br/>[templates.ts]"]
  node_search["Note search"]
  node_archive["Archive and trash<br/>[trash.ts]"]
  node_transfer["Workspace transfer"]
  node_audio["Audio playback"]
end

subgraph group_persistence["Local persistence"]
  node_backup["Backups<br/>[backup.ts]"]
  node_dbmanager["Database manager<br/>[dbManager.ts]"]
  node_taskqueries["Task queries<br/>[task.ts]"]
  node_database[("SQLite database<br/>[dbManager.ts]")]
end

node_user(("User"))

node_user -->|"launches"| node_runtime
node_runtime -->|"renders"| node_shell
node_shell -->|"routes home"| node_home
node_shell -->|"routes workspace"| node_workspaceview
node_user -->|"chooses workspace"| node_home
node_home -->|"opens workspace"| node_workspaceview
node_workspaceview -->|"shows hierarchy"| node_sidebar
node_workspaceview -->|"opens notes"| node_noteview
node_noteview -->|"shows tasks"| node_taskview
node_user -->|"edits tasks"| node_taskview
node_taskview -->|"loads tasks"| node_taskqueries
node_taskqueries -->|"queries"| node_database
node_workspacecontext -.->|"persists workspace data"| node_database
node_taskview -.->|"updates note tree"| node_notetree
node_taskselection -.->|"supports undoable edits"| node_undo
node_user -->|"configures rules"| node_automation
node_automation -->|"applies rule actions"| node_notetree
node_automation -->|"writes rule changes"| node_taskqueries
node_user -->|"creates from templates"| node_templates
node_user -->|"searches notes"| node_search
node_user -->|"restores or deletes"| node_archive
node_user -->|"imports or exports"| node_transfer
node_user -->|"plays attached audio"| node_audio
node_runtime -->|"starts backup"| node_backup
node_backup -->|"uses database"| node_dbmanager
node_dbmanager -->|"opens SQLite"| node_database
node_user -->|"customizes app"| node_settings

click node_runtime "https://github.com/ivanerricis/easytask-tauri/blob/master/src/main.tsx"
click node_shell "https://github.com/ivanerricis/easytask-tauri/blob/master/src/App.tsx"
click node_home "https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/mainPage/MainPage.tsx"
click node_workspaceview "https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/WorkSpacePage.tsx"
click node_sidebar "https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/sidebar/FileTree.tsx"
click node_noteview "https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/note/Note.tsx"
click node_taskview "https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/groups/GroupTasks.tsx"
click node_taskselection "https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/tasks/task-selection.ts"
click node_workspacecontext "https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/workspace-data/provider.tsx"
click node_notetree "https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/note-tree-ops.ts"
click node_undo "https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/undo/stack.ts"
click node_automation "https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/automations-context.tsx"
click node_templates "https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/workspace-data/templates.ts"
click node_search "https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/note-search-context.tsx"
click node_archive "https://github.com/ivanerricis/easytask-tauri/blob/master/src/db/queries/trash.ts"
click node_transfer "https://github.com/ivanerricis/easytask-tauri/blob/master/src/lib/workspace-transfer.ts"
click node_audio "https://github.com/ivanerricis/easytask-tauri/blob/master/src/components/draggable-audio-player.tsx"
click node_settings "https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/preferences-context.tsx"
click node_backup "https://github.com/ivanerricis/easytask-tauri/blob/master/src/db/backup.ts"
click node_dbmanager "https://github.com/ivanerricis/easytask-tauri/blob/master/src/db/dbManager.ts"
click node_taskqueries "https://github.com/ivanerricis/easytask-tauri/blob/master/src/db/queries/task.ts"
click node_database "https://github.com/ivanerricis/easytask-tauri/blob/master/src/db/dbManager.ts"

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_runtime,node_shell,node_settings,node_user toneBlue
class node_home,node_workspaceview,node_sidebar,node_noteview,node_workspacecontext toneAmber
class node_taskview,node_taskselection,node_notetree,node_undo toneMint
class node_automation,node_templates,node_search,node_archive,node_transfer,node_audio toneRose
class node_backup,node_dbmanager,node_taskqueries,node_database toneIndigo
```

## Components

### Desktop app

- [App startup and routing](https://github.com/ivanerricis/easytask-tauri/blob/master/src/main.tsx): `src/main.tsx`
- [Provider shell](https://github.com/ivanerricis/easytask-tauri/blob/master/src/App.tsx): `src/App.tsx`
- [Preferences and themes](https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/preferences-context.tsx): `src/contexts/preferences-context.tsx`

### Workspace and notes

- [Workspace home](https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/mainPage/MainPage.tsx): `src/pages/mainPage/MainPage.tsx`
- [Workspace view](https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/WorkSpacePage.tsx): `src/pages/workspacePage/WorkSpacePage.tsx`
- [Workspace tree](https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/sidebar/FileTree.tsx): `src/pages/workspacePage/components/sidebar/FileTree.tsx`
- [Notes and panes](https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/note/Note.tsx): `src/pages/workspacePage/components/note/Note.tsx`
- [Workspace state](https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/workspace-data/provider.tsx): `src/contexts/workspace-data/provider.tsx`

### Task operations

- [Tasks and groups](https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/groups/GroupTasks.tsx): `src/pages/workspacePage/components/groups/GroupTasks.tsx`
- [Task selection](https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/tasks/task-selection.ts): `src/pages/workspacePage/components/tasks/task-selection.ts`
- [Note tree operations](https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/note-tree-ops.ts): `src/contexts/note-tree-ops.ts`
- [Undo and redo](https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/undo/stack.ts): `src/contexts/undo/stack.ts`

### Product features

- [Automation rules](https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/automations-context.tsx): `src/contexts/automations-context.tsx`
- [Templates](https://github.com/ivanerricis/easytask-tauri/blob/master/src/contexts/workspace-data/templates.ts): `src/contexts/workspace-data/templates.ts`
- [Note search](https://github.com/ivanerricis/easytask-tauri/blob/master/src/pages/workspacePage/components/note-search-context.tsx): `src/pages/workspacePage/components/note-search-context.tsx`
- [Archive and trash](https://github.com/ivanerricis/easytask-tauri/blob/master/src/db/queries/trash.ts): `src/db/queries/trash.ts`
- [Workspace transfer](https://github.com/ivanerricis/easytask-tauri/blob/master/src/lib/workspace-transfer.ts): `src/lib/workspace-transfer.ts`
- [Audio playback](https://github.com/ivanerricis/easytask-tauri/blob/master/src/components/draggable-audio-player.tsx): `src/components/draggable-audio-player.tsx`

### Local persistence

- [Backups](https://github.com/ivanerricis/easytask-tauri/blob/master/src/db/backup.ts): `src/db/backup.ts`
- [Database manager](https://github.com/ivanerricis/easytask-tauri/blob/master/src/db/dbManager.ts): `src/db/dbManager.ts`
- [Task queries](https://github.com/ivanerricis/easytask-tauri/blob/master/src/db/queries/task.ts): `src/db/queries/task.ts`
- [SQLite database](https://github.com/ivanerricis/easytask-tauri/blob/master/src/db/dbManager.ts): `src/db/dbManager.ts`

### Other components

- **User**

## Connections

- User → App startup and routing: launches (evidence: `README.md`)
- App startup and routing → Provider shell: renders (evidence: `src/main.tsx`)
- Provider shell → Workspace home: routes home (evidence: `src/App.tsx`)
- Provider shell → Workspace view: routes workspace (evidence: `src/App.tsx`)
- User → Workspace home: chooses workspace (evidence: `README.md`)
- Workspace home → Workspace view: opens workspace (evidence: `README.md`)
- Workspace view → Workspace tree: shows hierarchy (evidence: `README.md`)
- Workspace view → Notes and panes: opens notes (evidence: `README.md`)
- Notes and panes → Tasks and groups: shows tasks (evidence: `README.md`)
- User → Tasks and groups: edits tasks (evidence: `README.md`)
- Tasks and groups → Task queries: loads tasks (evidence: `src/pages/workspacePage/components/groups/GroupTasks.tsx`)
- Task queries → SQLite database: queries (evidence: `src/db/queries/task.ts`)
- Workspace state → SQLite database: persists workspace data
- Tasks and groups → Note tree operations: updates note tree
- Task selection → Undo and redo: supports undoable edits
- User → Automation rules: configures rules (evidence: `README.md`)
- Automation rules → Note tree operations: applies rule actions (evidence: `src/contexts/automations-context.tsx`)
- Automation rules → Task queries: writes rule changes (evidence: `src/contexts/automations-context.tsx`)
- User → Templates: creates from templates (evidence: `README.md`)
- User → Note search: searches notes (evidence: `README.md`)
- User → Archive and trash: restores or deletes (evidence: `README.md`)
- User → Workspace transfer: imports or exports (evidence: `README.md`)
- User → Audio playback: plays attached audio (evidence: `README.md`)
- App startup and routing → Backups: starts backup (evidence: `src/main.tsx`)
- Backups → Database manager: uses database (evidence: `src/db/backup.ts`)
- Database manager → SQLite database: opens SQLite (evidence: `src/db/dbManager.ts`)
- User → Preferences and themes: customizes app (evidence: `README.md`)
