Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 40 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,43 +1,56 @@
# Gitplant Pass 1 (Desktop-first)
# Gitplant Pass 1.5 (Desktop-first architecture upgrade)

This repository now contains the Pass 1 desktop-first vertical slice defined in `docs/PDF_REVIEW_ARCHITECTURE_PACKAGE.md`.
This repository now includes the architectural upgrade for multi-layer viewing, document transformations, and processing/indexing scaffolding.

## Workspace structure
Design authority: `docs/PDF_REVIEW_ARCHITECTURE_PACKAGE.md`.

- `apps/desktop` – Tauri desktop shell + React/TypeScript UI
- `apps/desktop/src-tauri` – Rust native commands, SQLite schema, managed file storage
- `packages/shared-types` – shared contracts
- `packages/viewer-core` – renderer abstraction interfaces
- `packages/viewer-pdfjs` – PDF.js renderer adapter implementation
- `packages/persistence-core` – persistence gateway interfaces used by UI
## Repo/package structure

## Prerequisites
- `apps/desktop` – Tauri shell + React UI
- `apps/desktop/src-tauri` – Rust commands, SQLite schema, managed storage, transform + processing proof paths
- `packages/shared-types` – domain/shared records for revisions, jobs, extracted text
- `packages/viewer-core` – renderer abstraction + render-scene/layer model
- `packages/viewer-pdfjs` – PDF.js adapter implementation
- `packages/persistence-core` – UI persistence gateway contracts
- `packages/document-transform-core` – transform command/result contracts
- `packages/document-transform-pdflib` – adapter slot (desktop implementation currently in Rust service)
- `packages/processing-core` – processing job and OCR provider contracts
- `packages/text-extraction-core` – text extraction provider contracts

- Node.js 20+
- Rust stable toolchain
- Tauri system dependencies: https://v2.tauri.app/start/prerequisites/
## What changed

- Viewer architecture now models stacked render layers (`base_pdf`, `overlay_pdf`, future markup/selection overlays).
- Transformations are isolated behind dedicated command boundary and create **derived revisions**.
- Processing pipeline tracks jobs and stores extracted page text by revision/page.
- Schema supports immutable originals, revision lineage, processing jobs, extracted text, and audit events.
- Desktop app includes minimal dev scaffolding buttons to trigger text extraction and extract-page transformation proof path.

## Implemented now (real paths)

1. Import + open PDFs (existing behavior still supported).
2. Extract page range to a new derived revision (managed storage + metadata persistence).
3. Trigger text extraction job for current revision and persist per-page text.

## Scaffolded for later

- OCR provider implementation (boundary and job type already in place)
- Full transform UI for delete/insert/reorder/combine
- Native renderer adapter implementation
- Full markup/selection overlay rendering

## Commands

From repository root:

- Dev (one command): `npm run desktop:dev`
- Dev (desktop): `npm run desktop:dev`
- Desktop build: `npm run desktop:build`
- Tests: `npm test`
- Typecheck: `npm run typecheck`

## Pass 1 manual verification checklist
## Manual verification checklist

1. Run `npm run desktop:dev` and confirm desktop window opens.
2. Click **Import PDF**, pick a local `.pdf` through native picker.
3. Confirm document appears in viewer and page renders.
4. Use **Prev/Next** and **Zoom In/Zoom Out/Fit Width**.
5. Confirm imported document appears in **Recent Documents**.
6. Restart app and confirm recent item reopens.

## Deferred to Pass 2+

- Markup tools/redlines/comments/workflow
- Collaboration/sync/export pipeline
- Native renderer adapter
- Advanced performance optimization and tile rendering
2. Import a PDF and confirm page rendering still works.
3. Click **Extract page 1 to derived revision** and confirm no crash + viewer shows comparison-capable scene layer info.
4. Click **Trigger text extraction** and confirm extracted row count updates.
5. Restart app and confirm recent document still opens.
8 changes: 6 additions & 2 deletions apps/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
"@gitplant/viewer-pdfjs": "0.1.0",
"@tauri-apps/api": "^2.0.0",
"react": "^18.3.1",
"react-dom": "^18.3.1"
"react-dom": "^18.3.1",
"@gitplant/viewer-core": "0.1.0",
"@gitplant/processing-core": "0.1.0",
"@gitplant/document-transform-core": "0.1.0",
"@gitplant/text-extraction-core": "0.1.0"
},
"devDependencies": {
"@tauri-apps/cli": "^2.0.0",
Expand All @@ -31,4 +35,4 @@
"vite": "^6.0.5",
"vitest": "^2.1.8"
}
}
}
5 changes: 5 additions & 0 deletions apps/desktop/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ serde = { version = "1", features = ["derive"] }
tauri = { version = "2", features = [] }
uuid = { version = "1", features = ["v4", "serde"] }
rfd = "0.15"
lopdf = "0.35"
serde_json = "1"

[build-dependencies]
tauri-build = { version = "2", features = [] }

[dev-dependencies]
tempfile = "3"
Loading