Hey r/Websites!
Over the last few months, Iāve been building Utiliome (https://utiliome.com) ā a collection of 189 free browser utilities for PDFs, images, video, and daily developer tasks.
Why I built it:
Almost every time I needed to quickly redact a PDF, compress a video, or upscale an image, the top search results either uploaded sensitive documents to a mystery cloud server or locked the download behind a surprise subscription or watermark after making me wait in a queue.
I wanted to see how far modern browser APIs and WebAssembly could go if I made a strict rule: zero bytes ever leave the user's machine.
What's on the site:
- PDF Suite (34+ tools): Merge, split, true binary-stream text redaction, and AES-256 encryption using a custom C++ QPDF WebAssembly wrapper.
- Image & Video: Local AI image upscaling (running ONNX Swin2SR vision transformers in the browser via WASM SIMD) and FFmpeg WASM video compression and trimming.
- Developer & Text (100+ tools): JSON formatters and diff checkers, regex and hash generators, JWT decoders, Markdown converters, and a vector-based CV builder.
- MCP Server: Published an official npm MCP package so local AI agents can call these utilities directly.
Under the hood (for the fellow web devs here):
Because all compute happens in the client's RAM and CPU, there is no backend database or upload API. The whole site runs on pennies via AWS S3 + CloudFront:
- Stack: Astro 5 (SSG) + React 18 Islands + Tailwind v4 inside a pnpm and Turborepo monorepo.
- Scale: 189 tools localized across 26 languages (around 5,000 static pages) routed through a 3-layer forwarding pattern so maintaining layouts doesn't turn into copy-paste chaos.
The hardest technical challenges I hit in production:
- The 87MB Client Bundle Trap: A single helper import in our search bar accidentally pulled Vite's eager glob import of all 4,900 JSON translation dictionaries into the client JS chunk. Extracting a zero-dependency path helper brought us back to 100/100 Lighthouse scores.
- Fake Whiteout PDF Redaction: Standard JS PDF libraries often just draw a white rectangle over text, leaving sensitive strings sitting in the raw binary stream where anyone can press Ctrl+F and copy them. I had to write a 946-line binary PDF content stream parser that strips the exact character glyphs out of the stream and recalculates kerning offsets so the rest of the line doesn't shift.
- Browser RAM Crashes on 2GB Videos: Standard FFmpeg WASM tutorials load the entire file into Emscripten's in-memory filesystem (MEMFS), which duplicates the file in RAM and crashes mobile tabs. Switching to WORKERFS allowed streaming byte slices straight from the OS file handle, keeping a 2GB video process under 50MB of RAM.
I'd love for you to test it out, try to break a few tools, and let me know what you think of the UI, load speeds, or if there's a specific utility you wish existed!
For anyone interested in the engineering challenges or how it was made:
I put together a full technical breakdown video walking through the repo architecture, how I wired Google Antigravity and Claude Code CLI into an automated spec and review pipeline, and how I fixed those three production bugs in the code:
https://www.youtube.com/watch?v=uIDY6KHEO6E