Skip to content

concrete-sangminlee/pdfremover

Repository files navigation

FileForge

The open-source, privacy-first document toolkit that runs entirely in your browser.

No server uploads. No sign-ups. No limits. Just fast, secure document processing.

MIT License Next.js TypeScript Bundle Size PRs Welcome

Live Demo · Report Bug · Request Feature


Why FileForge?

Most online document tools upload your files to remote servers. FileForge processes everything locally in your browser using WebAssembly-powered libraries. Your files never leave your device.

FileForge iLovePDF / SmallPDF
100% Browser Processing
No Server Upload
No Sign-up Required ❌ (limited)
Completely Free ❌ (freemium)
Open Source
Works Offline
First Load Size 104 KB 2+ MB

20 Professional Tools

PDF Tools (10)

🔓
Unlock
Remove passwords & restrictions
Batch support
📋
Merge
Combine multiple PDFs
Drag to reorder
✂️
Split
Divide by page ranges
or individual pages
📄
Extract
Pick specific pages
Custom ranges
🔄
Rotate
90° / 180° / 270°
All or specific pages
📦
Optimize
Strip metadata
Reduce file size
💧
Watermark
Text watermarks
Tiled / Center / Diagonal
🔢
Page Numbers
Auto-numbering
5 positions, 2 formats
🗑️
Delete Pages
Remove unwanted pages
With confirmation
ℹ️
PDF Info
Metadata viewer
One-click copy

Image Tools (6)

🖼️
Image → PDF
JPG/PNG to PDF
Batch support
📷
PDF → Image
Pages to PNG
High-quality 2x render
🗜️
Image Compress
Reduce file size
Quality control
🔍
Image Resize
Scale 10%–200%
Batch support
🧩
Image Stitch
Combine images
Vertical / Horizontal
🎨
Image Convert
PNG ↔ JPG ↔ WebP
Batch support

Document & Text Tools (4)

📝
DOCX Viewer
Preview Word docs
in browser
📋
PDF Text
Extract text content
from PDF files
📝
Text → PDF
Type text, create PDF
Instant conversion
🌐
HTML → PDF
Convert HTML files
to PDF documents

Architecture

Key design decisions:

  • Dynamic importspdf-lib (225KB), pdfjs-dist, jszip (100KB), and mammoth are lazy-loaded only when a tool is actually used, keeping the initial bundle at just 104KB
  • Static Site Generation — All 21 pages are pre-rendered at build time for instant loading
  • Zero backend — No API routes, no database, no server-side processing. Deploy anywhere that serves static files
  • SEO-first routing — Each tool has its own URL (/unlock, /merge, etc.) with dedicated meta tags, Open Graph, and structured data

Features

User Experience

  • 🌐 Bilingual — Full Korean + English support with auto-detection from navigator.language
  • 🌙 Dark mode — System preference auto-detection + manual toggle, fully themed across all pages
  • 🔍 Tool search — Instant search with / shortcut, categorized grid (PDF / Image / Document)
  • 📱 Mobile-first — Fixed bottom CTA bar, responsive layout, touch-friendly 44px targets
  • ⌨️ Keyboard shortcutsEsc to go home, / to search tools, Ctrl+Enter to execute
  • 🔄 Batch processing — Upload multiple files with real progress bar, image thumbnails, file summaries
  • 📊 Smart context — Page count hints, file size warnings, processing time, character/line/page count
  • 🔗 Share — Native share API on mobile, clipboard fallback on desktop
  • 🎯 Contextual suggestions — Related tools based on what you just used
  • 🖱️ Drag & drop — Full drag-and-drop support for all file types (PDF, images, DOCX, HTML)
  • 🖼️ Image previews — Upload thumbnails and result grid preview for image operations

