InlinePDF is a local-first PDF toolkit and iLovePDF alternative.
- All PDF processing runs client-side in the browser.
- No file uploads.
- No server-side PDF processing.
- No authentication, database, or user accounts.
- Features are shipped only when they can run fully local-first.
/Home (Header + Hero + Footer)/toolsTool catalog/mergeMerge PDF (functional MVP)/infoPDF Info (metadata and font insights)/tools/:sluglegacy redirect to/:slug
- React Router + Vite + TypeScript
- Tailwind CSS + shadcn component primitives
- PDF-Lib for merge processing
- PDF.js adapter scaffold for future local-first tooling
- Cloudflare Workers deployment target
app/components/layout/*shared shell (SiteHeader,SiteFooter,SiteShell)app/components/ui/*minimal shadcn component primitives used by pagesapp/features/tools/*tool metadata and local-only policy modelapp/features/merge/*merge feature components and serviceapp/features/pdf/core/*PDF service interfacesapp/features/pdf/adapters/*library adapters (pdf-lib,pdfjs)app/routes/*route modulesapp/styles/*design tokens and base styles
pnpm install
pnpm run devpnpm run lint
pnpm run typecheck
pnpm run build
pnpm run test- Add a new tool entry in
app/features/tools/registry.ts. - Create a feature folder under
app/features/<tool-name>/. - Add a route under
app/routes/and map it inapp/routes.tsas/<tool-name>. Canonical tool paths use direct slugs like/merge,/split,/compress. - Reuse
SiteShelland existing UI primitives. - Keep processing local-only. If not possible yet, mark as
coming_soon.