You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Wealth Watcher v0.5.0
Highlights
Improves reliability across the dashboard, budget, calendar, history, forecast, FIRE tracker, integrations, asset catalogue, and browser-only demo with shared request lifecycle guards, normalized timeline data, safer empty/error states, and protection against stale responses replacing newer results.
Adds keyboard and screen-reader support for dialogs, period selectors, and chart views. Modals now manage focus and Escape handling, while chart data can be opened as an accessible table without relying on pointer interaction.
Hardens API and demo validation for malformed settings and client payloads. Settings are validated before persistence, malformed persisted JSON falls back safely, property values cannot be negative, archived assets cannot receive new entries, and forecast collections must use the expected shapes.
Adds a Docker-first Getting Started guide covering private .env handling, Compose validation, health checks, the first asset, local development, backups, and the local/trusted-network boundary.
Fixes
Forecast calculations now exclude future-dated wealth history, handle future windfalls in the current month correctly, and avoid replacing an intentional zero or invalid FIRE setting with an unrelated default target.
Failed settings saves restore the last known in-memory values instead of leaving the UI showing data that was not persisted.
Refines milestone inputs to accept and display currency-formatted amounts safely, rejects invalid values consistently, and keeps the disabled milestones card hidden.
Corrects dashboard, calendar, history, budget, FIRE, forecast, and demo transitions so loading, empty, and error content do not leave stale or contradictory results visible.
Expands regression coverage for API validation and forecasting, settings and modal behaviour, accessible chart data, timeline normalization, demo parity, page states, and responsive layout contracts.
Upgrade notes
No database migration was added after v0.4.0, and no new production environment setting or Compose-file change is required. Existing databases remain compatible with this release.
Back up PostgreSQL and the configured CONFIG_PATH Data Protection key directory before updating. After restart, verify /api/health and run a representative manual or provider sync; the key backup is required to recover encrypted integration credentials.
For source development, use the repository-pinned .NET SDK 10.0.302 and Node.js 24.13.0. For a Docker deployment, follow the new Getting Started guide and keep .env, the config directory, backups, and provider credentials private.
To update a published-image deployment, set API_IMAGE and WEB_IMAGE to v0.5.0 or an immutable sha-<full-commit-sha> tag, then pull and restart the services. To roll back, restore the previous image tags or digests and repeat the same commands; because this release adds no schema migration, a rollback does not require undoing a v0.5.0 database change, but retain the verified backup and check compatibility before proceeding.
The successful tagged workflow also moves the stable latest alias for both images.
Image digests are not available until the tagged build completes. Record the published digests from that workflow when immutable release evidence or deployment pinning is required; sha-<full-commit-sha> remains available for commit-based rollback.
Known issues
Forecasts remain illustrative estimates based on the configured assumptions and available history; sparse or unusual data can still require manual review.
The browser-only public demo uses fictional, resettable data and does not connect to the API, database, accounts, or provider integrations.
The application has no built-in authentication, authorization, or tenant isolation. Keep the API and dashboard on the local machine or a trusted network and do not expose them directly to the public Internet.