A client once sent me a PDF invoice and asked for it as a CSV. Then sent a HEIC photo that needed to be PNG. Then an XML config that needed JSON. Three different tools, three different uploads, three different privacy policies to read.
I got fed up and built one tool that handles all of it locally.
The Stack
The core is surprisingly simple. Each conversion is an "engine" — a small JavaScript module that takes input and returns output:
PDF to JPG: Canvas-based page rendering + per-page export
HEIC to PNG: heic2any library, all client-side decoding
JSON ↔ CSV: PapaParse for CSV, native JSON.stringify/parse
XML ↔ JSON: DOMParser for XML parsing, zero dependencies
SVG to PNG: Canvas drawImage with crossOrigin handling
Markdown to HTML: marked.js, 2KB minified
16 engines total, all running in the browser at for vector graphics
for barcode generation
All of them share the same principle: files stay in browser memory. Open DevTools Network tab while using any of them — zero uploads.
Building browser-local tools taught me that we've normalized sending files to strangers' servers for things our own computers can do faster.
SOCIAL SHARE CARD GENERATOR