A local-first web app for PDF editing, signing, and analysis, backed by a local codex app-server session.
- Local authentication via Codex (ChatGPT account integration through the local app-server).
- Upload and manage PDFs in a local document shelf.
- Page tools for rotate, delete pages, extract pages, and merge PDFs.
- In-view page navigation with Previous/Next and direct page jump controls.
- Undo and redo for document edits.
- Annotation tools: add text, highlight, and place electronic signatures.
- Fill interactive PDF forms (AcroForm fields).
- Extract text and run Codex analysis or workspace export workflows.
- Local PDF.js viewer with viewport-aware placement and signature/text overlays.
This app is designed for private desktop-style usage and does not store PDFs in cloud storage. Documents are kept under the app’s local workspace directory in your OS temp area and managed in memory for active sessions. On server shutdown (SIGINT/SIGTERM), local workspaces are cleaned up.
- Node.js 20+
- Python 3.10+
codexCLI installed and logged in (codex login)- Python dependencies in
requirements.txt - Node dependencies in
package.json
npm install
npm run devOpen the app at http://localhost:3210. Set PORT to change the listener port if needed.
If codex is not on your PATH, run with:
CODEX_BIN="/absolute/path/to/codex" npm run devGET /api/healthGET /api/codex/accountGET /api/codex/modelsPOST /api/codex/login/startGET /api/codex/login/status/:loginIdPOST /api/codex/logoutGET /api/docsPOST /api/docs/uploadGET /api/docs/:docIdGET /api/docs/:docId/viewGET /api/docs/:docId/downloadDELETE /api/docs/:docIdPOST /api/docs/:docId/extract-textPOST /api/docs/:docId/rotatePOST /api/docs/:docId/delete-pagesPOST /api/docs/:docId/extract-pagesPOST /api/docs/mergePOST /api/docs/:docId/add-textPOST /api/docs/:docId/highlightPOST /api/docs/:docId/add-signaturePOST /api/docs/:docId/fill-form-fieldsPOST /api/docs/:docId/undoPOST /api/docs/:docId/redoPOST /api/docs/:docId/promote-pdfGET /api/docs/:docId/workspace-filesGET /api/docs/:docId/workspace-filePOST /api/codex/analyze