Skip to content

v1.2.0 — Savings & Debt Linking, Transfers, Inline Editing, Mobile Nav, Docs

Choose a tag to compare

@jaydenroberts jaydenroberts released this 13 Apr 06:11

What's new in v1.2.0

Highlights

Savings bucket allocation — allocate a paycheck or any credit transaction across multiple savings goals in one step. Contributions are linked back to the source transaction for a full audit trail.

Savings withdrawal linking — when you spend from a savings goal, link the debit transaction to that goal so your savings balance and transaction history stay in sync.

Debt payment linkage — link any expense transaction to a debt. Tally records the payment against the balance, creates a payment history entry, and auto-categorises as "Debt Payment". Unlink at any time to reverse.

Transfer workflow — record money moving between your own accounts as a transfer. The FAB on Transactions now has an Expense / Transfer toggle. Transfers create a matched debit-and-credit pair and are excluded from budget calculations.

Transfer pair linking — link two existing transactions as a transfer pair after the fact (and unlink them if needed).

Inline category editing — click the category cell on any transaction row to change it immediately, without opening an edit form.

Bulk category update — select multiple transactions and set their category in one action from the bulk action bar.

Sortable transaction columns — click Date, Account, Amount, or Status headers to sort. Direction toggles with each click.

Closed account status — mark an account as closed instead of deleting it. Closed accounts are hidden by default and shown in a collapsible section; you can reopen them at any time.

Mobile navigation — hamburger menu and slide-in drawer on small screens. Desktop layout unchanged.

Logo and favicon — custom Dracula-themed logo (tally mark + dollar sign) across all device sizes.

Admin account recovery — locked out? Set RECOVERY_TOKEN and call POST /api/auth/recover. No email or SMTP needed. The container logs a startup warning if the token is active — remove it after use.

Full documentation — 12-page docs/ directory covering every feature.

Changed

  • Budget spending totals now exclude transfers, debt payments, and savings transfers — only true expenses count.
  • Import reconciliation skips non-expense transactions.
  • Savings goals and contribution history update immediately after changes in Settings (no logout needed).
  • Currency selector in Settings applies site-wide without a page reload.

Fixed

  • PDF import now selects the largest table by row count, fixing multi-page PDFs where the first page is an account summary.
  • Virgin Money Cr/Dr amount suffix parsing ($2,000.00 Cr / $91.34 Dr).
  • Deleting a transaction linked to a debt payment or savings contribution no longer fails with a constraint error.
  • Bulk delete errors are now shown in the confirmation modal.
  • Static file server correctly serves favicons, manifests, and root-level assets.
  • ING debit double-negation fixed.

Security

  • RECOVERY_TOKEN uses constant-time comparison (secrets.compare_digest) to prevent timing attacks. Returns 404 (not 401) when no token is configured.
  • _safe_path() path traversal fix — now requires a trailing slash or exact match before accepting a path as within the base directory.
  • transaction_type removed from the TransactionUpdate schema — the field can only be set via the dedicated link/unlink endpoints, preventing arbitrary type reassignment via PATCH.

Upgrading

Pull the new image and restart — startup migrations run automatically.

docker pull jaydenroberts/tally:1.2.0

No manual database steps required.