Rescue Paperjet v1 implementation
This commit is contained in:
parent
7ff5c8130d
commit
db9e2ca51b
83 changed files with 6186 additions and 3894 deletions
56
README.md
Normal file
56
README.md
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
# PaperJet
|
||||
|
||||
PaperJet is a self-hosted, single-user PDF annotation editor. It keeps the uploaded PDF immutable, stores annotations separately, autosaves the working layer, and flattens supported annotations only when exporting.
|
||||
|
||||
## Run with Docker
|
||||
|
||||
1. Copy `.env.example` to `.env`.
|
||||
2. Replace `SECRET_KEY` with a long random value. Compose refuses to start without it.
|
||||
3. Start the stack:
|
||||
|
||||
```sh
|
||||
docker compose up --build -d
|
||||
```
|
||||
|
||||
Open `http://localhost:4982` (or the value of `HTTP_PORT`). The first visit asks you to create the single master password.
|
||||
|
||||
The `db`, `pdf_storage`, and `thumbnails` volumes contain application data. Back them up before maintenance or upgrades. Put the frontend behind HTTPS when exposing PaperJet beyond localhost and set `COOKIE_SECURE=true`.
|
||||
|
||||
## Development
|
||||
|
||||
Backend:
|
||||
|
||||
```sh
|
||||
cd backend
|
||||
pip install -e ".[dev]"
|
||||
uvicorn app.main:app --reload
|
||||
```
|
||||
|
||||
Frontend, in a second terminal:
|
||||
|
||||
```sh
|
||||
cd frontend
|
||||
npm ci
|
||||
npm run dev
|
||||
```
|
||||
|
||||
The Vite server proxies `/api` to `http://localhost:8000`.
|
||||
|
||||
## Validation
|
||||
|
||||
```sh
|
||||
# frontend
|
||||
cd frontend
|
||||
npm test -- --run
|
||||
npm run typecheck
|
||||
npm run lint
|
||||
npm run build
|
||||
|
||||
# backend
|
||||
cd ../backend
|
||||
pytest -q
|
||||
mypy app/
|
||||
ruff check .
|
||||
```
|
||||
|
||||
The editor uses PDF.js for display and PyMuPDF for export. Stored annotation coordinates are PDF points with a top-left origin relative to the unrotated CropBox; this is the contract shared by the editor and export renderer.
|
||||
Loading…
Add table
Add a link
Reference in a new issue