Technical

  • 112KB First Load — Optimized through dynamic imports and tree-shaking
  • 🏗️ 21 static pages — Pre-rendered with generateStaticParams
  • 🔍 Full SEO — Sitemap, robots.txt, per-tool meta tags, JSON-LD structured data
  • 📲 PWA ready — Web app manifest, SVG favicon, Apple mobile web app support
  • Accessible — Skip-to-content, aria-labels, focus-visible, semantic HTML, WCAG AA, prefers-reduced-motion
  • 🛡️ Security hardened — XSS-safe (DOMParser), CSP headers, X-Frame-Options, no server-side data
  • 💾 Persistent state — Language, theme, history, and processed count stored in localStorage
  • 🔒 Memory safe — Proper cleanup of Object URLs to prevent memory leaks
  • 🔤 Optimized fonts — Self-hosted Inter via next/font (no external requests)
  • 📦 Cache optimized — Immutable cache headers for static assets (worker, favicon)

Quick Start

Prerequisites

  • Node.js 18+
  • npm or yarn

Development

# Clone the repository
git clone https://github.com/concrete-sangminlee/pdfremover.git
cd pdfremover

# Install dependencies
npm install

# Start development server
npm run dev

Open http://localhost:3000 in your browser.

Production Build

npm run build
npm start

Deploy to Vercel

Deploy with Vercel

One-click deploy. No configuration needed.


Project Structure

app/
├── page.tsx                 # Home page (tool grid)
├── [tool]/page.tsx          # Dynamic tool routes with per-tool SEO
├── components/
│   └── toolkit-app.tsx      # Main client component (all UI + logic)
├── lib/
│   └── config.ts            # Shared types, tool definitions, colors
├── layout.tsx               # Root layout, meta tags, next/font
├── globals.css              # Design system (Tailwind + custom)
├── sitemap.ts               # Dynamic sitemap generation
├── robots.ts                # Robots.txt generation
├── error.tsx                # Error boundary
└── not-found.tsx            # 404 page
public/
├── manifest.json            # PWA manifest
├── pdf.worker.min.mjs       # PDF.js web worker
└── icon.svg                 # SVG favicon

Tech Stack

Technology Purpose
Next.js 14 Framework (Static Site Generation)
React 18 UI library
TypeScript 5 Type safety
Tailwind CSS 3 Styling
pdf-lib PDF processing (client-side)
pdfjs-dist PDF rendering & text extraction
mammoth DOCX to HTML conversion
JSZip ZIP packaging for batch downloads

Contributing

Contributions are welcome! Here are some ways you can help:

  • 🐛 Report bugsOpen an issue
  • 💡 Suggest featuresStart a discussion
  • 🔧 Submit PRs — Fork, branch, commit, and open a pull request
  • 🌍 Add translations — Help us support more languages
  • 📝 Improve docs — Fix typos, add examples, clarify instructions

Development Guidelines

  1. No server-side processing — All document operations must run in the browser
  2. Keep bundle small — Use dynamic imports for heavy libraries
  3. Bilingual — All user-facing strings must be in both Korean and English
  4. Accessible — Follow WCAG AA guidelines
  5. Mobile-first — Test on mobile viewports
  6. Memory safe — Always revoke Object URLs after use

Roadmap

  • Dark mode — System preference + manual toggle, 100% coverage
  • Tool search — Instant search with / shortcut, categorized grid
  • Keyboard shortcutsEsc, /, Ctrl+Enter, Ctrl+V
  • Image previews — Upload thumbnails + result grid preview
  • Batch progress — Real-time percentage bar for all batch operations
  • WebP support — Full WebP support in Image to PDF
  • Security hardening — CSP headers, XSS-safe parsing, Permissions-Policy
  • PDF password protection (encryption)
  • More languages (Japanese, Chinese, Spanish)
  • Service worker for full offline support
  • PDF preview before processing
  • Unit tests for all tools
  • PDF form filling

License

This project is licensed under the MIT License.


Built with privacy in mind for users worldwide.

If you find this useful, please consider giving it a star.

About

Open-source, privacy-first PDF toolkit. 10 professional tools running 100% in your browser. No server uploads, no sign-ups, no limits.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors