Files
money/README.md
T
2026-10-21 14:36:22 -04:00

2.8 KiB

money

Local tool that loads bank/card statements (Chase Visa, Ally, CVFCU PDFs; Capital One CSV) into Bills_Tracker.xlsx and shows a web dashboard. Everything runs locally; statements and the workbook are never committed or baked into the image.

Run on ZimaOS / CasaOS

Add the app: App Store -> Custom Install -> import compose.yaml (it follows the ZimaOS x-casaos format). Copy Bills_Tracker.xlsx into /DATA/AppData/money/data/ (the app's data folder), then open the app's Web UI (port 8765). The image is built by Gitea Actions (.gitea/workflows/build.yml) and pushed to git.necloud.us/nate/money. Add a repository secret REGISTRY_TOKEN (a Gitea access token with write:package), and on the ZimaOS box run docker login git.necloud.us once so it can pull the private image.

Run with plain Docker

mkdir -p data && cp /path/to/Bills_Tracker.xlsx data/
TZ=America/New_York docker compose up -d   # data is stored in /DATA/AppData/money/data on the host

Starting fresh

template/Bills_Tracker.template.xlsx is a blank workbook (all tabs, formulas and charts; no data). The app's first-run screen has a "Create a blank workbook" button that copies it into the data folder. Then drop statements in; new payees land on the Lists tab as "Other / Unsorted" for you to categorize. loader_rules.example.json shows the private rules file format.

Envelope budget

The Budget page (/budget) turns each category into an envelope. Each month, assign your income to envelopes; the goal is "Ready to assign" = $0. Spending comes from the Bill Log, leftovers roll over, and overspending carries forward as a negative. Tools: Copy last month, Suggest from spending (3-month average) and Move money. Amounts are saved to a Budget tab in the workbook (one row per month and envelope), with a backup first.

Categories

New payees are categorized by built-in generic merchant rules (seed_rules.py); anything unknown lands in "Other / Unsorted". Use the Categorize payees card in the app (or the Lists tab) to set the rest. Your choices are saved in the workbook.

Personal rules (not in git)

Your name, card last-4 and similar live in loader_rules.json next to the workbook (git-ignored, not in the image):

{"own_names": ["JANE DOE"], "own_bank_hints": ["MY CREDIT UNION"], "csv_accounts": {"1234": "Capital One Card"}}

own_names lets the loader recognise transfers between your own accounts. Copy the file into the data folder (/DATA/AppData/money/data/ on ZimaOS).

Run without Docker

python3 -m venv .venv && .venv/bin/pip install -r requirements.txt && .venv/bin/python app.py

DATA_DIR (default: this folder) is where statements, the workbook and backups/ live.

The app has no login. Publish it on localhost only, or put it behind your own authentication.