Skip to content

Releases: paevans87/wealth-watcher-public

Wealth Watcher v0.7.0

Choose a tag to compare

@paevans87 paevans87 released this 18 Aug 14:20
e4da0fd

Wealth Watcher v0.7.0

Highlights

  • Rebuilds Budget as a group-based planner. Create, rename, recolour, reorder, and remove custom groups, organize line items into categories, and inspect monthly-equivalent allocations through a drill-down flow with desktop, mobile, and accessible list views.
  • Adds version-2 budget settings persistence. The API stores group and category metadata alongside compatibility budget lines, preserves stable item identities and Forecast asset links, accepts legacy budget arrays during upgrade, and validates the complete document atomically.
  • Moves application release information from Settings to a dedicated Application page linked from the app bar. Existing #settings?panel=application-version links redirect to #application, and missing version metadata now has an explicit fallback state.
  • Updates FIRE and Forecast budget calculations and milestone context to use the grouped budget model, including custom savings groups and clear disabled, unconfigured, progress, and complete milestone states.

Fixes

  • Budget edits preserve an existing Forecast asset mapping when assetId is omitted while still allowing an explicit clear, and reject duplicate or unknown identifiers, invalid amounts or cadences, invalid groups, and conflicting legacy writes without partially applying the request.
  • Budget flow drill-down links, category labels, mobile colour accents, table containment, and group-editor state stay aligned across responsive layouts; uncategorised line items remain visible instead of disappearing from the flow.
  • The browser-only demo now mirrors the grouped-budget API contract and migration behaviour, while API, UI, routing, responsive-layout, and demo-parity tests cover the new paths.

Upgrade notes

  • This release requires a database migration (20260818093503_AddBudgetV2Document) that adds the nullable BudgetJson column to AppPreferences (requiresMigration: true). The API applies migrations during startup; existing BudgetLines remain in place. Existing legacy budget data is returned with needsUpdate: true until the Budget page is reviewed and saved successfully, which stores the v2 group document. Review group names, colours, categories, and Forecast asset links after that first save.
  • No new production environment variable or Compose setting is required (requiresConfigurationChange: false). Back up PostgreSQL and the configured CONFIG_PATH Data Protection key directory before updating; the key backup is required to recover encrypted integration credentials. After restart, verify /api/health, open Budget, Forecast, FIRE, and Application, and run a representative manual or provider sync.
  • For a published-image deployment, set API_IMAGE and WEB_IMAGE to v0.7.0 or an immutable sha-<full-commit-sha> tag, then pull and restart the application services. To roll back, restore the previous v0.6.0 or immutable image tags and repeat the same commands. The migration only adds nullable metadata, so an application rollback does not require a destructive down migration; do not edit and save grouped budget data from the older application because it cannot represent the v2 group metadata. Retain the verified backup and confirm compatibility before rolling back.
  • For source development, use the repository-pinned .NET SDK and the Node.js version in .nvmrc; run npm ci --prefix WealthWatcher.UI after pulling the release branch. The production Docker path still requires Docker and Docker Compose, with private .env and configuration data kept outside the repository.

Docker images

  • ghcr.io/paevans87/wealth-watcher-public-api:v0.7.0
  • ghcr.io/paevans87/wealth-watcher-public-web:v0.7.0
  • 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

  • Legacy consumers still receive the four compatibility budget arrays. A custom group without a recognized legacy role is mapped to the legacy Spend category, so those consumers cannot represent every custom group distinction; use a recognized savings role or Savings-labelled group when legacy Forecast behaviour is required.
  • FIRE and Forecast projections remain illustrative estimates based on configured assumptions and available history. Results can be unavailable or unreachable when Forecast is disabled, data is incomplete, or the assumptions cannot produce a target date.
  • The browser-only public demo uses fictional, resettable data and does not connect to the API, database, accounts, or provider integrations. The application also has no built-in authentication, authorization, or tenant isolation; keep it on the local machine or a trusted network.

Wealth Watcher v0.6.0

Choose a tag to compare

@paevans87 paevans87 released this 17 Aug 21:26
7ae39cf

Wealth Watcher v0.6.0

Highlights

  • Adds a Dashboard FIRE status summary that keeps the selected FIRE assets separate from Holistic Net Worth, shows FIRE assets, target, remaining amount, and progress, includes holistic milestone context, and provides a context-aware next action.
  • Adds an optional projected FIRE date using the existing forecast endpoint and current FIRE/forecast assumptions. The dashboard renders its FIRE figures independently and treats loading, disabled, incomplete, stale, and unavailable projections safely.
  • Rebuilds Budget as a page-owned planner for income, bills, savings, and spending. The new flow view converts recurring amounts to monthly equivalents, supports category drill-down, and provides an edit-one-line-at-a-time experience with optional savings links to Forecast assets.
  • Keeps the browser-only demo aligned with the budget request and validation contract, including the same cadence, asset-link, persistence, and error-handling behaviour used by the application.

