A Solo app is one HTML file. It runs in your browser, derives its own keys from your passphrase, and reads and writes an encrypted database held by a public network of nodes that cannot read any of it. There is no API server in the middle. There is no company operating your account. Close the tab and nothing is running anywhere on your behalf.
The interesting part is what survives that deletion. Most "no backend" apps are single-player: your data lives in your browser, and sharing it means adding a server back. Solo apps keep the multi-user half — several people, several devices, one shared ledger — because membership is a key, not a login, and the database is a network rather than a machine.
The third rebuild of the same product, with one variable moved each time: React + FastAPI + MongoDB, then the same app on blind storage, then this — no server at all. Invoice numbers are claimed on the network so two of your devices cannot mint the same one. "PDF" is a print stylesheet, because a page holding master keys runs nobody else's code.
Open InvoiceFlow Solo → sourceMulti-user is the part people expect to be missing, so it is worth being precise about what works and what it costs. Two people holding invites to the same ledger both read and write it. Writes carry the writer's identity, so concurrent edits merge by rule rather than by last-write-wins. Sequence numbers — invoice numbers, order numbers — are arbitrated by the network, so two devices offline at the same time still cannot collide. What you do not get is a server enforcing permissions: anyone with the invite has the ledger. Read-only sharing and per-field grants do not exist yet.
A file served from a web host is a file that host can change. So the app is also stored in the database it runs on: a content-addressed copy sits on the network, and an ~80-line loader fetches it, verifies the hash in your browser, and only then runs it. The URL contains the hash, which makes the address the integrity check. Nobody can swap the app under its users — including us.
Being honest about the trade. Lose both your passphrase and your invite and the data is gone: the property that locks a storage provider out is the same property that locks you out. There is no reset link, because there is nobody to send it. Keep the recovery kit the app can export.
Time tracking, client CRM, expenses, inventory, case notes, reading lists. If it is records with dates, amounts and names, and the sharing is "a handful of people I trust", it fits. Start from the browser guide — it is the same vendored client this page's app uses.
Build one →