Skip to content

Releases: wechuli/wealthboard

v1.2.7

Choose a tag to compare

@wechuli wechuli released this 18 Sep 11:14
b36680f

What's Changed

  • build(deps): bump the npm_and_yarn group across 1 directory with 3 updates by @dependabot[bot] in #11
  • Harden OIDC callback redirect handoff against open redirects by @wechuli with @Copilot in #12

Full Changelog: v1.2.6...v1.2.7

v1.2.6

Choose a tag to compare

@wechuli wechuli released this 17 Sep 10:07
06b4709

What's Changed

  • build(deps): bump @vitest/mocker from 4.1.10 to 4.1.11 in the npm_and_yarn group across 1 directory by @dependabot[bot] in #10

Added permanent instrument deletion from the Instruments page.
Unused active or archived instruments can be deleted after confirmation, along with their saved price history.
Instruments referenced by account history remain protected, including closed holdings, archived accounts, and corporate-action references.
Deletion is atomic and restricted to the signed-in user’s instruments.
Added regression coverage for confirmation, cancellation, price cleanup, historical-reference protection, and cross-user isolation.

v1.2.5

Choose a tag to compare

@wechuli wechuli released this 17 Sep 09:36

Added

  • Archived account management: Open Settings > Archived accounts to restore accounts or permanently delete them.
  • Confirmed permanent deletion: Deletion requires an archived account and its exact name. It removes the account's transactions, valuations, positions, reconciliations, and estate allocations. Linked goals remain without their account link; shared instruments and prices are retained.
  • Transfer protection: Permanent deletion is blocked while cash or in-kind transfers have paired records in another account, preventing unintended changes to other balances.

Changed

  • Archiving stops all financial tracking. Archived accounts are excluded from current and historical totals, dashboards, account and transaction lists, selectors, comparisons, goal progress, live estate views, and ordinary CSV reports. Their cached values remain frozen until restoration.
  • Restoring resumes tracking. Restored accounts rebuild their value from retained history. Converted source accounts cannot be restored while their replacement exists.
  • Incomplete comparisons are explicit. Dashboard period changes and account 30-day changes display Incomplete data instead of a signed gain or loss when either endpoint lacks required prices or exchange rates.
  • Consistent reporting dates: Dashboard and account comparisons use the same end-of-UTC-day cutoff. Account cards use live position values rather than potentially stale cached values.

Fixed

  • Prevented stock splits from inflating valuations by applying pre-split prices to post-split quantities. Holdings require a quote dated on or after the split; historical pre-split valuations are unchanged. Import previews use the same rule.
  • Fixed imported instrument prices leaving other accounts' cached values stale. Imports now refresh every affected account belonging to the same user in one transaction.
  • Added validation that rejects historical edits, deletions, imports, and restores that invalidate recorded spin-off or merger entitlements. Grouped cash deletions receive the same protection, and restore validation replays each account independently.
  • Fixed newly created position accounts failing with Choose a movement period with an end date after its start before noon UTC.
  • Fixed a missing historical exchange rate hiding a valid current base-currency account value. Unavailable changes no longer appear with positive styling.
  • Fixed exchange-rate saves, corrections, and deletions failing with Account not found when an archived position account existed. Recalculation now includes active accounts only.

Upgrade Notes

  • Historical totals may change: Existing archived accounts are now excluded from all historical calculations, not just calculations after their archive date.
  • Existing records are not automatically corrected: Add a post-split quote where needed. To correct holdings that affect a recorded spin-off or merger, remove dependent actions, correct the earlier history, then record the actions again.
  • Backups remain available: Full JSON backups retain archived account records. Permanent deletion does not rewrite previously downloaded backups or saved estate snapshots.
  • No database schema migration or data re-import is required for these changes. Investment History v1 and user backup v8 remain unchanged.

Developer Updates

  • Added unit, component, and browser regressions for valuation, incomplete comparisons, archival, deletion, same-day account creation, and exchange-rate recalculation, including cross-user and rollback checks.
  • Added configurable end-to-end test ports, database paths, backup paths, and build directories so tests can run beside an existing preview without resetting its data.

v1.2.4

Choose a tag to compare

@wechuli wechuli released this 08 Sep 09:54

Increased AI request and usage limits to accommodate longer-running responses and higher-volume use.

Provider timeout: Increased from 45 seconds to 2 minutes for both portfolio reviews and AI-assisted import conversions.
Monthly token limit: Increased the configurable maximum from 5,000,000 to 100,000,000 tokens, with consistent validation in the settings form and backend.
Existing saved budgets and defaults remain unchanged. To use the higher ceiling, update Monthly token limit under Settings > AI provider.

