# saurabh9t9/pdf-studio architecture

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

- Interactive diagram: https://gitdiagram.com/saurabh9t9/pdf-studio
- Repository: https://github.com/saurabh9t9/pdf-studio

## Overview

PDF Studio is a local-first browser workspace for importing documents, organizing pages, editing PDF content, and exporting results. Its principal workflow runs from file selection and import through page management and editing to local saving or conversion. The README documents broader capabilities than the sampled source excerpts, so those are represented as product areas within the monolithic `src.js`, not as separately verified modules. The excerpts show PDF.js rendering, pdf-lib editing, and Tesseract OCR; DOCX conversion is implemented by the local middleware in `vite.config.js`.

Main entry points: [`src.js`](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js) (Content editor), [`vite.config.js`](https://github.com/saurabh9t9/pdf-studio/blob/main/vite.config.js) (DOCX conversion endpoint)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workspace["Browser workspace"]
  node_file_import["File import<br/>[src.js]"]
  node_import_queue["Import queue<br/>[src.js]"]
  node_pdf_workspace["PDF workspace<br/>[src.js]"]
  node_page_previews["Page previews<br/>[src.js]"]
  node_pdf_rendering["PDF rendering<br/>[src.js]"]
end

subgraph group_pages["Page operations"]
  node_page_selection["Page selection<br/>[src.js]"]
  node_page_organization["Page organization<br/>[src.js]"]
  node_page_export["Page export<br/>[src.js]"]
end

subgraph group_editing["PDF editing"]
  node_pdf_content_editor["Content editor<br/>[src.js]"]
  node_annotations["Annotations and forms<br/>[src.js]"]
  node_redaction["Redaction<br/>[src.js]"]
  node_ocr["Text recognition<br/>[src.js]"]
  node_pdf_metadata["Metadata and comparison<br/>[src.js]"]
  node_tesseract["Tesseract.js"]
end

subgraph group_conversion["Conversion and export"]
  node_pdf_conversion["PDF conversion<br/>[src.js]"]
  node_docx_endpoint["DOCX conversion endpoint<br/>[vite.config.js]"]
  node_office_renderer["Local office renderer"]
  node_pdf_libraries["PDF.js and pdf-lib"]
  node_local_file["Local file download<br/>[src.js]"]
end

node_user(("User"))

node_user -->|"selects files"| node_file_import
node_file_import -->|"queues imports"| node_import_queue
node_import_queue -->|"imports documents"| node_pdf_workspace
node_pdf_workspace -->|"shows pages"| node_page_previews
node_page_previews -->|"renders previews"| node_pdf_rendering
node_user -->|"selects pages"| node_page_selection
node_page_selection -->|"organizes pages"| node_page_organization
node_page_organization -->|"exports pages"| node_page_export
node_pdf_workspace -->|"opens editor"| node_pdf_content_editor
node_pdf_content_editor -->|"renders edit page"| node_pdf_rendering
node_pdf_content_editor -->|"edits annotations"| node_annotations
node_pdf_content_editor -->|"redacts content"| node_redaction
node_pdf_content_editor -->|"recognizes text"| node_ocr
node_ocr -->|"uses OCR"| node_tesseract
node_pdf_metadata -->|"compares documents"| node_pdf_conversion
node_pdf_workspace -->|"converts documents"| node_pdf_conversion
node_pdf_conversion -->|"saves locally"| node_local_file
node_page_export -->|"builds PDF"| node_pdf_libraries
node_pdf_rendering -->|"renders PDF"| node_pdf_libraries
node_docx_endpoint -->|"converts locally"| node_office_renderer
node_file_import -.->|"requests conversion"| node_docx_endpoint

click node_file_import "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_import_queue "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_pdf_workspace "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_page_previews "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_page_selection "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_page_organization "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_page_export "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_pdf_rendering "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_pdf_content_editor "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_annotations "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_redaction "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_ocr "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_pdf_metadata "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_pdf_conversion "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"
click node_docx_endpoint "https://github.com/saurabh9t9/pdf-studio/blob/main/vite.config.js"
click node_local_file "https://github.com/saurabh9t9/pdf-studio/blob/main/src.js"

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_file_import,node_import_queue,node_pdf_workspace,node_page_previews,node_pdf_rendering,node_user toneBlue
class node_page_selection,node_page_organization,node_page_export toneAmber
class node_pdf_content_editor,node_annotations,node_redaction,node_ocr,node_pdf_metadata,node_tesseract toneMint
class node_pdf_conversion,node_docx_endpoint,node_office_renderer,node_pdf_libraries,node_local_file toneRose
```

## Components

### Browser workspace

- [File import](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [Import queue](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [PDF workspace](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [Page previews](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [PDF rendering](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`

### Page operations

- [Page selection](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [Page organization](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [Page export](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`

### PDF editing

- [Content editor](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [Annotations and forms](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [Redaction](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [Text recognition](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [Metadata and comparison](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- **Tesseract.js**

### Conversion and export

- [PDF conversion](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`
- [DOCX conversion endpoint](https://github.com/saurabh9t9/pdf-studio/blob/main/vite.config.js): `vite.config.js`
- **Local office renderer**
- **PDF.js and pdf-lib**
- [Local file download](https://github.com/saurabh9t9/pdf-studio/blob/main/src.js): `src.js`

### Other components

- **User**

## Connections

- User → File import: selects files (evidence: `README.md`)
- File import → Import queue: queues imports (evidence: `README.md`)
- Import queue → PDF workspace: imports documents (evidence: `README.md`)
- PDF workspace → Page previews: shows pages (evidence: `README.md`)
- Page previews → PDF rendering: renders previews (evidence: `src.js`)
- User → Page selection: selects pages (evidence: `src.js`)
- Page selection → Page organization: organizes pages (evidence: `README.md`)
- Page organization → Page export: exports pages (evidence: `README.md`)
- PDF workspace → Content editor: opens editor (evidence: `README.md`)
- Content editor → PDF rendering: renders edit page (evidence: `src.js`)
- Content editor → Annotations and forms: edits annotations (evidence: `README.md`)
- Content editor → Redaction: redacts content (evidence: `README.md`)
- Content editor → Text recognition: recognizes text (evidence: `src.js`)
- Text recognition → Tesseract.js: uses OCR (evidence: `src.js`)
- Metadata and comparison → PDF conversion: compares documents (evidence: `README.md`)
- PDF workspace → PDF conversion: converts documents (evidence: `README.md`)
- PDF conversion → Local file download: saves locally (evidence: `README.md`)
- Page export → PDF.js and pdf-lib: builds PDF (evidence: `src.js`)
- PDF rendering → PDF.js and pdf-lib: renders PDF (evidence: `src.js`)
- DOCX conversion endpoint → Local office renderer: converts locally (evidence: `vite.config.js`)
- File import → DOCX conversion endpoint: requests conversion (evidence: `README.md`)
