on your machine

The House of Hearthself-hosted personal finance

Nothing leaves this house.

A self-hosted home for your financial data. Plaid brings your accounts in, one encrypted database keeps them, and the dashboard, Claude and whatever you build next all read from the same core.

See how it's built

Personal finance should stay personal.

Most money apps want your bank login, your whole history, and a server of theirs to keep it on. We wanted the opposite.

A ledger you host yourself, kept in a single file you can back up or delete, that answers in plain English and gives every app you build one trusted place to read from.

Where knowing where it all went is as easy as asking.

Most finance apps keep your money in someone else's cloud and open it to anything holding an API key.

This one keeps it at home.

The door

Plaid is the only way in. Transactions arrive through a sync cursor, one page per commit, so a sync that dies on page 487 of 500 picks up at 487.

Removed transactions are soft-deleted, never lost.

Two rooms, one floor

The dashboard and the Claude server are the first two rooms upstairs. Neither keeps logic of its own; both walk down to core/, and so can any room you add.

The cellar

Everything rests in one SQLite file on your disk. The bank tokens inside are sealed with AES-GCM, each bound to its own account so it can't be lifted and replayed against another.

The key hangs outside

The master key never touches the disk. It lives in your system keychain: macOS Keychain, Windows Credential Locker or Linux Secret Service.

Copy finance.db to a stranger's laptop and it opens nothing.

The window

Claude gets a window, never a key. Its server opens the file read-only, never imports the crypto layer, and has no road to Plaid.

The worst it can do is read your spending.

Diagram of the house: Plaid enters through the door, api and mcp rooms sit upstairs over a shared core, finance.db rests in the cellar, the key hangs outside in the OS keychain, and Claude looks in through a window. plaid api/core/ mcp/ finance.db keychain clauderead-only

Ask your money anything, in plain English

Claude can answer things like what did I spend on dining in September?

Connect Claude

Illustrative answers from Plaid Sandbox data

Five read-only tools. Not one of them can write.

The first two apps are ours.
The rest are yours.

The dashboard and the Claude server are just the first tenants. Underneath them is a plain foundation: your accounts, transactions and holdings, synced, encrypted and queryable three ways.

core/ · import it

Python queries

Five read-only functions over your ledger. They take a session and return plain, JSON-safe dicts, the same ones every other room calls.

from core.queries import net_worth
net_worth(session)
# {"total": …, "credit": …, …}

api/ · call it

HTTP + JSON

A FastAPI service for accounts, transactions, holdings, net worth, category spend and sync, with interactive docs at /docs.

curl -G 127.0.0.1:8000/category-spend \
  -d start_date=2026-09-01 \
  -d end_date=2026-09-30

mcp_server/ · ask it

Model Context Protocol

Five read-only tools over stdio for Claude Desktop or any other MCP client. The database opens read-only, so no agent can write.

python -m mcp_server
# five tools, read-only

Rooms you could add

  • A weekly spending digest in your inbox
  • Alerts when a category runs past its budget
  • A tax-time export of deductible spending
  • An agent that flags new subscriptions

The API binds to 127.0.0.1 and has no login of its own, deliberately: whatever you build runs beside it on the same machine. Reaching it from other devices means putting your own authentication in front of it first.

Raise it in an evening

You'll need Python 3.11 or newer, Node with pnpm, and a free Plaid Sandbox key. Migrations run on first start.

117 tests keep it standing: 116 run on every change, and one opt-in test talks to the real Plaid Sandbox.

  1. 01

    Clone it

    $ git clone https://github.com/Kandel-Bibas/House_of_Hearth.git
    $ cd House_of_Hearth
  2. 02

    Lay the core

    $ python3 -m venv .venv && source .venv/bin/activate
    $ pip install -e ".[dev]"
    $ cp .env.example .env  # add your Plaid Sandbox keys
  3. 03

    Hang the front

    $ cd frontend && pnpm install && cd ..
  4. 04

    Light the fire

    $ make dev
      api on localhost:8000, dashboard on localhost:5173

Your money, kept at home where it belongs

If that sounds right to you, clone it and light the fire