Automatic retries remain disabled, and the separate 15-second local document-extraction timeout is unchanged.

v1.2.3

Choose a tag to compare

@wechuli wechuli released this 08 Sep 09:12

This release adds AI-assisted file imports and password-protected PDF support, while preserving the existing structured import workflow.

New Features

  • AI-assisted imports: Convert CSV, TSV, JSON, TXT, XLSX, text-based PDF, and DOCX sources into Wealthboard’s import format directly from an account’s Import page.
  • Existing provider configuration: Use your configured provider and model with an encrypted remembered API key or a session-only key.
  • Source review and redaction: Review extracted text, select relevant sections, and remove sensitive information before approving submission to the AI provider.
  • Editable import drafts: Inspect source references, exclusions, and validation issues. Edit or download the generated JSON before proceeding through the normal preview and confirmation steps.
  • Password-protected PDFs: Supply a one-time PDF password for local extraction. Missing and incorrect passwords produce clear messages and allow retry without reselecting the file.

Privacy And Safety

  • Original documents are processed on your self-hosted Wealthboard server. Only approved text and necessary account/schema context are sent to the AI provider.
  • PDF passwords are cleared after submission and are never stored, logged, or sent to the model.
  • AI conversion cannot post financial records. Existing ownership checks, duplicate handling, balance replay, and investment import atomicity remain authoritative.
  • Conversion shares the existing AI rate limits and monthly token budget. Provider charges and retention policies still apply.
  • Direct CSV/JSON imports and browser-only copyable prompts remain available without AI configuration.

Current Limitations

  • Source files: 5 MB maximum; extracted content: 64 KB and 1,000 sections.
  • PDFs: 100 pages; workbooks: 20 sheets; AI responses: 1,000 candidate records.
  • Scanned/image-only documents, image uploads, legacy DOC/XLS, and encrypted Office files or archives remain unsupported.
  • Password-to-open XLSX/DOCX files require an unencrypted export. Ordinary worksheet/workbook locks and Word editing restrictions do not prevent reading otherwise supported content.
  • Spreadsheet formulas are not executed. Cached values and potentially incomplete PDF/Word extraction carry review warnings.

See the AI-assisted import guide for setup, workflow details, and supported formats.

v1.2.0

Choose a tag to compare

@wechuli wechuli released this 06 Sep 05:30

Exchange Rate Management and Price Freshness

This update simplifies exchange-rate management, clarifies conversion warnings, and fixes a stale-price warning that could persist after updating a security price.

Improved Exchange Rate Management

  • One summary row per currency pair, showing the latest effective rate, date, and freshness status.
  • Update rates without losing history. Saving a new effective date adds an observation; saving the same pair and date updates the existing entry.
  • Expandable history with controls to correct a rate or its effective date, and delete entries with confirmation.
  • Automatic inverse conversion. A USD/KES rate also supports KES/USD conversions, preventing the need to maintain both directions.
  • Existing entries in both directions are grouped with a review notice. No historical rates are automatically changed or deleted.
  • Rate corrections and deletions recalculate affected position-account values.

Clearer Conversion Warnings

Dashboard and report warnings now distinguish between:

  • Missing current rates: current totals are incomplete because a required conversion is unavailable.
  • Stale rates: the selected rate is more than one calendar month old. It remains usable, and converted balances are still shown.
  • Missing historical rates: older calculations lack a rate. These warnings appear beside the history chart and explicitly state whether the current total is complete.

Warnings link directly to the relevant currency pair in Settings. Historical warnings also prefill the earliest identified missing date, leaving the rate for you to enter.

Fixed

  • Fixed an issue where a security price entered before noon UTC could be ignored by current position snapshots, leaving an outdated valuation and stale-price warning.
  • Current position snapshots now include today’s date-only entries while preserving explicit historical cutoffs.

Data Preservation

Historical conversions continue to use the latest rate effective on or before the calculation date. Newer rates are never silently substituted for missing historical rates.

Deleting a rate falls back to an older applicable rate where available; otherwise, affected calculations are marked incomplete.

v1.1.0

Choose a tag to compare

@wechuli wechuli released this 26 Aug 12:54

Full Changelog: v1.0.2...v1.1.0

v1.0.2

Choose a tag to compare

@wechuli wechuli released this 18 Aug 06:15

Consistent Goal Forecasts

