DEV Community

Cover image for I Built 35+ Browser-Side Tools Because I Was Tired of Uploading My Data to Random Servers
Zhang Enquan
Zhang Enquan

Posted on

I Built 35+ Browser-Side Tools Because I Was Tired of Uploading My Data to Random Servers

Every time I needed to format a JSON payload or compress an image, I found myself on some random tool site with three problems:

  1. My data went to their server. Paste a password or an API token into a "hash generator" and you're just trusting that site not to log it.
  2. Ads everywhere. The tool was buried under banners, and half the buttons were ad-click traps.
  3. Sign-up walls. Want to download your converted file? Create an account first.

So I built AI SubTools — a collection of 35+ free tools where everything runs client-side in JavaScript. No uploads. No accounts. No ads.

Why client-side matters

It's not just a privacy stance. When the tool runs in your browser:

  • It's instant. No round-trip to a server, no queue. Image compression happens as fast as your CPU allows.
  • It works offline once the page is loaded.
  • Your data never leaves your device. For tools that touch passwords, tokens, or checksums, this should be the default, not a feature.

Some of the more interesting tools

  • Cron expression generator & tester — with plain-English explanations of what your expression actually does
  • PNG background remover — runs entirely in-browser, no upload
  • Robots.txt + XML sitemap generator — for the SEO-minded
  • EAN/UPC barcode creator — for e-commerce sellers
  • JSON formatter & validator, Base64 encoder/decoder, MD5/SHA-256 generators — the daily-driver classics

The technical trade-offs

The hardest parts were making image compression and background removal perform well without WASM. Canvas-based processing is fast enough for most images, but there's a real art to avoiding UI freezes on large files — chunked processing and careful memory management matter more than raw algorithm speed.

What's next

The site is a side project that grew out of my own daily frustration. New tools are added regularly, and I'm currently prioritizing:

  • More file-format converters
  • Better mobile experience for the image tools

What tools would you want added? I'd genuinely love to hear what's missing from your daily workflow — the best suggestions will get built.


P.S. Everything is free, forever. No premium tier hiding the useful stuff.

Top comments (3)

Collapse
 
presend profile image
Presendapp

Same instinct here (40 free browser tools, no accounts, no uploads) — the sign-up-wall-to-download-your-own-file pattern is such a specific, recognizable annoyance that I think everyone who's built one of these sites has the same origin story. Curious about your chunked-processing approach for the image tools — did you land on a fixed chunk size, or something adaptive based on file size/device? We've been tackling a similar "avoid freezing the tab on a big file" problem from the API side instead (Workers CPU limits rather than browser main-thread blocking), different constraint but the same underlying fight against a strict budget.

Collapse
 
devenquan profile image
Zhang Enquan

Fixed chunk size, deliberately boring — adaptive chunking sounds smart until you're debugging three code paths. I cap by device memory where navigator.deviceMemory is available and fall back to a safe default otherwise. Curious how the Workers CPU-limit side differs, but honestly the browser thread gave us fewer surprises.

Collapse
 
presend profile image
Presendapp

Workers CPU-limit is a hard wall-clock budget per request (currently 30s on the free tier, longer on paid) rather than a UI-responsiveness concern — so the failure mode is different: instead of a frozen tab, you get the whole request killed and the client sees a 500 with no partial result. That pushed us toward fixing the actual algorithmic complexity (an O(n²) byte-array rebuild on every streamed chunk) rather than chunking the work differently, since there's no "next frame" to yield to on the server side. Deliberately boring is a good design principle either way.