Marina DiPonio
≈ Self-Hosted · Solo Build
A self-hosted personal budgeting app · Designed & built end-to-end · Solo
Foreshore replaces the budgeting spreadsheet with something calmer and more honest. Charges arrive from your bank, you sort each one into a category with a tap, and animated water-fill tiles show how full each budget is. It has a coastal aesthetic, a dark-mode-first interface, and a design language built around one rule: the app never pretends to know more than it does.
I wanted a budgeting tool I fully owned — my data on my hardware, nothing sold to a third party, no subscription, no ads. So I built the whole stack: the design, the app, and the server it lives on.
The whole app turns on a single gesture: tap a charge, drop it in a category. Around that sit water-fill budget tiles, a Goals screen with savings targets, an Overview with spending breakdowns, and a Journal.
Every category can be a Hard limit that flags you when you cross it, a Soft target that stays quiet, or None that just tracks spending and stays out of the math. The point is to plan without being scolded.
A new person goes from zero to a working budget in six screens — pick a few categories, say what you expect to earn, and choose how charges should arrive.


Everything is built on a custom design system in a coastal palette — teal, foam, and sand — dark-mode-first, with colour-coded categories that flow straight into the Sort grid.
The backend is Node and Express with one firm rule: a write only counts once it's confirmed synced. No phantom saves. It's built on top of Actual Budget's sync engine, so the underlying data is stored encrypted.
Bank sync is optional and one-directional. Through SimpleFin, Foreshore can observe charges but can never move money — and it never sees your bank password.
When money is still syncing, the app says so rather than showing a fake number. A small deposit you didn't plan for is surfaced as a windfall — something to save on purpose — instead of being quietly absorbed.
Fonts are self-hosted and the app makes exactly one outbound connection — and only when the user opts into bank sync. The whole thing is containerized with Docker so it can run isolated instances.
The part I'm proudest of: I took a dead desktop, installed Linux on it, and turned it into a private home server — reachable only over a secure mesh network, with no exposure to the public internet.
I made it survive power cuts unattended, run isolated instances for different people, and connect to real banks read-only. It's a server I don't have to babysit.
The same honesty runs through the failure states: a read-only mode, a calm "can't reach your ledger" screen, and loading states designed so the app never lies about what it knows.
It went from a sketch of a water-fill grid to a working app pulling real transactions on my phone — my data, my hardware, no subscription, no ads. I shipped it for friends and family to use.
Foreshore pulled together product and UX design, a design system, front-end engineering, a Node backend, Docker, Linux server administration, networking, working with financial APIs, and a lot of careful debugging on real hardware — end to end, by one person.
Accessibility