Fixes

  • Centralizes FIRE target, included-asset, state-pension, windfall, and invalid-withdrawal-rate handling so FIRE Tracker and Forecast no longer calculate contradictory targets from the same settings.
  • Budget settings persistence now preserves existing line identifiers and savings-to-asset mappings, assigns identifiers to new lines, removes omitted rows, and rejects duplicate or unknown identifiers, invalid values, and invalid asset links without partially applying the request.
  • Refreshes dashboard FIRE status after saved FIRE, Forecast, and feature-toggle changes and protects optional forecast snapshots from stale responses replacing a newer request.
  • Updates the pinned .NET SDK to 10.0.400, refreshes SnapTrade and API test packages, and updates the pinned GitHub Actions and Docker metadata/build tooling. The release also expands API, UI, demo-contract, routing, and responsive-layout regression coverage.

Upgrade notes

  • No new database migration, production environment variable, or Compose-file change was introduced in the diff for this release (requiresMigration: false; requiresConfigurationChange: false). Existing budget rows and mappings remain in the existing schema. Because this is a 0.x minor release, review the new Budget page after updating; the old #settings?panel=monthly-budget deep link redirects to #budget.
  • Back up PostgreSQL and the configured CONFIG_PATH Data Protection key directory before updating. After restart, verify /api/health, open Dashboard, Budget, and FIRE, 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.400 and the Node.js version in .nvmrc; run npm ci --prefix WealthWatcher.UI after pulling the release branch. The production Docker path still requires Docker and Docker Compose, with private .env and configuration data kept outside the repository.
  • For a published-image deployment, set API_IMAGE and WEB_IMAGE to v0.6.0 or an immutable sha-<full-commit-sha> tag, then pull and restart the application services. To roll back, restore the previous v0.5.0 or immutable image tags and repeat the same commands. No new schema migration needs to be undone, but retain the verified backup and confirm compatibility before rolling back.

Docker images

  • ghcr.io/paevans87/wealth-watcher-public-api:v0.6.0
  • ghcr.io/paevans87/wealth-watcher-public-web:v0.6.0
  • 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

  • FIRE projections remain illustrative estimates based on the configured assumptions and available history. The projected date can be unavailable or unreachable when Forecast is disabled, data is incomplete, or the assumptions cannot produce a target date; review the Forecast page before making decisions.
  • 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.

Wealth Watcher v0.5.0

Choose a tag to compare

@paevans87 paevans87 released this 16 Aug 17:46
2c62331

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.

Docker images

  • ghcr.io/paevans87/wealth-watcher-public-api:v0.5.0
  • ghcr.io/paevans87/wealth-watcher-public-web:v0.5.0
  • 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.

Wealth Watcher v0.4.0

Choose a tag to compare

@paevans87 paevans87 released this 15 Aug 22:44
a8d4bb1

Wealth Watcher v0.4.0

Highlights

  • Adds optional Wealth Milestones: enable the feature in Settings, configure up to 50 unique positive GBP targets, and see progress from the latest achieved target to the next target on the dashboard.
  • Hardens integration boundaries so provider and exception details are not returned through the API or persisted in connection and sync-audit records.
  • Makes the dashboard and settings UI more resilient to malformed persisted settings, invalid dynamic content, unsafe colors, and null forecast collections.
  • Improves the public site and browser demo with search metadata, canonical and social-preview metadata, robots and sitemap files, privacy-aware analytics events, and automated public-site validation.
  • Strengthens release and deployment provenance with digest-pinned base images, pinned runtime packages, signed container images, SBOM/provenance generation, and a pinned local PostgreSQL image.

Fixes

  • Validates and canonicalizes milestone targets in both the API and browser demo, rejecting malformed, duplicate, non-positive, or over-precise values while keeping dashboard progress derived from current wealth.
  • Treats null forecast collections as ordinary validation input and returns a validation failure instead of allowing an unhandled request failure.
  • Escapes rendered user/provider values and validates dynamic colors and delegated UI actions across dashboard, budget, integration, audit, and catalog surfaces.
  • Stops provider failure messages and sensitive values from leaking into integration responses, stored errors, or sync-audit output while retaining safe client-facing status messages.
  • Corrects the API runtime image digest and applies the Microsoft.EntityFrameworkCore.Relational patch update to 10.0.11.
  • Adds regression coverage for the Milestones, security, persisted-settings, forecast-validation, rendering, demo, and public-site contracts.

Upgrade notes

  • This release includes the AddMilestoneSettings database migration, which adds the MilestoneJson column to AppPreferences; the API applies it during startup. Back up PostgreSQL before upgrading and verify that the migration completes successfully.
  • Milestones is optional and disabled by default. Enable it under Settings, then add positive GBP targets if you want the dashboard to track progress. No new deployment or environment configuration setting is required. The public Pages workflow gains build validation and the browser demo includes Milestones contract support.
  • Back up the ASP.NET Data Protection key directory as a normal operational precaution. Review provider integration behavior and run a test sync after updating because integration failures now use intentionally generic client-facing messages.
  • For published images, pull the v0.4.0 API and web tags after the tagged workflow succeeds. For local builds, rebuild the images so the digest-pinned base images and updated release metadata are included.
  • Rolling back images does not automatically undo the Milestones schema migration. A v0.3.0 application should not depend on the new column, but Milestones settings will not be available there; retain the verified backup and use a controlled database restore or migration rollback only when an exact schema rollback is required.

