mirror of
https://github.com/jonfriesen/bags.git
synced 2026-06-03 20:20:46 +00:00
No description
- Go 57.2%
- TypeScript 39.1%
- Python 3.2%
- CSS 0.3%
- JavaScript 0.1%
Refocus the dashboard away from current-month spending detail and onto household financial health. - Replace 'This month spending' stat card with 'Cash' (net spending account balance). Add percent change pills and dollar deltas for net worth, investments, and debt, all driven by a 3M / 6M / 12M / All window selector in the header. Debt deltas use inverse coloring so paydown reads as green. - 'Top changes this month' card removed. - New 'Net worth trajectory' area chart shows the merged net worth series (investments minus debt) with investments and debt drawn as dashed reference lines and a horizontal line at the window-start value. Built by merging investment-history and debt-history series with carry-forward semantics. - New 'Investment performance' and 'Debt paydown' charts under the main chart, each scoped to the window with their own trend pill. - 'Current allocation' renamed 'Composition' and now uses proportional bars based on absolute value (so debts read as a long rose bar rather than a single dot). - 'Household' card simplified to a compact list of members and account counts; ownership badge spam removed (those live on each domain page now). - Anchor 'As of' timestamp on the latest history point, not today, so the page stays meaningful during lulls between imports. Co-authored-by: Shelley <shelley@exe.dev> |
||
|---|---|---|
| .github/workflows | ||
| api | ||
| categorize | ||
| cmd/bags | ||
| domain | ||
| exchange | ||
| ingest | ||
| scripts | ||
| store | ||
| web | ||
| .gitignore | ||
| AGENTS.md | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
| SEED_FINDINGS.md | ||
Bags
A household finance tracker for managing spending, investments, debts, and net worth across multiple people.
Overview
Bags is a personal finance tool built as a Go API with a React SPA frontend. It tracks:
- Spending — bank accounts, credit cards, transaction imports (CSV), auto-categorization
- Investments — TFSA, RRSP, LIRA, non-registered accounts with holdings, lots, and performance tracking
- Debts — mortgages, lines of credit, student loans with rate history and balance snapshots
- People — household members linked to accounts via ownership
- Reports — net worth, spending summaries, investment performance, debt paydown
Architecture
The backend and frontend are intentionally decoupled — they communicate only through a REST API.
| Layer | Tech | Directory |
|---|---|---|
| API server | Go (stdlib net/http), SQLite |
cmd/, api/, store/, domain/ |
| Frontend | React 19, TypeScript, Vite, Tailwind CSS | web/ |
| Database | SQLite (WAL mode, goose migrations) | store/migrations/ |
Quick Start
Backend
go run ./cmd/bags -port 8080 -db ./bags.db
Frontend (development)
cd web
npm install
npm run dev
The Vite dev server proxies /api to the Go backend at localhost:8080.
Serving the built frontend from Go
cd web && npm run build
cd .. && go run ./cmd/bags -port 8080 -db ./bags.db -web ./web/dist
Testing
go test ./...
Project Structure
cmd/bags/main.go — server entrypoint
api/ — HTTP handlers and routing
domain/ — data types (no dependencies on DB or HTTP)
store/ — SQLite repositories and migrations
categorize/ — transaction auto-categorization
ingest/ — CSV import parser
web/ — React SPA (see web/README.md)
License
Private.