BillTracker/client
null 4638d24a1d fix(payoff): correctness, data-integrity & clarity of the payoff simulator
Data integrity (A):
- "Apply … to my budget" overwrote the bill's expected_amount (its real
  recurring amount, used in budgets + payment recording) with the simulated
  payoff payment. Replace with "Save APR to this bill" — persists interest_rate,
  leaves expected_amount untouched. Fixes the corruption AND the interest-free
  root cause (future runs use the saved APR). BillModal debt section also opens
  when a bill has an interest_rate.

Error handling (B):
- Undo now has try/catch + error toast (was an unhandled rejection that left the
  wrong value applied); Apply uses errMessage.
- loadData no longer snaps the selection back to the first bill after a
  save/undo (was a stale-closure over selectedId); background refreshes are
  "silent" so a transient failure no longer replaces the whole page.

Makes-sense (C):
- Distinguish "no APR" from a real 0% and show a notice (was silently interest-
  free with no indication).
- Without a real minimum, show absolute Time-to-Payoff + Total Interest instead
  of a broken "$0 savings" / "~580 mo sooner".
- Remove the arbitrary, mislabeled "Snowball plan" line (was extra applied only
  to the alphabetically-first bill) from the page + chart.
- Detect the 600-month cap (incl. 0% tiny payment) as "won't pay off".
- Correct the "set a minimum on the Snowball page" guidance (no such editor).

Clarity (D):
- Plain-language toasts on every write; targeted HelpCircle tooltips (Interest/
  Time Savings, Total Interest, Required Minimum, APR, Save-APR); a clearer page
  description; states that explain why + what to do.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 18:09:12 -05:00
..
components fix(payoff): correctness, data-integrity & clarity of the payoff simulator 2026-07-05 18:09:12 -05:00
contexts refactor(brand): wire brand + new primitives through layout chrome 2026-07-05 17:18:31 -05:00
hooks refactor(tracker): move settings/simplefin onto React Query + defer search (plan B) 2026-07-05 14:43:13 -05:00
lib feat(brand): BrandMark/Wordmark/Lockup consume the new SVGs 2026-07-05 17:50:04 -05:00
pages fix(payoff): correctness, data-integrity & clarity of the payoff simulator 2026-07-05 18:09:12 -05:00
public feat(brand): SVG lockups + mark + social preview assets 2026-07-05 17:49:55 -05:00
App.tsx refactor(brand): adopt new primitives in pages 2026-07-05 17:18:56 -05:00
api.ts refactor: remove verified dead code — orphan file, dead HOC, unused api wrappers 2026-07-05 17:21:31 -05:00
index.css refactor(brand): wire brand + new primitives through layout chrome 2026-07-05 17:18:31 -05:00
main.tsx feat(settings): theme "System" + reduce-motion (plan Tier 1) 2026-07-05 15:50:37 -05:00
types.ts refactor(ts): move User to @/types + type auth endpoints; add code to 500 (Track C/D) 2026-07-05 12:26:11 -05:00