DEV Community

Cover image for I built a budget app with no backend — everything lives in localStorage
cyl08
cyl08

Posted on AI-assisted

I built a budget app with no backend — everything lives in localStorage

Every budgeting app I tried wanted a monthly subscription. Which is a bit ironic for software whose whole job is to help you spend less.

So I built Mochi — and made one architectural decision that shaped everything else: no backend at all.

No server. No account. No database. It's a single HTML file, about 75 KB, and all your data lives in your browser's localStorage.

Here's what that constraint actually costs, and what it buys.

What you give up

No sync. This is the big one, and I won't pretend otherwise. Your phone and your laptop don't know about each other. Want both? Export a JSON backup from one, import it on the other.

No recovery. Because there's no account, there's no "forgot password" and no way for me to restore your data. Clear your browser storage and it's gone. That's a real risk, so the app nags you to export backups.

No analytics, so no product intuition. I genuinely cannot see how people use it — which features land, where they get stuck. Every improvement is a guess, or comes from someone emailing me.

What you get

Your financial data can't leak, because it never leaves. Not "we don't sell your data" — there is literally no server holding it. That's a different kind of promise.

It works offline, forever. Save the page and it works on a plane. No API can go down.

It costs me nothing to run, so it doesn't have to cost you monthly. This is the part I like most. No infrastructure means no reason to charge a subscription — which is why it's a one-time purchase instead of $5/month.

The technical bits

  • Single index.html, vanilla JS, zero dependencies, no build step
  • Charts hand-rolled with plain CSS and SVG — no chart library
  • Data in localStorage, with JSON export/import for portability
  • PWA manifest + service worker: installs to your home screen, works offline
  • ~75 KB total, boots instantly

The most interesting constraint was the charts. Without a library, a six-month trend chart is an exercise in viewBox arithmetic and remembering that SVG y-axes grow downward. Worth it though — the whole app loads faster than a single page of most apps I compared against.

The annoyance that started it

I built Mochi because of one specific thing: I had no idea what I was spending on AI tools each month. ChatGPT, Claude, Cursor, a couple of API top-ups — individually each felt small, together it was a real number I only saw when the card statement arrived.

So Mochi keeps a dedicated AI-spend ledger: log subscriptions and top-ups, set a monthly cap, watch a six-month trend. It's the one feature I couldn't find in any other budget app.

Why I'm posting this

Partly because the no-backend architecture is genuinely interesting to argue about — the trade-offs are real and asymmetric, and I'd pick it again for this use case.

And partly, honestly, because it's a paid product and I'd like people to find it. If the architecture is interesting to you, it's at https://mochiway.com — one-time price, no subscription, in keeping with the whole point.

Happy to answer anything about the localStorage trade-offs, the no-build-step decision, or what I'd do differently next time.

Top comments (0)