← back to blog

Why I built a finance app that doesn't sync

· by Zaki

Every major expense tracker syncs your data to a server. Mint did it. YNAB does it. Monarch and Copilot do it. The pitch is always the same — your data, accessible everywhere — and the trade is always the same: the most revealing dataset you own gets a permanent home on someone else's machine.

I'm not a fan of that trade. So I built Mizan as the version that refuses it.

The dataset is the problem

A spending log is a granular description of your life. Where you eat, what you read, who you pay rent to, what you bought when you were stressed, what hospital you went to in March, the gym you stopped going to in June. It's not "metadata." It's not "anonymous analytics." It's a near-complete behavioural profile that updates every day.

Cloud finance apps don't just hold this dataset — they're architecturally required to. Sync needs a server. Bank linking needs a server. Multi-device "just works" needs a server. The whole product premise depends on the data not being yours alone.

Mint shut down in 2024 and the data went to Credit Karma, which sells to TransUnion. YNAB raised prices twice in two years. Monarch costs $14.99 a month. Copilot wants direct access to your bank. Each one is a slightly different shape of the same shape: give us the dataset, trust us forever, and pay for the privilege.

The offline alternatives feel like punishment

The offline finance apps that already exist — Monefy, Money Manager, 1Money, Wallet — solve the privacy problem the way the web solved it in 2008: with apps that look like they were designed in 2008. Banner ads. Dated icons. No encrypted backup. No AI assistance. No foldable layout. No story you'd tell anyone proud-faced.

That gap is the whole reason Mizan exists. Privacy shouldn't require accepting a worse product. The privacy-respecting answer should also be the more thoughtful one — typography you'd notice, a backup mechanism you'd actually trust, a layout that adapts to whatever device you opened it on.

What "doesn't sync" actually means in Mizan

Mizan keeps your spending log in a SQLite file inside the app's private sandbox on your phone. There is no Mizan account. There is no Mizan server. If you uninstall the app, the data is gone — same as a paper notebook thrown in the bin.

Backup is the same shape: you pick a passphrase, you get a single encrypted file, you put it wherever you want — Drive, iCloud, USB stick, email to yourself. Mizan never sees the file. PBKDF2-SHA256 with 600,000 iterations derives the key, AES-256-GCM seals the contents. The crypto is the boring kind on purpose. If you forget the passphrase, the file is unreadable. That's a feature.

The optional AI assistant is the only thing in the app that touches the network, and only if you set it up. You bring your own key — OpenAI, Anthropic, Groq, OpenRouter, Gemini, DeepSeek, a self-hosted Ollama, anything OpenAI-compatible. Mizan never proxies through a Mizan server because there is no Mizan server. If you don't configure a provider, the app makes zero outbound requests. You can verify that with airplane mode.

What I gave up to ship this version

No bank linking, ever. No automatic transaction import. No multi-device sync. No "open the app on your laptop and see your phone's data." Each of those features is the easiest revenue lever in the category, and each one breaks the privacy promise. I'd rather ship a smaller app that's true than a bigger app that isn't.

The pricing reflects the same call. Free tier with soft caps — 3 budgets, 3 recurring transactions, 5 categories — covers a real person's first month of use. Premium is $3.99 a month, $19.99 a year, or $49.99 lifetime. The lifetime tier is there so people who hate subscriptions have an exit. I built the app to last; the pricing should last too.

The two-second proof

Open Mizan. Turn on airplane mode. The app still works. Every cloud-finance app you've used breaks. That's the entire pitch in one gesture.

If that gesture matters to you, Mizan is for you. If it doesn't, you have plenty of other options — and I'd rather you used one of them than asked me to compromise on the only thing that makes this app worth building.

— Zaki