Paperworks is an offline-first, open-source document suite built with React + TypeScript.
It currently includes:
- Business Card Studio
- Invoice Studio
- Resume Builder
- PDF Pro
- Document Vault (cross-tool manager)
- Free and open source
- Works offline first
- User data stays local by default
- Cross-platform architecture (Web now, Wails/Capacitor next)
- Platforms supported: Web (Vite), Desktop (Wails), and Mobile (Capacitor Android) — all confirmed working in dev and production builds.
- Storage model: web-first (IndexedDB + localStorage fallback). We intentionally avoid introducing separate native storage layers to keep the application simple and consistent across platforms.
- How to run each platform:
- Web (dev):
npm run dev -- --host - Web (prod build):
npm run build - Desktop (Wails dev):
wails dev(requires Wails CLI & Go) - Mobile (Capacitor Android):
npm run buildthennpx cap sync androidandnpx cap open androidto run in Android Studio
- Web (dev):
This release focuses on a single, portable storage model and consistent UX across all platforms so users can jump between web, desktop and mobile without migration friction.
- Multi-document CRUD (create, open, update, duplicate, delete)
- Theme presets and text alignment presets
- Front/back card layouts
- Logo upload
- PDF export
- Multi-document CRUD
- Company/client sections and invoice metadata
- Dynamic line items with totals, tax, and discount
- Logo upload
- PDF export
- Multi-document CRUD
- Dynamic experience/education/project sections
- Theme presets
- PDF export
- Multi-project CRUD
- Load PDF and preview edited output
- Reorder pages and rotate pages
- Draw signature and stamp first page
- Download edited PDF
- Unified library for all saved tool documents
- Filter by tool type
- Deep-link open into each editor with
?doc=<id>
- Primary (web): IndexedDB
- Native bridge (Android/Wails): key-value bridge storage via
src/lib/platformBridge.ts - Fallback: localStorage
- Shared abstraction:
src/lib/documentStore.ts - PDF bytes are currently stored in browser storage as base64 for portability.
In browsers, file inputs and PDF previews may create temporary object URLs/blobs to render local files safely. This can appear like a duplicate file event depending on browser/device behavior.
What is expected in Paperworks:
- Loading a file should only import into app state.
- A real file download should only happen when you click explicit export actions (for example
Download Edited PDFor PDF export buttons).
Hardening added:
- App
Buttonnow defaults totype="button"unless explicitly overridden, preventing accidental form submissions that can trigger unintended behavior in some flows.
- Dependency vulnerabilities: 0 (verified with
npm auditafter dependency remediation). - Current non-blocking issues:
- Vite warning from
vite:react-swcabout anesbuildoption deprecation.
- Vite warning from
Capacitor dependencies and config are now included:
@capacitor/core@capacitor/android@capacitor/preferences@capacitor/clicapacitor.config.ts
Scripts:
npm run cap:buildnpm run cap:syncnpm run cap:android
First-time setup:
npm install
npm run build
npx cap add android
npm run cap:sync
npm run cap:androidFrontend bridge contract is scaffolded and documented in wails/README.md.
Expected JS bridge methods from Wails backend:
GetStorageItem(key)SetStorageItem(key, value)RemoveStorageItem(key)
Optional scripts (require Wails CLI installed globally):
npm run wails:devnpm run wails:build
Requirements:
- Node.js 20+
- npm 10+
git clone https://github.com/robfernan/Paperworks.git
cd Paperworks
npm install
npm run dev -- --hostBuild production assets:
npm run buildLint:
npm run lintIf you already have remote origin configured:
git add .
git commit -m "chore: security updates, docs refresh, and offline-suite hardening"
git push origin mainIf no remote exists yet:
git remote add origin https://github.com/<your-user>/<your-repo>.git
git branch -M main
git push -u origin main- Native storage bridge
- Add binary file APIs (read/write/delete) in Wails backend and Capacitor filesystem adapter.
- Keep metadata in native SQLite and store large PDFs on disk.
- Large PDF optimization
- Move large binary storage from base64-in-browser to native file storage when running on desktop/mobile shells.
- Performance and bundle splitting
- Keep route-level lazy loading and add per-tool component splitting.
- Split PDF-specific code paths for faster startup.
- Responsive polish
- Add touch-first drag/reorder interactions for mobile PDF page ordering.
- Improve small-screen toolbars with stacked/floating actions.
- Reliability features
- Add autosave timeline + restore snapshots.
- Add undo/redo action history persistence for PDF operations.
- Quality/security pipeline
- Add CI for lint/build/test/audit.
- Add unit tests for
documentStoreand integration tests for tool CRUD flows.
- Web/PWA: current Vite + React stack
- Desktop: Wails + Go backend for filesystem and PDF batch operations
- Mobile: Capacitor + Filesystem/SQLite plugins
- Shared app core: React UI + adapter-based storage/services
- React 18 + TypeScript
- Vite
- Tailwind CSS + shadcn-ui
pdf-libandjspdf- IndexedDB/localStorage persistence
Paperworks © 2026


