# pandorareads/apex-dashboard architecture

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

- Interactive diagram: https://gitdiagram.com/pandorareads/apex-dashboard
- Repository: https://github.com/pandorareads/apex-dashboard

## Overview

Apex Dashboard is an Obsidian workspace plugin: users open a dashboard backed by a Markdown workspace file, then arrange sections and widgets to capture notes, manage tasks, query Vault content, and track personal activities. The graph emphasizes documented dashboard and sidebar capabilities, plus the DQL execution layer and task/calendar scanning. README documentation supports several capability branches whose individual wiring was not sampled; those are shown at subsystem level rather than with speculative call chains.

Main entry points: [`src/main.ts`](https://github.com/pandorareads/apex-dashboard/blob/main/src/main.ts) (Sidebar Widgets), [`src/renderer.ts`](https://github.com/pandorareads/apex-dashboard/blob/main/src/renderer.ts) (Section Renderer), [`src/view.ts`](https://github.com/pandorareads/apex-dashboard/blob/main/src/view.ts) (Dashboard View), [`src/dataview-section.ts`](https://github.com/pandorareads/apex-dashboard/blob/main/src/dataview-section.ts) (DQL Data View)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Dashboard Core"]
  node_plugin["Plugin Lifecycle<br/>[main.ts]"]
  node_dashboard["Dashboard View<br/>[view.ts]"]
  node_renderer["Section Renderer<br/>[renderer.ts]"]
  node_workspace["Workspace Markdown"]
  node_settings["Settings<br/>[settings.ts]"]
end

subgraph group_sections["Workspace Sections"]
  node_memo["Memo and Notes<br/>[memo-note.ts]"]
  node_projects["Projects and Library<br/>[library-section.ts]"]
  node_calendar["Calendar Sections"]
  node_taskscan["Vault Task Scan<br/>[alltasks-scan.ts]"]
  node_web["Embedded Web<br/>[web-section.ts]"]
end

subgraph group_widgets["Sidebar Widgets"]
  node_sidebar["Sidebar Widgets<br/>[main.ts]"]
  node_weather["Weather Widget<br/>[weather-service.ts]"]
  node_music["Music Widget<br/>[music-service.ts]"]
  node_weread["WeRead Widget<br/>[weread-service.ts]"]
  node_pomodoro["Pomodoro Widget"]
  node_habit["Habit Widget<br/>[habit-service.ts]"]
  node_expense["Expense Widget<br/>[expense-service.ts]"]
  node_reading["Reading Tracker<br/>[reading-service.ts]"]
end

subgraph group_query["Vault Query"]
  node_dataview["DQL Data View"]
  node_dql["DQL Engine<br/>[index.ts]"]
  node_parser["DQL Parser<br/>[parser.ts]"]
  node_evaluator["DQL Evaluator<br/>[evaluator.ts]"]
end

node_user(("Obsidian User"))
node_vault[("Obsidian Vault")]
node_external(("External APIs"))

node_user -->|"opens dashboard"| node_plugin
node_plugin -->|"registers view"| node_dashboard
node_dashboard -->|"loads and saves"| node_workspace
node_dashboard -->|"renders sections"| node_renderer
node_renderer -->|"renders"| node_memo
node_renderer -->|"renders"| node_projects
node_renderer -->|"renders"| node_calendar
node_renderer -->|"renders"| node_dataview
node_renderer -->|"renders"| node_web
node_calendar -->|"scans tasks"| node_taskscan
node_taskscan -->|"reads notes"| node_vault
node_dataview -->|"runs query"| node_dql
node_dql -->|"parses query"| node_parser
node_dql -->|"evaluates parsed query"| node_evaluator
node_dataview -->|"queries Vault pages"| node_vault
node_user -->|"configures"| node_settings
node_settings -->|"updates configuration"| node_plugin
node_plugin -->|"manages widgets"| node_sidebar
node_sidebar -->|"shows weather"| node_weather
node_weather -.->|"requests forecast"| node_external
node_sidebar -->|"controls playback"| node_music
node_music -.->|"requests music"| node_external
node_sidebar -->|"shows reading data"| node_weread
node_weread -.->|"requests book data"| node_external
node_sidebar -->|"runs timer"| node_pomodoro
node_sidebar -->|"tracks habits"| node_habit
node_sidebar -->|"records finances"| node_expense
node_sidebar -->|"tracks reading"| node_reading

click node_plugin "https://github.com/pandorareads/apex-dashboard/blob/main/src/main.ts"
click node_dashboard "https://github.com/pandorareads/apex-dashboard/blob/main/src/view.ts"
click node_renderer "https://github.com/pandorareads/apex-dashboard/blob/main/src/renderer.ts"
click node_sidebar "https://github.com/pandorareads/apex-dashboard/blob/main/src/main.ts"
click node_settings "https://github.com/pandorareads/apex-dashboard/blob/main/src/settings.ts"
click node_memo "https://github.com/pandorareads/apex-dashboard/blob/main/src/memo-note.ts"
click node_projects "https://github.com/pandorareads/apex-dashboard/blob/main/src/library-section.ts"
click node_calendar "https://github.com/pandorareads/apex-dashboard/blob/main/src/calendar-section.ts"
click node_taskscan "https://github.com/pandorareads/apex-dashboard/blob/main/src/alltasks-scan.ts"
click node_dataview "https://github.com/pandorareads/apex-dashboard/blob/main/src/dataview-section.ts"
click node_dql "https://github.com/pandorareads/apex-dashboard/blob/main/src/dql/index.ts"
click node_parser "https://github.com/pandorareads/apex-dashboard/blob/main/src/dql/parser.ts"
click node_evaluator "https://github.com/pandorareads/apex-dashboard/blob/main/src/dql/evaluator.ts"
click node_web "https://github.com/pandorareads/apex-dashboard/blob/main/src/web-section.ts"
click node_weather "https://github.com/pandorareads/apex-dashboard/blob/main/src/weather-service.ts"
click node_music "https://github.com/pandorareads/apex-dashboard/blob/main/src/music-service.ts"
click node_weread "https://github.com/pandorareads/apex-dashboard/blob/main/src/weread-service.ts"
click node_pomodoro "https://github.com/pandorareads/apex-dashboard/blob/main/src/pomodoro-service.ts"
click node_habit "https://github.com/pandorareads/apex-dashboard/blob/main/src/habit-service.ts"
click node_expense "https://github.com/pandorareads/apex-dashboard/blob/main/src/expense-service.ts"
click node_reading "https://github.com/pandorareads/apex-dashboard/blob/main/src/reading-service.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_plugin,node_dashboard,node_renderer,node_workspace,node_settings,node_user toneBlue
class node_memo,node_projects,node_calendar,node_taskscan,node_web,node_vault toneAmber
class node_sidebar,node_weather,node_music,node_weread,node_pomodoro,node_habit,node_expense,node_reading,node_external toneMint
class node_dataview,node_dql,node_parser,node_evaluator toneRose
```

## Components

### Dashboard Core

- [Plugin Lifecycle](https://github.com/pandorareads/apex-dashboard/blob/main/src/main.ts): `src/main.ts`
- [Dashboard View](https://github.com/pandorareads/apex-dashboard/blob/main/src/view.ts): `src/view.ts`
- [Section Renderer](https://github.com/pandorareads/apex-dashboard/blob/main/src/renderer.ts): `src/renderer.ts`
- **Workspace Markdown**
- [Settings](https://github.com/pandorareads/apex-dashboard/blob/main/src/settings.ts): `src/settings.ts`

### Workspace Sections

- [Memo and Notes](https://github.com/pandorareads/apex-dashboard/blob/main/src/memo-note.ts): `src/memo-note.ts`
- [Projects and Library](https://github.com/pandorareads/apex-dashboard/blob/main/src/library-section.ts): `src/library-section.ts`
- [Calendar Sections](https://github.com/pandorareads/apex-dashboard/blob/main/src/calendar-section.ts): `src/calendar-section.ts`
- [Vault Task Scan](https://github.com/pandorareads/apex-dashboard/blob/main/src/alltasks-scan.ts): `src/alltasks-scan.ts`
- [Embedded Web](https://github.com/pandorareads/apex-dashboard/blob/main/src/web-section.ts): `src/web-section.ts`

### Sidebar Widgets

- [Sidebar Widgets](https://github.com/pandorareads/apex-dashboard/blob/main/src/main.ts): `src/main.ts`
- [Weather Widget](https://github.com/pandorareads/apex-dashboard/blob/main/src/weather-service.ts): `src/weather-service.ts`
- [Music Widget](https://github.com/pandorareads/apex-dashboard/blob/main/src/music-service.ts): `src/music-service.ts`
- [WeRead Widget](https://github.com/pandorareads/apex-dashboard/blob/main/src/weread-service.ts): `src/weread-service.ts`
- [Pomodoro Widget](https://github.com/pandorareads/apex-dashboard/blob/main/src/pomodoro-service.ts): `src/pomodoro-service.ts`
- [Habit Widget](https://github.com/pandorareads/apex-dashboard/blob/main/src/habit-service.ts): `src/habit-service.ts`
- [Expense Widget](https://github.com/pandorareads/apex-dashboard/blob/main/src/expense-service.ts): `src/expense-service.ts`
- [Reading Tracker](https://github.com/pandorareads/apex-dashboard/blob/main/src/reading-service.ts): `src/reading-service.ts`

### Vault Query

- [DQL Data View](https://github.com/pandorareads/apex-dashboard/blob/main/src/dataview-section.ts): `src/dataview-section.ts`
- [DQL Engine](https://github.com/pandorareads/apex-dashboard/blob/main/src/dql/index.ts): `src/dql/index.ts`
- [DQL Parser](https://github.com/pandorareads/apex-dashboard/blob/main/src/dql/parser.ts): `src/dql/parser.ts`
- [DQL Evaluator](https://github.com/pandorareads/apex-dashboard/blob/main/src/dql/evaluator.ts): `src/dql/evaluator.ts`

### Other components

- **Obsidian User**
- **Obsidian Vault**
- **External APIs**

## Connections

- Obsidian User → Plugin Lifecycle: opens dashboard
- Plugin Lifecycle → Dashboard View: registers view
- Dashboard View → Workspace Markdown: loads and saves
- Dashboard View → Section Renderer: renders sections
- Section Renderer → Memo and Notes: renders
- Section Renderer → Projects and Library: renders
- Section Renderer → Calendar Sections: renders
- Section Renderer → DQL Data View: renders
- Section Renderer → Embedded Web: renders
- Calendar Sections → Vault Task Scan: scans tasks
- Vault Task Scan → Obsidian Vault: reads notes
- DQL Data View → DQL Engine: runs query
- DQL Engine → DQL Parser: parses query
- DQL Engine → DQL Evaluator: evaluates parsed query
- DQL Data View → Obsidian Vault: queries Vault pages
- Obsidian User → Settings: configures
- Settings → Plugin Lifecycle: updates configuration
- Plugin Lifecycle → Sidebar Widgets: manages widgets
- Sidebar Widgets → Weather Widget: shows weather
- Weather Widget → External APIs: requests forecast
- Sidebar Widgets → Music Widget: controls playback
- Music Widget → External APIs: requests music
- Sidebar Widgets → WeRead Widget: shows reading data
- WeRead Widget → External APIs: requests book data
- Sidebar Widgets → Pomodoro Widget: runs timer
- Sidebar Widgets → Habit Widget: tracks habits
- Sidebar Widgets → Expense Widget: records finances
- Sidebar Widgets → Reading Tracker: tracks reading
