Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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/
AppID=money PUID=1000 PGID=1000 TZ=America/New_York docker compose up -d # then edit the bind path in compose.yaml or symlink
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.
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.