Built 6 free browser-only tools instead of one SaaS — here's the tech stack and what I got wrong

Backstory: I kept needing small file utilities (merge a PDF, compress a photo for a form, make a collage) and every free option online wanted me to upload the file to their server, then capped me at 3 files a day unless I paid. For a contract or an ID scan that's a strange thing to accept.

So instead of building one SaaS I built six single-purpose sites that do the work entirely client-side. No server, no account, no upload, no watermark.

Tech stack (deliberately boring):

- pdf-lib for everything PDF (merge, split, rotate, page numbers, watermark, sign, encrypt)

- canvas + WebCodecs for images (compress, resize, convert, crop)

- Vanilla JS, static HTML. No framework, no backend, no database.

- Hosted as static files. Hosting cost is basically zero, which is the whole business model: no server means no per-user cost, so "free forever" is actually sustainable.

- Capacitor to wrap one of them into Android and iOS apps from the same codebase.

What I got wrong:

  1. I assumed "no upload" would sell itself. It doesn't. Users don't read the homepage, and privacy is an invisible feature. My conversion problem is communication, not tech.

  2. I built breadth before distribution. Six sites and ~560 pages live, and I only recently started seriously checking which ones actually rank. Build-then-market is the classic mistake and I made it anyway.

  3. Client-side has real limits I under-planned for: no OCR, and a 200 MB PDF will choke a low-end phone because everything is in memory.

Revenue: essentially zero so far — ads only, and I'd rather be honest about that than pretend. The interesting part for this sub is the cost side: near-zero infrastructure means the runway is infinite, which changes what "failure" even means.

Happy to answer anything about the client-side approach. The sites are pdfonlinefree.com and imageonlinefree.com if you want to see what I mean.

reddit.com
u/FunnyPhotos_1 — 13 hours ago

[Android] FreeCollageImage — photo collage maker t

**What it does:** Makes photo collages entirely on-device. Pick a grid layout, drop your photos in, adjust spacing, corner radius and background, then export a PNG or JPG straight to your gallery.

**Why I built it:** Every free collage app I tried either stamped a logo on the export, locked the good layouts behind a subscription, or wanted access to my entire photo library on first launch. I wanted none of those three.

**The main thing:** no upload. The collage is composed locally, so your photos never touch a server — there isn't one. That also means it works with airplane mode on.

**Price:** Free. No ads, no in-app purchases, no account, no watermark. I'm the developer.

**Link:** https://play.google.com/store/apps/details?id=com.freecollageimage.app

There's also a web version at https://freecollageimage.com if you'd rather not install anything — it's the same code.

**Known limits, so nobody is surprised:** collages above roughly 30 photos get slow on older devices, and there's no cloud sync of unfinished projects, again because there's no server. Happy to hear what layout options are missing.

u/FunnyPhotos_1 — 14 hours ago

[Feedback] Social post designer with no signup — want to know where it falls short vs Canva

postzmaker.com/editor/ — templates and the correct pixel sizes for Instagram post, story and portrait, plus Facebook and LinkedIn landscape. Text, colours, fonts, a brand kit for your logo and palette. Exports PNG, JPG, WebP or PDF, no watermark.

No account at all — you open the editor and start. Everything runs on your device, so your images aren't uploaded and drafts live in your browser.

What I actually want to know, because I'm too close to it:

Where do you hit the wall compared to Canva? I'm assuming it's the template library, but I'd rather hear it than guess.

Is the no-signup thing worth anything to you, or is "sign in with Google" so frictionless now that it isn't a real advantage?

And on mobile: the editor is meant to work fully on a phone, but that's where I've tested least. If it's awkward there I'd like to know how.

Free, permanently, because it costs almost nothing to serve when it runs client-side.

u/FunnyPhotos_1 — 3 days ago

I made an EXIF viewer that shows you the GPS coordinates hiding in your photos

imageonlinefree.com/tools/exif-viewer.html

Drop in a photo and it shows what the file is actually carrying: camera model, date, exposure, and on most phone pictures the exact GPS coordinates of where you took it. Then it strips the lot and gives you a clean copy.

I built it after realising a photo I'd posted publicly had my home address in it, in the sense that the coordinates were accurate to about ten metres. Most social platforms strip EXIF on upload, which is why people assume it's handled — but sending the file directly, over email, WhatsApp as a document, or on a forum, keeps everything.

It runs in your browser, so the photo isn't uploaded anywhere to be read. Which matters more than usual here, given the whole point is looking at sensitive metadata.

Free, no account. The rest of the site has resize, compress, HEIC to JPG and a few others, all working the same way.

u/FunnyPhotos_1 — 3 days ago

[Feedback] Browser-based PDF toolkit — everything runs locally, looking for people to try and break it

pdfonlinefree.com — merge, split, compress, sign, OCR, rotate, page numbers, metadata, watermarks.

The constraint I set myself: nothing gets uploaded. It's pdf-lib and pdf.js running in the tab, so your document is read and rewritten on your own machine. You can check that rather than believe me — F12, Network tab, run any tool, nothing carrying the file goes out.

What I'd genuinely like tested:

Big files. It works in tab memory, so there's a ceiling and I want to know where people actually hit it. A few hundred MB is my guess but I've only tested on my own machines.

Encrypted PDFs. The owner-password kind, the ones that only block printing. Those break a lot of tools silently and I want to know if mine is one of them.

Scanned documents through the OCR, particularly non-Latin scripts. That's the part I'm least confident about.

Mobile. Especially older Android. The memory ceiling is much lower there and I suspect it fails in ways I haven't seen.

No account, no watermark, no paid tier. Tell me what breaks.

u/FunnyPhotos_1 — 3 days ago
▲ 5 r/espanol+4 crossposts

I built a browser-based collage maker — and learned that "Save" silently does nothing on phones

freecollageimage.com — a collage editor that runs entirely client-side. Photos are decoded, laid out and exported in the browser; nothing is uploaded. Vanilla JS and canvas, no framework, and it's also wrapped with Capacitor for the Play Store and App Store.

The part worth sharing here isn't the editor, it's the save step, because it broke in a way I couldn't detect from the code.

An anchor with the download attribute pointing at a data: URL works in every desktop browser. In an Android WebView it does nothing — no download manager is attached unless the host app wires one up, so the navigation is silently dropped. iOS Safari refuses download on data: and blob: URLs from a synthetic click. Neither throws, neither logs, there's no rejected promise to catch. The function just returns and the file never appears.

That's what made it expensive: there is no `if (downloadWorked)`. Chrome DevTools device emulation happily pretends it worked. You only find it by holding a phone. Mine was dead on mobile for months and nobody reported it, because a button that does nothing reads as user error rather than as a bug.

Two different fixes. On Android, a native Capacitor plugin writes the bytes to storage. On iOS, navigator.share({files}) — and there the catch is transient user activation: an await consumes it, so the base64 → File conversion has to be synchronous. fetch(dataUrl).then(r => r.blob()) and canvas.toBlob() both lose the gesture and the share sheet is dismissed without a word. The ugly charCodeAt loop exists purely to stay inside the handler.

The compromise I'm still not happy about: on iOS the user taps "Save" and gets a share sheet where "Save Image" is one option among a dozen apps. It isn't a download and doesn't look like one.

Happy to go into either fix.

u/FunnyPhotos_1 — 13 hours ago