Files

1.8 KiB

fin

A self-hosted, single-user personal net worth tracker. fin aggregates bank accounts, investment portfolios, Splitwise balances, and receivables into a single EUR-denominated view, with daily automated snapshots and live stock prices.

Features

  • Dashboard — current net worth broken down by account group, plus recent transactions
  • Spending — monthly expense breakdown by category with a pie chart
  • Portfolio — investment account holdings with live USD prices (via yfinance), P&L per position, and EUR conversion
  • History — net worth over time as a line chart; snapshots taken automatically at midnight
  • Transactions — full transaction log across all accounts
  • Quick-add flows — mobile-friendly sheet for logging expenses, transfers, Splitwise splits/settlements, and stock trades
  • Settings — manage accounts (bank, investment, RSU, Splitwise, receivable) and spending categories; manual balance override per account
  • Multi-currency — EUR base currency; exchange rates via Frankfurter API

Quick Start

git clone <repo>
cd fin
docker compose up -d

The app is available at http://localhost.

Environment / Config

Set in docker-compose.yml under the api service:

Variable Default Description
DATABASE_URL sqlite:////data/fin.db SQLite path inside the container

Data is persisted in a named Docker volume (sqlite_data). No other configuration is required.

Architecture

The backend is a Python FastAPI app backed by SQLite via SQLAlchemy; APScheduler runs a nightly job to fetch stock prices (yfinance) and currency rates (Frankfurter) and record a net worth snapshot. The frontend is a React + TypeScript SPA served by Nginx, communicating with the API through the same Nginx container via reverse proxy.