heezy-finance — Daily Log¶
2026-06-18¶
Phase 1 + Phase 2 — Data consolidation + dashboard improvements
Phase 1 (completed)¶
- Full audit of all data sources and dashboard code
- Dashboard was reading orders + receipts but had zero integration with
bank_transactions receipts.datetext column had mixed formats — causing silent parse failures; gas showed $36 instead of $140.52- Added
date_ts(timestamptz),merchant_normalized,payment_typetoreceipts - Added
category,merchant_normalizedtobank_transactions - Backfilled
date_tson all 43 existing receipts - Built rule-based bank transaction categorizer (Ollama too slow on CPU for this)
- Updated
app.pyto usedate_tsfor receipts; integrated bank_transactions as third source - Updated receipts service to populate
date_ts+merchant_normalizedon all new inserts - Fixed BoA parser: was hardcoded to
checking— now detects credit card statements from first 3000 chars of PDF - Fixed Cap1 parser: transactions were assigned to wrong account due to
stmt_idlookup using flushed-only map - Statement auto-ingest: NFS watch dir pipeline confirmed end-to-end (2 PDFs → parsed → DB)
- docs.heezy.info: MkDocs Material site deployed to Cloudflare Pages with Gitea pipeline
- All public heezy sites added to Cloudflare Access (Google OAuth, trentnielsen84 + brdrgrl18)
Gas spend fixed: $140.52 (was $36). June 2026 total: ~$2,226 across all sources.
Phase 2 (in progress)¶
- Bank page: Added dedicated Bank tab to dashboard — category breakdown cards, Plotly monthly bar chart, top merchants table
- Bank page "This Month": Falls back to most recent month with data instead of showing empty cards for current month (May 2026 shown)
- Purchases table: All 6 columns now sortable (Date, Source, Vendor, Item, Total, Category) — click header to sort, ▲▼ indicators
- Purchases date defaults: Start Date defaults to first of current month, End Date to today on first page load
- payment_type on receipts: Dropdown added to both edit flows (post-upload + inline): cash / credit / debit / check / other
- CI/CD: Fixed all
deploy-*.ymltrigger paths (were using repo name instead of k8s app dir); addedrollout restarttoauto-deploy.yamlso:latestimages actually roll out - Monthly reminder: Cron fires 1st of each month at 10am ET to prompt NFS statement drop
Blocked: BoA CC statements + additional monthly statements — manual download from bank portal required.
Evening session (continued)¶
- n8n Amazon forwarding fixed: Workflow had been erroring on every run since 2026-06-13. Root cause: two nodes (
Log Forward to DB,Log Skip to DB) existed in DB but not in n8n's compiled in-memory graph. n8n caches the workflow graph at activation time and never reloads from DB on restart — only a REST API PUT forces a recompile. Fix: stripped the two missing nodes, rewired connections to route around them. Execs 3694+ allsuccess. - Lesson:
N8N_PROTOCOL=httpsblocks HTTP write ops (PUT/POST) on localhost with 403, even via SSH tunnel. To unblock: temporarily setN8N_PROTOCOL=https_DISABLED, restart, make API call, restore. - Dev agent context: Created
dev-agent/CONTEXT.md— comprehensive reference for spawned dev subagents covering repos, git remotes, CI/CD gotchas, DB, SSH, services, metrics requirement, and commit style. - CF Access resource rename (deferred): Attempted to rename
cloudflare_access_application→cloudflare_zero_trust_access_applicationin Terraform. Neithermoved{}blocks norstate mvwork in cloudflare provider v4 for cross-type renames — provider v4 can't refresh the new type, so plan shows destroy+create. Revertedaccess.tfto original names. Defer until provider v5 upgrade. - Docs updated:
services/cloudflare-access.mdadded,statement-parser.md+data-sources.md+ci-cd.mdupdated via docs subagent.