All work

App · Desktop & Mobile

Aequo

A personal finance app built on one promise that is never traded away: no cloud, no account, no tracking. The data lives in a file on your machine, and you own it.

Year2026
RoleDesign & Development
PlatformDesktop (Electron) + Mobile (Expo)
VersionDesktop 2.0.1 · Mobile 2.12.0
Aequo dashboard — balances, cashflow and category breakdown

Overview

What Aequo is

Aequo tracks personal finances across accounts, budgets and savings goals — on desktop and on a mobile companion that read and write the same file. There is no Aequo server anywhere in the picture, and no sign-up.

That constraint is the product, not a detail of the implementation, and it decides arguments. Local password screens, for instance, were rejected outright: an app with no accounts gains nothing real from a fake login. If data at rest needs protecting, the honest answer is encryption with a passphrase — which is what Aequo ships.

Features

What it does

No account, no cloud

Nothing to sign up for and nothing phoned home. Every record lives in one file on your own disk.

Bring your own cloud

Drop the data folder in Dropbox, iCloud or Syncthing. Your client syncs the file; Aequo never sees it.

Encrypted backups

AES-GCM with PBKDF2 key derivation, through the native Web Crypto API — no third-party crypto dependency.

Accounts & currencies

Multiple accounts of different types, 14 currencies, and transfers that stay linked across both sides.

Budgets & goals

Monthly budgets whose spend is always recomputed from the transactions, plus envelope-style savings goals.

24 themes

Twelve palettes across light and dark, driven by CSS variables so even portalled modals inherit them.

Under the hood

One file, not a database

The whole dataset is a single JSON file. SQLite was the obvious choice and the wrong one: its lock manager assumes exclusive local access, and a binary file that mutates in place is exactly what consumer sync clients handle worst. A single JSON is atomic by nature, diffs cleanly, and stays under a megabyte in normal use. The cost — every save rewrites the whole file — is real, and it is paid for with a debounce.

Writes go to a temporary file, get flushed, then rename over the target, with the previous version kept as a backup. Concurrent edits are caught by optimistic concurrency: each save carries a hash of the revision it started from, and a poller in the main process notices when the file changes underneath. On divergence Aequo stops and asks, keeping the displaced version — it never silently overwrites, and it never deletes data on its own.

LayerTechnologies
Desktop shellElectron 33 — main process for filesystem IPC, isolated contextBridge preload
UIReact 18, Vite 5, Tailwind CSS 3, Recharts, lucide-react
TypographyFraunces (display) + Inter (body), tabular figures for column alignment
PersistenceSingle JSON file, pluggable adapters, debounced writes, atomic rename
SyncUser's own cloud folder; SHA-256 revision tokens, external-change poller, conflict backups
CryptoNative Web Crypto — AES-GCM + PBKDF2, no npm crypto packages
SchemaVersioned migrations, idempotent, blocking on downgrade rather than destructive
MobileReact Native + Expo, same file format as desktop
TestsVitest — 208 unit tests over the pure calculation and storage layers

Gallery

Screens