# alpha-liu-01/speedynote architecture

> Architecture diagram of the GitHub repository alpha-liu-01/speedynote, 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/alpha-liu-01/speedynote
- Repository: https://github.com/alpha-liu-01/speedynote

## Overview

SpeedyNote is a cross-platform, stylus-first notebook and PDF annotation application. The primary user workflow is to find or create a notebook, edit pages or an edgeless canvas with ink and inserted objects, then save or share it. The README also documents multi-tab and split editing, PDF navigation/search, handwriting OCR, Markdown notes, and batch/CLI operations. Source excerpts confirm OCR engine selection and export queuing; other capability nodes use paths from the tree and documented behavior, with uncertain internal wiring omitted.

Main entry points: [`source/core/Document.cpp`](https://github.com/alpha-liu-01/speedynote/blob/main/source/core/Document.cpp) (Document), [`source/core/Page.cpp`](https://github.com/alpha-liu-01/speedynote/blob/main/source/core/Page.cpp) (Pages and Canvas), [`source/Main.cpp`](https://github.com/alpha-liu-01/speedynote/blob/main/source/Main.cpp) (Application Entry), [`source/MainWindow.cpp`](https://github.com/alpha-liu-01/speedynote/blob/main/source/MainWindow.cpp) (Main Window)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workspace["Workspace"]
  node_main["Application Entry<br/>[Main.cpp]"]
  node_main_window["Main Window<br/>[MainWindow.cpp]"]
  node_launcher["Notebook Launcher<br/>[Launcher.cpp]"]
  node_tabs["Tabs and Split View"]
end

subgraph group_documents["Notebook Domain"]
  node_library[("Notebook Library")]
  node_document_manager["Document Manager"]
  node_document["Document<br/>[Document.cpp]"]
  node_page["Pages and Canvas<br/>[Page.cpp]"]
end

subgraph group_editing["Annotation Tools"]
  node_strokes["Vector Strokes<br/>[VectorStroke.h]"]
  node_layers["Vector Layers<br/>[VectorLayer.h]"]
  node_objects["Inserted Objects<br/>[InsertedObject.cpp]"]
  node_markdown["Markdown Notes<br/>[MarkdownNote.cpp]"]
end

subgraph group_pdf_ocr["PDF and OCR"]
  node_pdf_provider["PDF Provider<br/>[MuPdfProvider.cpp]"]
  node_pdf_search["PDF Search"]
  node_ocr_worker["OCR Worker<br/>[OcrWorker.cpp]"]
  node_ocr_factory["OCR Engine Factory<br/>[OcrEngine.cpp]"]
  node_raster_ocr["Raster OCR"]
  node_paddle_ocr["PaddleOCR Linux"]
end

subgraph group_exchange["Import and Export"]
  node_notebook_exchange["Notebook Bundles"]
  node_notebook_import["Notebook Importer"]
  node_batch_queue["Export Queue"]
  node_batch_ops["Batch Operations"]
  node_cli["CLI Handler<br/>[CliHandler.cpp]"]
  node_pdf_export["PDF Exporter<br/>[MuPdfExporter.cpp]"]
end

node_user(("User"))
node_cli_user(("CLI User"))

node_user -->|"launches"| node_main
node_main -->|"opens"| node_main_window
node_user -->|"browses notebooks"| node_launcher
node_user -->|"edits notebook"| node_main_window
node_main_window -->|"manages views"| node_tabs
node_main_window -->|"manages documents"| node_document_manager
node_launcher -->|"browses library"| node_library
node_document_manager -->|"manages"| node_document
node_document -->|"contains pages"| node_page
node_page -->|"holds ink"| node_strokes
node_page -->|"organizes drawing"| node_layers
node_page -->|"holds objects"| node_objects
node_document -->|"supports notes"| node_markdown
node_document -->|"uses PDF background"| node_pdf_provider
node_pdf_search -->|"reads PDF text"| node_pdf_provider
node_ocr_worker -->|"selects engine"| node_ocr_factory
node_ocr_factory -->|"creates backend"| node_raster_ocr
node_raster_ocr -.->|"uses Linux recognizer"| node_paddle_ocr
node_notebook_import -->|"imports notebooks"| node_library
node_batch_queue -->|"dispatches jobs"| node_batch_ops
node_batch_ops -->|"exports bundles"| node_notebook_exchange
node_batch_ops -->|"exports PDF"| node_pdf_export
node_cli_user -->|"invokes commands"| node_main
node_main -->|"dispatches CLI"| node_cli
node_cli -->|"runs operations"| node_batch_ops

click node_main "https://github.com/alpha-liu-01/speedynote/blob/main/source/Main.cpp"
click node_main_window "https://github.com/alpha-liu-01/speedynote/blob/main/source/MainWindow.cpp"
click node_launcher "https://github.com/alpha-liu-01/speedynote/blob/main/source/ui/launcher/Launcher.cpp"
click node_tabs "https://github.com/alpha-liu-01/speedynote/blob/main/source/ui/SplitViewManager.cpp"
click node_library "https://github.com/alpha-liu-01/speedynote/blob/main/source/core/NotebookLibrary.cpp"
click node_document_manager "https://github.com/alpha-liu-01/speedynote/blob/main/source/core/DocumentManager.cpp"
click node_document "https://github.com/alpha-liu-01/speedynote/blob/main/source/core/Document.cpp"
click node_page "https://github.com/alpha-liu-01/speedynote/blob/main/source/core/Page.cpp"
click node_strokes "https://github.com/alpha-liu-01/speedynote/blob/main/source/strokes/VectorStroke.h"
click node_layers "https://github.com/alpha-liu-01/speedynote/blob/main/source/layers/VectorLayer.h"
click node_objects "https://github.com/alpha-liu-01/speedynote/blob/main/source/objects/InsertedObject.cpp"
click node_markdown "https://github.com/alpha-liu-01/speedynote/blob/main/source/core/MarkdownNote.cpp"
click node_pdf_provider "https://github.com/alpha-liu-01/speedynote/blob/main/source/pdf/MuPdfProvider.cpp"
click node_pdf_search "https://github.com/alpha-liu-01/speedynote/blob/main/source/pdf/PdfSearchEngine.cpp"
click node_ocr_worker "https://github.com/alpha-liu-01/speedynote/blob/main/source/ocr/OcrWorker.cpp"
click node_ocr_factory "https://github.com/alpha-liu-01/speedynote/blob/main/source/ocr/OcrEngine.cpp"
click node_raster_ocr "https://github.com/alpha-liu-01/speedynote/blob/main/source/ocr/engines/RasterOcrEngine.cpp"
click node_paddle_ocr "https://github.com/alpha-liu-01/speedynote/blob/main/source/ocr/engines/PaddleOcrEngine_linux.cpp"
click node_notebook_exchange "https://github.com/alpha-liu-01/speedynote/blob/main/source/sharing/NotebookExporter.cpp"
click node_notebook_import "https://github.com/alpha-liu-01/speedynote/blob/main/source/sharing/NotebookImporter.cpp"
click node_batch_queue "https://github.com/alpha-liu-01/speedynote/blob/main/source/batch/ExportQueueManager.cpp"
click node_batch_ops "https://github.com/alpha-liu-01/speedynote/blob/main/source/batch/BatchOperations.cpp"
click node_cli "https://github.com/alpha-liu-01/speedynote/blob/main/source/cli/CliHandler.cpp"
click node_pdf_export "https://github.com/alpha-liu-01/speedynote/blob/main/source/pdf/MuPdfExporter.cpp"

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_main,node_main_window,node_launcher,node_tabs,node_user,node_cli_user toneBlue
class node_library,node_document_manager,node_document,node_page toneAmber
class node_strokes,node_layers,node_objects,node_markdown toneMint
class node_pdf_provider,node_pdf_search,node_ocr_worker,node_ocr_factory,node_raster_ocr,node_paddle_ocr toneRose
class node_notebook_exchange,node_notebook_import,node_batch_queue,node_batch_ops,node_cli,node_pdf_export toneIndigo
```

## Components

### Workspace

- [Application Entry](https://github.com/alpha-liu-01/speedynote/blob/main/source/Main.cpp): `source/Main.cpp`
- [Main Window](https://github.com/alpha-liu-01/speedynote/blob/main/source/MainWindow.cpp): `source/MainWindow.cpp`
- [Notebook Launcher](https://github.com/alpha-liu-01/speedynote/blob/main/source/ui/launcher/Launcher.cpp): `source/ui/launcher/Launcher.cpp`
- [Tabs and Split View](https://github.com/alpha-liu-01/speedynote/blob/main/source/ui/SplitViewManager.cpp): `source/ui/SplitViewManager.cpp`

### Notebook Domain

- [Notebook Library](https://github.com/alpha-liu-01/speedynote/blob/main/source/core/NotebookLibrary.cpp): `source/core/NotebookLibrary.cpp`
- [Document Manager](https://github.com/alpha-liu-01/speedynote/blob/main/source/core/DocumentManager.cpp): `source/core/DocumentManager.cpp`
- [Document](https://github.com/alpha-liu-01/speedynote/blob/main/source/core/Document.cpp): `source/core/Document.cpp`
- [Pages and Canvas](https://github.com/alpha-liu-01/speedynote/blob/main/source/core/Page.cpp): `source/core/Page.cpp`

### Annotation Tools

- [Vector Strokes](https://github.com/alpha-liu-01/speedynote/blob/main/source/strokes/VectorStroke.h): `source/strokes/VectorStroke.h`
- [Vector Layers](https://github.com/alpha-liu-01/speedynote/blob/main/source/layers/VectorLayer.h): `source/layers/VectorLayer.h`
- [Inserted Objects](https://github.com/alpha-liu-01/speedynote/blob/main/source/objects/InsertedObject.cpp): `source/objects/InsertedObject.cpp`
- [Markdown Notes](https://github.com/alpha-liu-01/speedynote/blob/main/source/core/MarkdownNote.cpp): `source/core/MarkdownNote.cpp`

### PDF and OCR

- [PDF Provider](https://github.com/alpha-liu-01/speedynote/blob/main/source/pdf/MuPdfProvider.cpp): `source/pdf/MuPdfProvider.cpp`
- [PDF Search](https://github.com/alpha-liu-01/speedynote/blob/main/source/pdf/PdfSearchEngine.cpp): `source/pdf/PdfSearchEngine.cpp`
- [OCR Worker](https://github.com/alpha-liu-01/speedynote/blob/main/source/ocr/OcrWorker.cpp): `source/ocr/OcrWorker.cpp`
- [OCR Engine Factory](https://github.com/alpha-liu-01/speedynote/blob/main/source/ocr/OcrEngine.cpp): `source/ocr/OcrEngine.cpp`
- [Raster OCR](https://github.com/alpha-liu-01/speedynote/blob/main/source/ocr/engines/RasterOcrEngine.cpp): `source/ocr/engines/RasterOcrEngine.cpp`
- [PaddleOCR Linux](https://github.com/alpha-liu-01/speedynote/blob/main/source/ocr/engines/PaddleOcrEngine_linux.cpp): `source/ocr/engines/PaddleOcrEngine_linux.cpp`

### Import and Export

- [Notebook Bundles](https://github.com/alpha-liu-01/speedynote/blob/main/source/sharing/NotebookExporter.cpp): `source/sharing/NotebookExporter.cpp`
- [Notebook Importer](https://github.com/alpha-liu-01/speedynote/blob/main/source/sharing/NotebookImporter.cpp): `source/sharing/NotebookImporter.cpp`
- [Export Queue](https://github.com/alpha-liu-01/speedynote/blob/main/source/batch/ExportQueueManager.cpp): `source/batch/ExportQueueManager.cpp`
- [Batch Operations](https://github.com/alpha-liu-01/speedynote/blob/main/source/batch/BatchOperations.cpp): `source/batch/BatchOperations.cpp`
- [CLI Handler](https://github.com/alpha-liu-01/speedynote/blob/main/source/cli/CliHandler.cpp): `source/cli/CliHandler.cpp`
- [PDF Exporter](https://github.com/alpha-liu-01/speedynote/blob/main/source/pdf/MuPdfExporter.cpp): `source/pdf/MuPdfExporter.cpp`

### Other components

- **User**
- **CLI User**

## Connections

- User → Application Entry: launches
- Application Entry → Main Window: opens
- User → Notebook Launcher: browses notebooks
- User → Main Window: edits notebook
- Main Window → Tabs and Split View: manages views
- Main Window → Document Manager: manages documents
- Notebook Launcher → Notebook Library: browses library
- Document Manager → Document: manages
- Document → Pages and Canvas: contains pages
- Pages and Canvas → Vector Strokes: holds ink
- Pages and Canvas → Vector Layers: organizes drawing
- Pages and Canvas → Inserted Objects: holds objects
- Document → Markdown Notes: supports notes
- Document → PDF Provider: uses PDF background
- PDF Search → PDF Provider: reads PDF text
- OCR Worker → OCR Engine Factory: selects engine
- OCR Engine Factory → Raster OCR: creates backend
- Raster OCR → PaddleOCR Linux: uses Linux recognizer
- Notebook Importer → Notebook Library: imports notebooks
- Export Queue → Batch Operations: dispatches jobs
- Batch Operations → Notebook Bundles: exports bundles
- Batch Operations → PDF Exporter: exports PDF
- CLI User → Application Entry: invokes commands
- Application Entry → CLI Handler: dispatches CLI
- CLI Handler → Batch Operations: runs operations
