# utsapoddar/leafmark architecture

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

- Interactive diagram: https://gitdiagram.com/utsapoddar/leafmark
- Repository: https://github.com/utsapoddar/leafmark
- Video tour (about a minute): https://gitdiagram.com/utsapoddar/leafmark/video

## Overview

Leafmark is a privacy-first, browser-based PDF/EPUB reading-guide app. The reader selects a book and optionally configures a model; the UI hands processing to the book processor, which extracts source-labeled text and produces snapshot, key ideas, chapter guide, and deep dive views. The default extractive path stays local; optional AI processing uses the semantic kernel and the reader’s selected provider. The graph reflects documented capabilities where implementation excerpts are incomplete; edges are limited to documented or sampled calls and data flows.

Main entry points: [`lib/book-processor.ts`](https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts) (Book processor), [`app/page.tsx`](https://github.com/utsapoddar/leafmark/blob/main/app/page.tsx) (Reader UI), [`lib/model-providers.ts`](https://github.com/utsapoddar/leafmark/blob/main/lib/model-providers.ts) (Provider client), [`lib/semantic-kernel.ts`](https://github.com/utsapoddar/leafmark/blob/main/lib/semantic-kernel.ts) (Semantic kernel)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_reader["Reader workflow"]
  node_reader_ui["Reader UI<br/>[page.tsx]"]
  node_privacy_page["Privacy policy<br/>[page.tsx]"]
  node_markdown_export["Markdown export<br/>[page.tsx]"]
end

subgraph group_processing["Book processing"]
  node_book_processing["Book processor<br/>[book-processor.ts]"]
  node_text_extraction["Text extraction<br/>[book-processor.ts]"]
  node_local_ranker["Local extractive engine<br/>[book-processor.ts]"]
  node_semantic_kernel["Semantic kernel<br/>[semantic-kernel.ts]"]
  node_checkpoint_store[("Ledger checkpoints<br/>[semantic-kernel.ts]")]
  node_snapshot["Snapshot<br/>[book-processor.ts]"]
  node_key_ideas["Key ideas<br/>[book-processor.ts]"]
  node_chapter_guide["Chapter guide<br/>[book-processor.ts]"]
  node_deep_dive["Deep dive<br/>[book-processor.ts]"]
  node_source_trail["Source trail<br/>[book-processor.ts]"]
end

subgraph group_models["Model integration"]
  node_provider_config["Provider setup<br/>[page.tsx]"]
  node_provider_client["Provider client<br/>[model-providers.ts]"]
end

subgraph group_relay["NVIDIA relay"]
  node_nvidia_relay["NVIDIA relay<br/>[worker.ts]"]
end

node_reader(("Reader"))
node_book_file["PDF or EPUB"]
node_model_services{{"Model providers"}}
node_nvidia_service{{"NVIDIA API"}}

node_reader -->|"uses"| node_reader_ui
node_reader -->|"selects"| node_book_file
node_book_file -->|"provides"| node_reader_ui
node_reader_ui -->|"processes book"| node_book_processing
node_book_processing -->|"extracts text"| node_text_extraction
node_text_extraction -->|"returns segments"| node_book_processing
node_book_processing -->|"ranks locally"| node_local_ranker
node_book_processing -.->|"optional AI run"| node_semantic_kernel
node_semantic_kernel -->|"requests completions"| node_provider_client
node_provider_client -->|"sends prompts"| node_model_services
node_reader_ui -->|"configures model"| node_provider_config
node_provider_config -->|"discovers models"| node_provider_client
node_semantic_kernel -->|"reads and writes"| node_checkpoint_store
node_book_processing -->|"produces"| node_snapshot
node_book_processing -->|"produces"| node_key_ideas
node_book_processing -->|"assembles"| node_chapter_guide
node_book_processing -->|"assembles"| node_deep_dive
node_book_processing -->|"retains references"| node_source_trail
node_reader_ui -->|"downloads guide"| node_markdown_export
node_reader_ui -->|"links policy"| node_privacy_page
node_provider_client -.->|"forwards NVIDIA requests"| node_nvidia_relay
node_nvidia_relay -.->|"proxies requests"| node_nvidia_service

click node_reader_ui "https://github.com/utsapoddar/leafmark/blob/main/app/page.tsx"
click node_privacy_page "https://github.com/utsapoddar/leafmark/blob/main/app/privacy/page.tsx"
click node_book_processing "https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts"
click node_text_extraction "https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts"
click node_local_ranker "https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts"
click node_semantic_kernel "https://github.com/utsapoddar/leafmark/blob/main/lib/semantic-kernel.ts"
click node_checkpoint_store "https://github.com/utsapoddar/leafmark/blob/main/lib/semantic-kernel.ts"
click node_snapshot "https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts"
click node_key_ideas "https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts"
click node_chapter_guide "https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts"
click node_deep_dive "https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts"
click node_source_trail "https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts"
click node_markdown_export "https://github.com/utsapoddar/leafmark/blob/main/app/page.tsx"
click node_provider_config "https://github.com/utsapoddar/leafmark/blob/main/app/page.tsx"
click node_provider_client "https://github.com/utsapoddar/leafmark/blob/main/lib/model-providers.ts"
click node_nvidia_relay "https://github.com/utsapoddar/leafmark/blob/main/relay/worker.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_reader_ui,node_privacy_page,node_markdown_export toneBlue
class node_book_processing,node_text_extraction,node_local_ranker,node_semantic_kernel,node_checkpoint_store,node_snapshot,node_key_ideas,node_chapter_guide,node_deep_dive,node_source_trail toneAmber
class node_provider_config,node_provider_client,node_nvidia_service toneMint
class node_nvidia_relay toneRose
class node_reader,node_book_file,node_model_services toneIndigo
```

## Components

### Reader workflow

- [Reader UI](https://github.com/utsapoddar/leafmark/blob/main/app/page.tsx): `app/page.tsx`
- [Privacy policy](https://github.com/utsapoddar/leafmark/blob/main/app/privacy/page.tsx): `app/privacy/page.tsx`
- [Markdown export](https://github.com/utsapoddar/leafmark/blob/main/app/page.tsx): `app/page.tsx`

### Book processing

- [Book processor](https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts): `lib/book-processor.ts`
- [Text extraction](https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts): `lib/book-processor.ts`
- [Local extractive engine](https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts): `lib/book-processor.ts`
- [Semantic kernel](https://github.com/utsapoddar/leafmark/blob/main/lib/semantic-kernel.ts): `lib/semantic-kernel.ts`
- [Ledger checkpoints](https://github.com/utsapoddar/leafmark/blob/main/lib/semantic-kernel.ts): `lib/semantic-kernel.ts`
- [Snapshot](https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts): `lib/book-processor.ts`
- [Key ideas](https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts): `lib/book-processor.ts`
- [Chapter guide](https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts): `lib/book-processor.ts`
- [Deep dive](https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts): `lib/book-processor.ts`
- [Source trail](https://github.com/utsapoddar/leafmark/blob/main/lib/book-processor.ts): `lib/book-processor.ts`

### Model integration

- [Provider setup](https://github.com/utsapoddar/leafmark/blob/main/app/page.tsx): `app/page.tsx`
- [Provider client](https://github.com/utsapoddar/leafmark/blob/main/lib/model-providers.ts): `lib/model-providers.ts`

### NVIDIA relay

- [NVIDIA relay](https://github.com/utsapoddar/leafmark/blob/main/relay/worker.ts): `relay/worker.ts`

### Other components

- **Reader**
- **PDF or EPUB**
- **Model providers**
- **NVIDIA API**

## Connections

- Reader → Reader UI: uses
- Reader → PDF or EPUB: selects
- PDF or EPUB → Reader UI: provides
- Reader UI → Book processor: processes book
- Book processor → Text extraction: extracts text
- Text extraction → Book processor: returns segments
- Book processor → Local extractive engine: ranks locally
- Book processor → Semantic kernel: optional AI run
- Semantic kernel → Provider client: requests completions
- Provider client → Model providers: sends prompts
- Reader UI → Provider setup: configures model
- Provider setup → Provider client: discovers models
- Semantic kernel → Ledger checkpoints: reads and writes
- Book processor → Snapshot: produces
- Book processor → Key ideas: produces
- Book processor → Chapter guide: assembles
- Book processor → Deep dive: assembles
- Book processor → Source trail: retains references
- Reader UI → Markdown export: downloads guide
- Reader UI → Privacy policy: links policy
- Provider client → NVIDIA relay: forwards NVIDIA requests
- NVIDIA relay → NVIDIA API: proxies requests
