Skip to main content
Colin RodriguesRev. 2026.09 — Berlin
← Back to Projects

Household Finance Tracker

in-progress

A household finance app for two users sharing one set of books, rebuilt from an 18-tab Google Sheets workbook that collapsed under manual data entry.

Timeframe

Q3 2026

Status

in-progress

Last Updated

Categories

financebudgetingbanking-apimulti-currencydata-visualizationautomationinvestmentsself-hosted-data

About This Project

A household finance app for two users sharing one set of books, rebuilt from an 18-tab Google Sheets workbook that collapsed under manual data entry.

Owns the full pipeline: bank sync and CSV import, deduplication, transfer detection, rule-based categorization, a review inbox, envelope budgeting, reporting, and investment valuation.

Multi-currency by design - every amount keeps its native currency against a dated FX table, so EUR net worth is computed rather than approximated by one global rate.

Built on a few non-negotiables: the bank feed is the source of truth, nothing counts until a human confirms it, transfers are never double-counted, manual category overrides are never overwritten, and imports are idempotent.

Grew out of the earlier Smart Spending Companion concept, but scoped up from a solo, chat-first spending coach into a shared household ledger spanning US and European banks, multiple currencies, and investments.

Tech Stack

Next.jsTypeScriptPostgreSQLPrismaTailwind CSSVercel

Why I Built This

The spreadsheet it replaced died in April 2024 - manual export-and-paste was unsustainable, so the data simply stopped.

Roughly 10,700 Google-only formulas were locked into a tool I did not own. Rewriting them as ordinary code makes the logic portable and testable.

Off-the-shelf budgeting apps handle one currency and one person well; a two-person, multi-currency household across US and European banks is exactly where they break down.

Wanted a single owned pipeline from raw bank feed through to net worth, rather than three disconnected tools that each tell a different story.

Smart Spending Companion explored the same problem from the consumer side. Working through that concept made it clear the real constraint at home was not insight into spending but getting trustworthy multi-currency data in at all - so this build starts at the import pipeline instead.

Key Learnings

✓Designing every external feed behind a typed interface with a mock implementation meant the app could be built and tested end to end before a single bank credential existed.
✓Treating the bank feed as the source of truth removed an entire category of reconciliation logic. Deciding what NOT to compute was the highest-leverage decision in the spec.
✓Writing the full spec before any code - modules, data model, locked decisions - made the build plan almost mechanical. The upfront cost paid for itself several times over.
✗Tremor was named in the design system but peers on React 18 and will not install against React 19. Swapped to Recharts styled against the same tokens - a reminder to verify the dependency tree before committing to a UI library.
•Integration tests run against a real Neon branch rather than mocks, which catches schema and query issues that unit tests miss, but they have to run serially since they share one database.
•Component-level tests were deferred in favour of an end-to-end smoke test plus the type checker. A reasonable MVP trade-off, but the gap shows whenever UI logic gets non-trivial.

Project Links