I Built a Budget App With Zero AI, Zero Backend, Zero Tracking — Here's Why
Every few months, I'd build a new budget spreadsheet. Income allocations, category targets, savings goals — the whole thing. It looked great for about two weeks. Then life happened, I stopped updating it, and three months later the plan and reality had completely diverged.
Fixing a spreadsheet is tedious enough that most people just… don't.
So I built DonFlow — a budget planner that compares what you planned to spend versus what you actually spent. And I made three deliberate choices that go against every current trend.
Choice 1: Zero AI
I know. In 2025, not using AI in your app feels like refusing to use electricity. But here's the thing: your financial data is the most sensitive data you have. I didn't want it touching any API, any model, any third-party service.
More importantly, budget planning isn't an AI problem. It's a discipline problem. You don't need GPT to tell you that you overspent on dining out. You need a tool that shows you the drift between your plan and reality, clearly and immediately.
No AI. Just math and good UX.
Choice 2: Zero Backend
DonFlow runs entirely in your browser. IndexedDB for storage, SheetJS for spreadsheet parsing, GitHub Pages for hosting. That's it.
Why? Because every server is a liability.
- A server means uptime monitoring, security patches, database migrations.
- A server means user accounts, password resets, GDPR compliance.
- A server means monthly costs that need monthly revenue to justify.
- A server means someday shutting it down and orphaning users.
DonFlow has none of those problems. Fork the repo and self-host on any static server. The deployed version will work as long as GitHub Pages exists. There's nothing to shut down because there's nothing running.
Network requests when using DonFlow: 0
(after initial page load)
Don't trust me? Open DevTools. Check the Network tab. You'll see zero requests while using the app. That's not a marketing claim — it's an architectural guarantee.
Choice 3: Zero Tracking
No analytics. No telemetry. No cookies. No fingerprinting. No "anonymous usage data."
This means I have no idea how many people use DonFlow. I don't know which features they use most. I don't know their screen sizes, their browsers, their countries.
And honestly? That's fine. I built this tool for myself first. If others find it useful, great. But I didn't want to compromise the privacy promise for vanity metrics.
What DonFlow Actually Does
The core loop is simple:
- Set your budget structure — Define income, categories, and allocation percentages
- Upload transactions — CSV or XLSX from your bank/card (auto-detects 14+ card formats)
- See the drift — Progress bars show plan vs. actual per category
- Get warnings — When spending diverges from your plan, you'll know
- Simulate changes — What-if mode lets you test budget adjustments before committing
It's intentionally boring. No AI insights, no social features, no gamification. Just a clear picture of where your money goes versus where you said it should go.
The Boring Tech Stack
- React + TypeScript + Vite — Fast, typed, well-documented
- Dexie.js — IndexedDB wrapper that makes client-side storage pleasant
- SheetJS — Parse any spreadsheet format without a server
- GitHub Pages — Free hosting, no infra to manage
I specifically avoided trendy choices. No Rust backend. No GraphQL. No microservices. No Docker. Every dependency is a maintenance burden, and I wanted the lowest possible maintenance burden.
What I Learned
1. Local-first is harder than it looks. IndexedDB has quirks. Browser storage limits vary. Safari has its own opinions about everything. But the payoff — true data ownership — is worth the friction.
2. "No backend" is a feature. In a world where every app wants your email, your data, and your attention, "we literally can't see your data" is a differentiator.
3. Spreadsheet refugees are a real market. So many people have abandoned budget spreadsheets not because they don't work, but because maintaining them is tedious. The gap between "spreadsheet" and "full SaaS" is underserved.
4. Constraints breed focus. No backend meant I couldn't add "nice to have" features that require a server (sync, collaboration, notifications). That forced every feature to earn its place based on client-side feasibility alone.
Try It
🔗 DonFlow — Click "Try Demo Data" to explore
📂 Source Code — MIT licensed, every line auditable
If you're a Google Sheets refugee looking for something more structured but less invasive than YNAB, give it a shot. Your data stays on your device. Always.
📚 More Build-in-Public
- I Built a Finance App With Zero Backend — The full technical deep-dive into DonFlow
- Share Your Web App State via URL — No Backend Required — How DonFlow shares demo state without a server
- I Built 23 Free Developer Tools in 2 Weeks — Same no-backend philosophy, 23 different tools
- I Built 27 Browser Games in 2 Weeks — Shipping fast in a completely different domain
What's your approach to budget tracking? Spreadsheet? App? Pretending money doesn't exist? I'd love to hear in the comments.
- Why I Chose IndexedDB Over a Backend for My Finance App — Technical deep-dive into DonFlow storage architecture
📘 Free Resource
If you are building with a $0 budget, I wrote a playbook about what works, what doesn't, and how to think about the $0 phase.
📥 The $0 Developer Playbook — Free (PWYW)
Want the deep dive? The Extended Edition ($7) includes a 30-day launch calendar, 5 copy templates, platform comparison matrix, and revenue math calculator.
Top comments (2)
This is honestly refreshing to see. I built a few small browser-only tools myself, and the biggest benefit was zero maintenance stress — no server, no downtime, no user data risk. Also from a user side, knowing financial data never leaves the device builds instant trust. Local-first apps are underrated.
Zero maintenance stress is exactly right. No server means no 3 AM alerts, no "your SSL cert expired" emails, no database migration headaches. The IndexedDB approach has been surprisingly robust — the data just lives in the browser and survives updates. Glad to hear you've had the same experience with browser-only tools!