Inspiration

Hearth started as our own household's dashboard. We're a couple who earn and spend in two currencies (SGD and IDR), and no single app held the whole picture: the accounts, the budget, the bills, the savings goals, and the agreements we'd made about money and about each other. Every budgeting app treats money as one person's job. In a real household it's a shared job, and the hard part isn't tracking a number. It's agreeing on it together.

[Add the moment that made you build it, e.g. the conversation or missed bill that started this.]

So we set out to build one place a household runs from, where both partners see the same truth and change it together.

What it does

Hearth is a shared dashboard for one household.

  • Money: accounts, a full transaction ledger, envelope budgets that show whether you're on pace, savings goals, bills with autopay status, a 12-month net-worth trend, and an investment portfolio with profit per quarter or year. Everything adds up in the household's own currency, using exact exchange rates. Money is never rounded through floating-point numbers.
  • Marriage: regular retros with a mood chart, a yearly shared vision, and agreements. An agreement only changes when both partners sign the proposal. Every past version is kept, so a removed agreement can be seen again and restored.
  • People: each member has their own capabilities, so a child doesn't see what a parent sees. A partner joins through an invite link.
  • Three ways in: the web app, a Telegram bot ("spent $12 on lunch" becomes a transaction), and a command-line tool, so an AI agent can do data entry safely.

What it doesn't do yet: automatic bank sync (see Challenges).

How we built it

One founder working with AI coding agents, .

  • Stack: Go backend (clean architecture), React + TypeScript frontend, Postgres, Docker Compose. A lint check enforces the architecture rules on every change, so the code can't quietly drift into a tangle.
  • Written before coded: 29 design specs and 11 architecture decision records. Every non-obvious choice is written down at the point where someone would be tempted to change it.
  • Tested hard: over 1,300 Go test functions and 110 frontend test files. We break the code on purpose to prove the tests actually catch bugs. Nothing counts as done until someone has clicked through it in a real browser.
  • Cheap to run: production is one small Hetzner server (a few euros a month). Encrypted backups go out every night, and we've proven they can be restored. The AI features use free open-source models, so they cost us nothing to run.

Challenges we ran into

  1. Bank sync isn't legally open to us. Singapore's SGFinDex is only available to licensed financial institutions. Instead of faking it, we made accounts arrive by manual entry or by importing a file. The design is ready to plug a real bank source in later.
  2. Email from a free domain didn't work. Mail providers wouldn't send from our free hostname. So we made Telegram a second delivery channel: a partner can be invited and let in through the bot, with no email at all.
  3. "Every test passes" wasn't the same as "it works." One feature passed all 15 of its checks and still confused a real user on day one. Since then, walking through the change in a real browser has been a required step before anything counts as finished.
  4. Money in two currencies is harder than it looks. Adding SGD to IDR before converting gives a silently wrong total. Every sum now converts first, and any amount without an exchange rate is listed as excluded, never counted as zero.

Accomplishments that we're proud of

  • In production since 15 August 2026, with a real household that signed up through the real sign-up form.
  • 135 of the 149 features in this release's design are built or partly built. Every partial one is labelled with exactly what's missing.
  • Disaster recovery we've actually tested: we pulled a backup out of storage, decrypted it, restored it, and every table and every monetary figure matched. The decryption key also exists on paper, away from the server, so the household's data survives losing the server and losing the owner.
  • Agreements as a two-signature record: it's append-only and versioned, not a plain editable list. It's the feature no budgeting app has.
  • Built for AI agents: a CLI, personal API tokens, a Telegram bot that understands plain sentences, and a daily digest message. All of them pass through the same security checks as the web app.
  • Security reviews run in-house, with the fixes shipped: per-IP limits on sign-in, protection against forged logins, and browser security headers.

What we learned

We recorded every defect and what it taught. 25 patterns came out of it. The four that matter most:

  • A test that can't fail protects nothing. Five of our tests passed even against code we broke on purpose. Now we check that each new test can go red.
  • Simulated environments lie. A pop-up window passed all its tests and crashed every time it opened in a real browser.
  • A loud failure beats a silent partial success. Several bugs said "success" when only half the work had happened.
  • Fixing one bug rarely fixes the class. After every fix, we search for the same mistake elsewhere. It has turned up more than once.

The meta-lesson: a solo founder with AI agents can ship at team speed, but only with written specs, tests we've proven can fail, and a real human walkthrough.

What's next for Hearth

  • Close the named gaps: include investments in net worth, CSV export, the automatic month-end "roll unspent budget into savings" option, and a time zone per household.
  • Bank data via file import first, and a real bank-sync provider when a licensed partner is available.
  • Family calendar: planned in the design, deferred from this release, not dropped.
  • Selling it: self-serve sign-up already exists (one household per account). Billing and plans don't exist yet. [Add pricing, your target market (e.g. dual-income and cross-border couples in SEA), go-to-market, and what the raise pays for.]

  • Close the named gaps: include investments in net worth, CSV export, the automatic month-end "roll unspent budget into savings" option, and a time zone per household.
  • Bank data via file import first, and a real bank-sync provider when a licensed partner is available.
  • Family calendar: planned in the design, deferred from this release, not dropped.
  • Selling it: self-serve sign-up already exists (one household per account). Billing and plans don't exist yet. [Add pricing, your target market (e.g. dual-income and cross-border couples in SEA), go-to-market, and what the raise pays for.]

Built With

Share this project:

Updates

Submission history