From e381b615d66762fdc8a041b9b821f6f7cf432c53 Mon Sep 17 00:00:00 2001 From: tonym Date: Sat, 6 Jun 2026 16:55:25 -0500 Subject: [PATCH] Add version chip (v0.1.0) + changelog - version.py: __version__ = 0.1.0 + structured CHANGELOG (newest first). - footer version chip on every page (base.html) links to /changelog. - /changelog page renders release notes; CHANGELOG.md mirrors it. - 0.1.0 captures the storage/SQLite/settings/suggestions/backup work. Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 15 +++++++++++++++ app.py | 11 +++++++++++ templates/base.html | 6 ++++++ templates/changelog.html | 19 +++++++++++++++++++ version.py | 26 ++++++++++++++++++++++++++ 5 files changed, 77 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 templates/changelog.html create mode 100644 version.py diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..fbf55c5 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,15 @@ +# Changelog + +All notable changes to Moon Household Budget. Newest first. +This file mirrors the structured changelog in `version.py` (shown at `/changelog`). + +## 0.1.0 — 2026-06-06 — First tracked release + +- Crash-safe data storage — saves are now atomic and a corrupted file can no longer take the app down. +- Transactions moved to a SQLite database: faster, and safe when edited from two tabs at once. Existing transactions were migrated automatically. +- New Settings page (⚙️) to store your Gmail login and reminder preferences securely — no passwords in the code anymore. +- Suggestions & feedback (💡) is now reachable from every page; what you send becomes a tracked issue. +- Bill email reminders now use the Gmail login from Settings. +- Automatic daily backups of all your data (local for now; Backblaze cloud once a bucket is set up). +- Fixed the Monthly view crashing on the budget total. +- Added this version number and changelog. diff --git a/app.py b/app.py index 4a9af04..3753d92 100644 --- a/app.py +++ b/app.py @@ -8,6 +8,7 @@ import calendar as cal_module from storage import load_json, save_json from settings import load_settings, save_settings, SECRET_KEYS import txns_db +from version import __version__ as APP_VERSION, CHANGELOG from categories import CATEGORIES, CATEGORY_COLORS from bills import load_bills, save_bills, bills_for_month, calendar_grid, get_week_num from sinking import (load_funds, save_funds, FUND_COLORS, monthly_needed, @@ -167,6 +168,11 @@ def inject_unreviewed_count(): # Fast COUNT query instead of parsing the whole transaction store per request. return dict(unreviewed_count=txns_db.count_unreviewed()) + +@app.context_processor +def inject_version(): + return dict(app_version=APP_VERSION) + DATA_DIR = os.environ.get("DATA_DIR", os.path.join(os.path.dirname(__file__), "data")) TRANSACTIONS_FILE = os.path.join(DATA_DIR, "transactions.json") RULES_FILE = os.path.join(DATA_DIR, "rules.json") @@ -2878,5 +2884,10 @@ def settings_view(): saved=request.args.get("saved")) +@app.route("/changelog") +def changelog_view(): + return render_template("changelog.html", changelog=CHANGELOG, app_version=APP_VERSION) + + if __name__ == "__main__": app.run(debug=os.environ.get("FLASK_DEBUG") == "1", port=5000) diff --git a/templates/base.html b/templates/base.html index fd6f9df..504285e 100644 --- a/templates/base.html +++ b/templates/base.html @@ -36,6 +36,12 @@ {% endif %} {% block content %}{% endblock %} +