Web-based PDF editor focused on image overlays.
This repository contains the application layer only:
- UI/editor in
src/ - Static app shell in
index.html - Styling in
src/style.css - Browser runtime in
src/main.js - Local test server in
src/server.mjs - All-inkl compatible PHP backend endpoint in
api/app-meta.php
Main capabilities:
- Upload and preview multi-page PDFs
- Load the first PDF either via file picker or by dragging it into the empty workspace
- Reorder pages, add blank pages, and delete pages
- Append pages by uploading additional PDF files
- Insert pages after a specific page by dropping one or more PDF files onto that page preview
- Add as many images as needed on selected pages (single or multi-select), including drag-and-drop directly onto a page
- Move, scale, and rotate images using InteractJS and in-app controls
- Export the edited document as a new PDF
- Runtime localization (
English/Deutsch) with persisted locale preference (langURL override supported) - WebMCP imperative tool integration for agent-driven workflows across PDF/page/image editing actions
Project documentation lives in docs/:
docs/getting-started.md: setup and first rundocs/pdf-editing-workflow.md: upload/edit/export workflowdocs/architecture.md: runtime and data flow overviewdocs/troubleshooting.md: common issues and fixes
npm install
npm startOpen:
http://localhost:3000/
If port 3000 is in use:
PORT=3100 npm startnpm testApp-level tests are in tests/.
The code in this repository is licensed under the PolyForm Noncommercial License 1.0.0.
See LICENSE.md for the full license text and NOTICE for the required notices that must travel with the software.
- Frontend runtime dependencies are vendored into
src/vendor/to avoid production/node_modulesrequirements. - Font files are served locally from
src/assets/fonts/. - On live hosting (all-inkl), app version metadata is served via
GET /api/app-meta.php. - Images are normalized to PNG internally before PDF embedding for stable export.
- Multiple overlay images per page are supported.
- Selected image can be rotated in 90° steps or removed via button or
Delete/Backspace.