Project: OTB Billing Version: v0.4.1 Last Updated: 2026-03-12 Status: Stable savepoint before app.py dedupe/refactor Current State: - Flask app runs under systemd as otb_billing.service. - Service starts through /home/def/otb_billing/run_dev.sh. - Runtime environment is loaded from /home/def/otb_billing/.env by the shell wrapper. - App listens on 0.0.0.0:5050 for mintme webfront proxy access. - Public portal host: portal.outsidethebox.top - Portal supports email + one-time access code, then forced password setup. - Portal dashboard shows invoices, totals, and invoice detail pages. - New invoices and editable unlocked invoices now write invoice_items automatically. - Existing older invoices may remain summary-only if no invoice_items were historically stored. - backend/app.py still contains duplicated larger sections and is queued for controlled cleanup next. Important Paths: - Project root: /home/def/otb_billing - App entry: /home/def/otb_billing/backend/app.py - Health module: /home/def/otb_billing/backend/health.py - Runtime wrapper: /home/def/otb_billing/run_dev.sh - Env file: /home/def/otb_billing/.env - Service unit: /etc/systemd/system/otb_billing.service - Repo copy of unit: /home/def/otb_billing/deploy/systemd/otb_billing.service Operations: - sudo systemctl status otb_billing - sudo systemctl restart otb_billing - sudo journalctl -u otb_billing -f Next Planned Work: - Controlled dedupe/refactor of duplicate sections in backend/app.py - Preserve all currently working portal and billing behavior during cleanup