Austin's Portfolio

Dispatch № 09 · pennybox

Pennybox

Local-first, plain-text personal finance toolkit

GitHub

A personal finance toolkit that stores money as plain-text Markdown ledgers — readable in an Obsidian vault, diffable in git, and parseable by code — with no vendor database and no runtime dependencies.

By the numbers

Why plain text

Every finance app eventually locks your history inside its own database. Pennybox inverts that: transactions live in Markdown tables you can read, edit, and version in git. The same file renders cleanly in Obsidian and parses deterministically in Python, so the data outlives whatever tool reads it.

Zero runtime dependencies

The package is standard library only — re, decimal, pathlib, datetime, argparse. Money is Decimal end to end, never float, so cents never drift. That constraint keeps the install trivial and the supply chain empty, which matters more for financial records than for most software.

Importers

YNAB, Origin, and Rocket Money each export a different CSV shape with different column names, date formats, and sign conventions for debits. Normalizing importers collapse all three into one Transaction model, so downstream reporting never has to know which bank a row came from.

Interface and testing

A 6-command CLI covers report, accounts, balances, transactions, add, and import, with JSON output so it can be scripted or driven programmatically. 18 unit tests cover the parser, store, importers, and reporting paths, and the whole suite runs in under a tenth of a second.

All projects Résumé