Docker images

  • ghcr.io/paevans87/wealth-watcher-public-api:v0.4.0
  • ghcr.io/paevans87/wealth-watcher-public-web:v0.4.0
  • 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

  • Forecast views can still be unreliable or calculate unexpectedly in some cases; this release hardens input validation but does not remove that broader limitation.
  • The browser-only public demo uses fictional, resettable data and does not connect to the API, database, accounts, or provider integrations.

Wealth Watcher v0.3.0

Choose a tag to compare

@paevans87 paevans87 released this 14 Aug 11:16
c8dbbf7

Wealth Watcher v0.3.0

Highlights

  • Makes the browser-only public demo banner visibly opaque, consistently positioned, and available with clear links to the main site and demo reset action.
  • Improves the app bar's contrast and layering so navigation remains readable over the application and demo layouts.
  • Adds a build-time demo-mode switch for the Pages demo while keeping the banner hidden in normal application builds.
  • Publishes tagged stable images with the moving latest alias so deployments can follow the latest successful release.

Fixes

  • Prevents the demo banner and app bar from becoming transparent or allowing application content to show through them.
  • Improves mobile containment for high-data pages and budget controls, reducing horizontal overflow and narrow-screen layout failures.
  • Adds regression coverage for the responsive shell, demo banner, app bar, and mobile layout contracts.

Upgrade notes

  • No application API or database migration changes are included.
  • No configuration change is required for self-hosted application builds. The public Pages demo enables VITE_DEMO_MODE and VITE_BASE_PATH in its existing workflow.
  • Back up PostgreSQL and the ASP.NET Data Protection key directory before upgrading as a normal operational precaution.
  • Tagged API and web images are rebuilt by the release workflow. Use the v0.3.0 tags or immutable digests for reproducible deployments; use latest when following the latest successful stable release.

Docker images

  • ghcr.io/paevans87/wealth-watcher-public-api:v0.3.0
  • ghcr.io/paevans87/wealth-watcher-public-web:v0.3.0
  • The successful tagged workflow also moves the stable latest alias for both images.
  • Image digests should be recorded from the completed tagged workflow when a deployment requires immutable release evidence.

Known issues

  • Forecast views are currently unreliable and may not behave or calculate as expected. Improvements are planned.
  • The browser-only public demo uses fictional, resettable data and does not connect to the API, database, accounts, or provider integrations.

v0.2.0

Choose a tag to compare

@paevans87 paevans87 released this 13 Aug 22:23
03092f1

version: 0.2.0
date: 2026-08-13
channel: stable
requiresMigration: false
requiresConfigurationChange: true

Wealth Watcher v0.2.0

Highlights

  • Added a browser-only live demo with fictional, resettable data. No API, database, account, credentials, or live provider connections are required.
  • Reworked the public landing page around the product with improved responsive layouts, feature presentation cards, and a direct live-demo experience.
  • Added illustrative clean-slate previews for the dashboard, history, calendar, forecast, FIRE, and budget views.
  • Added in-app version display, bundled release notes, and an informational update checker in Settings.
  • Added optional, consent-gated Microsoft Clarity and Google Analytics 4 support for the public landing page.

Fixes

  • Standardized loading, empty, and error states across the major application views.
  • Added clearer retry actions when dashboard data, calendar history, integrations, or forecasts cannot be loaded.
  • Improved API error handling and demo-mode request parity.
  • Fixed mobile landing-page overflow.
  • Updated the PostgreSQL 18 Docker Compose volume mount layout.

Upgrade notes

  • No application API or database migration changes are included.

  • Update to the latest docker-compose.yml before restarting the stack. Back up PostgreSQL and the ASP.NET Data Protection key directory first, preserve the existing pgdata volume, and verify that existing data is available after startup.

  • Published-image deployments should update API_IMAGE and WEB_IMAGE, then run:

    docker compose pull api web
    docker compose up -d --no-build --remove-orphans
  • GitHub Pages maintainers may optionally configure CLARITY_PROJECT_ID and/or GA4_MEASUREMENT_ID. Leave them unset to keep analytics disabled.

Docker images

  • ghcr.io/paevans87/wealth-watcher-public-api:v0.2.0
  • ghcr.io/paevans87/wealth-watcher-public-web:v0.2.0
  • Use the release tag or an immutable commit digest for reproducible deployments.
  • Local Docker Compose deployments may continue building the images locally.

Known issues

  • Forecast views are currently unreliable and may not behave or calculate as expected. Improvements are planned.

v0.1.0

Choose a tag to compare

@paevans87 paevans87 released this 13 Aug 16:19
b28e0de

Initial early release