Statement loader web app with Docker image and Gitea Actions build
build-container / build (push) Successful in 31s

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
nmemmertandClaude Sonnet 5.5 committed 2026-10-21 12:58:29 -04:00
commit 3dba054dca
12 files changed
+1081

No files matched your search

+32
View File
@@ -0,0 +1,32 @@
# 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
```bash
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
```
## 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):
```json
{"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
```bash
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.