Free PDF tools running entirely in the browser. No server, no uploads, no sign-up.
- Next.js 14 (App Router)
- pdf-lib — client-side PDF processing
- Google AdSense — pre-wired, activate with one line change
npm install
npm run dev
# → http://localhost:3000app/
page.js ← Homepage
layout.js ← Global layout + AdSense slot
globals.css ← Design system (CSS variables)
sitemap.js ← Auto-generated sitemap for Google
tools/
merge/page.js ← Merge PDFs
split/page.js ← Split / extract pages
compress/page.js ← Compress PDF
rotate/page.js ← Rotate pages
delete-pages/page.js ← Delete specific pages
remove-password/page.js ← Remove PDF password
imprint/page.js ← Legal (required in Germany)
privacy/page.js ← Privacy policy
components/
Providers.js ← Language context (EN/DE)
Header.js ← Logo + nav + language switcher
Footer.js ← Footer with legal links
AdBanner.js ← AdSense wrapper (activate with 1 flag)
ToolShell.js ← Shared layout for tool pages
lib/
i18n.js ← All translations (EN + DE)
pdfHelpers.js ← All PDF logic (merge, split, compress…)
middleware.js ← Subdomain routing
- Apply at adsense.google.com (need imprint + privacy page to be live)
- Once approved, open
components/AdBanner.js - Set
ADSENSE_ACTIVE = true - Set
PUBLISHER_ID = "ca-pub-XXXXXXXXXXXXXXXX"(your ID) - Replace slot numbers in each tool page
- Uncomment the
<script>tag inapp/layout.js
- Open
lib/i18n.js - Copy the
enblock, change the key (e.g.fr) - Translate all values
- Add to
supportedLangsarray andlangNamesobject
Each tool can run on its own subdomain: merge.ilovepdf.fun, split.ilovepdf.fun, etc.
Add these CNAME records:
| Type | Name | Value |
|---|---|---|
| CNAME | merge | cname.vercel-dns.com |
| CNAME | split | cname.vercel-dns.com |
| CNAME | compress | cname.vercel-dns.com |
| CNAME | rotate | cname.vercel-dns.com |
| CNAME | delete-pages | cname.vercel-dns.com |
| CNAME | unlock | cname.vercel-dns.com |
Go to Project → Settings → Domains and add each subdomain.
The routing logic is already in middleware.js.
# 1. Push to GitHub
git init && git add . && git commit -m "init"
git remote add origin https://github.com/YOURNAME/ilovepdf-fun.git
git push -u origin main
# 2. Go to vercel.com → New Project → Import repo → Deploy
# 3. Add your domain: Settings → Domains → ilovepdf.funOpen app/imprint/page.js and fill in your real name and address.
Without this, AdSense may reject your application.
- Create
app/tools/YOUR-TOOL/page.js - Add the PDF logic to
lib/pdfHelpers.js - Add translations to
lib/i18n.js(bothenanddeblocks) - Add to the
TOOLSarray inapp/page.js - Add to
sitemap.js - Optional: add subdomain mapping in
middleware.js