Goal projections now use the same calculation model across the projection graph, Saved plan scenario, estimated completion date, Required pace, and overall tracking status.

  • Saved plan projections now respect the configured contribution start and end dates.
  • Monthly contributions are counted only when their scheduled date falls on or before the goal’s target date.
  • The projection graph always ends on the exact target date and no longer includes contributions after the deadline.
  • Forecasts use the user’s local calendar date consistently, avoiding partial-month and time-of-day discrepancies.
  • Required monthly contributions and tracking status now use the goal’s configured annual return assumption.

Clearer Scenario Comparison

  • Saved plan uses the saved monthly contribution, annual return, and contribution window.
  • Lower return uses the saved contribution schedule with the adjusted return.
  • Required pace remains a hypothetical contribution plan running from today through the target date.
  • Scenario contribution totals now include only contributions actually scheduled within the relevant period.

Corrected Tracking Status

Overall status is now determined from the same saved-plan forecast shown in the projection:

  • Behind: the saved plan does not reach the target by the target date.
  • On track: the saved plan reaches the target by the target date.
  • Ahead: the goal reaches its target and is materially ahead of its expected progress or planned contribution pace.
  • Completed goals and goals that have already reached their target remain ahead.

Performance

Optimized long-range and impossible-plan forecasts to avoid repeated calculations. Scenario comparisons now remain responsive even when a target cannot be reached within the forecast horizon.

Compatibility

  • Existing goals recalculate automatically when viewed.
  • No database migration or manual goal update is required.
  • Stored balances, contribution plans, and target dates are unchanged.

v1.0.1

Choose a tag to compare

@wechuli wechuli released this 18 Aug 05:37

Consistent Derived Transaction IDs

Transactions without a provider-supplied external ID now receive a deterministic ID using:

derived-{date}-{transaction_type}-{amount}

For example:

derived-2026-08-18-deposit-300000.00

  • Applies to newly recorded transactions, account-history imports, and investment cash imports.
  • Existing provider IDs are preserved unchanged.
  • Amounts use the currency’s canonical decimal precision, ensuring values such as 300000, 300000.0, and 300000.00 produce the same ID.
  • Blank, omitted, or null external IDs are accepted during import.
  • Duplicate and conflicting derived IDs use the existing import safeguards.
  • Account-history and investment-history AI prompts now instruct LLMs to generate IDs using this exact format.

Accurate Progress for Linked Goals

Fixed goal progress showing zero when a linked balance account already contained funds.

  • Linked balance goals now use the account’s current balance as their progress.
  • Funds deposited before the goal was created or linked are included automatically.
  • Position-tracked accounts continue to use their cash and investment valuation.
  • Cross-currency goals continue to convert the linked balance using the configured exchange rate.
  • Directly tracked goals continue to use their manually entered current amount.
  • Planned contributions affect forecasts but only count as progress after being recorded in the linked account.

Existing linked goals recalculate automatically when viewed. No database migration or manual relinking is required.

Compatibility

  • Existing transactions are not backfilled with derived IDs.
  • No schema or database migration is required.
  • Existing provider external IDs and position-account goal calculations are unchanged.

Created 1 todo

v1.0.0

Choose a tag to compare

@wechuli wechuli released this 17 Aug 11:09

Wealthboard v1.0.0

The first public release of Wealthboard—a self-hosted, multi-user wealth and goals tracker powered by Next.js and SQLite.

Highlights

  • Track assets, liabilities, transactions, valuations, and net worth
  • Manage position-based investments, trades, broker cash, prices, and corporate actions
  • Support multiple currencies with effective-dated exchange rates
  • Analyze portfolio performance and forecast linked financial goals
  • Plan beneficiary and estate distributions with privacy-controlled summaries
  • Use local authentication, OpenID Connect, or both
  • Import account and investment history from CSV or JSON
  • Export and restore individual portfolios, or back up the complete SQLite database
  • Generate optional, evidence-linked AI portfolio reviews using private BYOK credentials
  • Install Wealthboard as a PWA with light, dark, and system themes
  • Deploy with Docker Compose or Kubernetes

Requirements

  • Node.js 22 or newer
  • A persistent local filesystem for SQLite
  • A unique SESSION_SECRET of at least 32 random characters

Important notes

  • Wealthboard does not connect directly to banks or brokers.
  • Run only one application replica against a SQLite database.
  • Protect database backups—they contain users’ financial data and password hashes.
  • AI-generated portfolio reviews are optional and are not financial advice.
  • Estate-planning summaries are planning worksheets, not legally executed wills.