1
1 Comment

Watched freelancers trash every invoice tool for 2 days. Built one extension with no login, no cloud, no backend

Three weeks ago, I was scrolling through a Discord group I'm in.

Freelancers. Designers mostly. Some devs.

Someone asked: "What do you use for invoices?"

The responses weren't answers. They were complaints.

"FreshBooks is too heavy."
"Wave makes me log in every time."
"I just want a PDF, why do I need a dashboard?"
"Honestly? I use Google Docs."

The thread went on for two days. Different people, same frustration.
I recognized the pattern immediately.

The test

I did what I always do when something smells like a real problem: I tested the tools myself.

FreshBooks. Wave. Zoho. Invoice Ninja. A bunch of others.

Here's the thing: they're all good products. Well-designed. Feature-rich. Professional.

But they all share the same DNA: they want to be your finance platform.
Client management. Expense tracking. Time logging. Recurring invoices. Payment gateways. Reports...

And I kept thinking:
What if you just want to send one invoice?
Not build a financial system. Not track anything. Not integrate with anything.
Just... generate a PDF and email it to a client.

The mental model is wrong. These tools assume you want to manage invoices. But most freelancers just want to send one and move on.

The "what if"

What if invoice generation lived inside the browser?

No account creation.
No cloud dashboard.
No server storing your client data.

Open extension > fill fields > generate PDF > close extension.

That's it.

The entire invoice flow compressed into 30 seconds. I tested the hypothesis with a basic prototype. Took me about 4 hours to build the first version.

How i built it

I went all-in on local-first architecture. Not as a marketing angle, as a design constraint.

Tech decisions:

  • Chrome extension instead of SaaS web app
  • LocalStorage for all client data
  • Client-side PDF generation using paged.js
  • No backend at all (seriously, there's no server)
  • License validation via Gumroad API (the only external call, not implemented yet)

What this enables:

  • No login flow
  • Zero latency (everything is instant)
  • Complete privacy (your data never leaves your device)
  • Works offline
  • No subscription to a database
  • No infrastructure costs

What this costs:

  • No cross-device sync
  • No team collaboration
  • No analytics dashboard
  • No integrations
  • If you uninstall it, your data is gone

That last one is intentional. Local-first means local-only.

I'm not trying to build QuickBooks. I'm building the digital equivalent of a paper invoice pad.

The part I didn't expect

As I kept building, something weird happened: the product started to develop a personality.

Not in a forced way. It just... sounded different from every other SaaS tool I'd used.

  • No "revolutionary invoicing solution."
  • No "seamless workflow."
  • No "we're excited to announce."
  • Just: "Invoices. Done before you overthink them."

That line came out naturally while I was writing copy for the landing page. And it shaped everything else. I realized that if the product is anti-bloat, the communication should be too.

So I did something probably insane for a side project: I wrote a communication identity document. 14 pages of rules for how the product talks.

Things like:

  • Never use corporate speak ("leverage", "synergy", "ecosystem")
  • Contractions always ("it's" not "it is")
  • No exclamation marks unless truly earned
  • Fragments are acceptable. They work.
  • Maximum sentence length: 20 words

One of my favorite rules: "TapIT never sounds like it's trying to sell something. It sounds like it's just telling you how something works."

Here's a before/after example:

  • Before: "We're excited to introduce our revolutionary local-first architecture that leverages cutting-edge browser APIs to deliver a seamless invoicing experience."
  • After: "Your data stays on your device. No syncing. No accounts. No one else's servers."

The second version is 13 words. The first is 22. Same information. Half the noise.

I spent more time on this document than I did on the initial code.
Why? Because I've seen too many good products die from bad communication, and I wanted this thing to feel honest.

Where it stands now

I built the extension. Created a simple landing page. Submitted it to the Chrome Web Store.
Pricing is really low on annual billing. Waitlist users get a discount, locked in.

I'm running a waitlist first to validate whether this is actually something people want, or just something freelancers complain about but never change.

The Tech Stack Is Minimal

  • Vanilla JS for the extension
  • React for the landing page
  • paged.js for PDF generation
  • Gumroad for payments
  • Zero backend infrastructure

What I'm testing

The core hypothesis is simple:
Do people actually prefer a tool that does less?

Every product instinct tells you to add features. More templates. More customization. Client portal. Payment links. Recurring invoices.

I'm betting that for a specific segment (solo freelancers who invoice occasionally) the answer is no.

They don't want a robust platform. They want a stapler: fast. Reliable. Doesn't require a manual.

The questions i'm sitting with

Is "no backend" a feature or a limitation? Some people will see it as a dealbreaker. No sync means you can't access invoices from your phone. But it also means I'm not storing your client data on my servers. Is that trade-off worth it?

Can simplicity be a sustainable product?

SaaS logic says you need to expand. Add features. Move upmarket. Build an ecosystem. But what if the entire value proposition is not doing any of that?

Will people pay less than five dollars/month for something this simple?
The gut reaction is "this should be free." But free products need a business model. Ads? Data collection? Upsells? All of those compromise the core promise.

I'd rather charge less than five dollars and keep it simple than make it free and ruin it.

What i'd add (if people actually want this)

If the waitlist converts and people use it, here's what I'd build next:

  • Themes (already partially done, dark mode works)
  • Multi-currency support (already built, just needs more testing)
  • Recurring invoice templates (not automation, just a "copy last invoice" button)
  • Export/import data (so you can manually back up or move between devices)

Notice what's not on that list:

  • Cloud sync
  • Team features
  • Integrations
  • Payment processing
  • Client portal

Those are all good features. They're just not this product.

If you want to try it

I'm not linking the waitlist here because that feels spammy.
But if you're curious, just tell me: would you actually use a tool like this? What would make you switch from whatever you use now?

I'm genuinely curious if this scratches a real itch or if I just built a very well-designed solution to a problem that doesn't bother people enough to change.

Either way, I learned a lot about how much discipline it takes to not add features.

And I now have a 14-page communication identity document that I'll probably use for every project I build from now on.

So even if zero people sign up, I'm calling it a win.

on February 11, 2026
  1. 1

    I tested a bunch of those same bloated tools for client work, and the "I just want a PDF" complaint is real. I started with Wave, looked at Invoice Ninja, and now I'm building ChaseFlow for the opposite end of the problem, reminder 2 after the invoice is already out, lol the narrow tool angle makes sense to me.