Commit Graph

  • 8c30a7ab09 refactor(ts): convert small hooks + version to TypeScript (TS8) null 2026-07-03 22:01:30 -0500
  • 3c51464bec refactor(ts): convert pure lib utilities to TypeScript (TS7) null 2026-07-03 21:59:16 -0500
  • 7c6be66794 refactor(ts): convert client/lib/trackerUtils to TypeScript (TS6) null 2026-07-03 21:53:45 -0500
  • 7bb68db442 refactor(ts): convert usePaymentActions to TypeScript (TS5) null 2026-07-03 21:47:12 -0500
  • 62a99fcaa4 build(lint): extend ESLint to .ts/.tsx via typescript-eslint null 2026-07-03 21:44:35 -0500
  • b221e02d85 refactor(ts): convert client/lib/utils to TypeScript (TS4) null 2026-07-03 21:42:46 -0500
  • 7d9bf12bdc docs(history): TypeScript foundation + branded money types (T1-T3) null 2026-07-03 21:37:21 -0500
  • 255036afc2 feat(ts): branded Cents/Dollars money types — first TS conversion (T2) null 2026-07-03 21:36:24 -0500
  • 907a407399 build(ts): TypeScript foundation — tsconfig + typecheck in CI (T1) null 2026-07-03 21:33:26 -0500
  • 47c031f1e4 build(react): enable React Compiler (React 19 auto-memoization) (F2) null 2026-07-03 21:20:26 -0500
  • a0a8579a08 refactor(tracker): shared useTogglePaid mutation hook — finish Tracker mutations (F1) null 2026-07-03 21:18:18 -0500
  • c86acd7d75 docs(history): React Query deeper adoption — error handling, prefetch, useMutation (P1-P3) null 2026-07-03 21:05:31 -0500
  • ad9fcbd56f refactor(tracker): shared useQuickPay mutation hook (P3) null 2026-07-03 21:04:43 -0500
  • e941f05cd6 feat(tracker): prefetch adjacent month on nav hover for instant switching (P2) null 2026-07-03 20:58:23 -0500
  • 2793927a5c feat(query): global background-refetch error toast (P1) null 2026-07-03 20:56:31 -0500
  • 1fe71a7d5e docs(history): React Query migration of all 7 manual-fetch pages (R5) null 2026-07-03 20:26:32 -0500
  • 6802a66e82 refactor(bank): migrate BankTransactionsPage ledger to React Query (R5.7) null 2026-07-03 20:25:47 -0500
  • 2e8bc07552 refactor(spending): migrate SpendingPage to React Query (R5.6) null 2026-07-03 20:22:13 -0500
  • 1cb0325560 refactor(snowball): migrate SnowballPage to React Query (R5.5) null 2026-07-03 20:18:14 -0500
  • a37697d492 refactor(summary): migrate SummaryPage to React Query (R5.4) null 2026-07-03 20:14:31 -0500
  • a0e4f87fe1 refactor(subscriptions): migrate SubscriptionsPage to React Query (R5.3) null 2026-07-03 20:12:02 -0500
  • 9cb254ea13 refactor(bills): migrate BillsPage to React Query (R5.2) null 2026-07-03 20:08:28 -0500
  • bb024ce161 refactor(analytics): migrate AnalyticsPage to React Query (R5.1) null 2026-07-03 20:04:14 -0500
  • 65c61d71fa docs(history): React correctness audit + ESLint enforcement (R1-R4) null 2026-07-03 19:58:54 -0500
  • 1387f7c2d7 fix(client): guard param-driven data loaders against out-of-order responses (R3) null 2026-07-03 19:57:04 -0500
  • 02395b9ad4 refactor(client): remove orphaned dead logic flagged by ESLint (R2c) null 2026-07-03 19:51:21 -0500
  • b8d394061b fix(client): resolve all 13 exhaustive-deps warnings (R2b) null 2026-07-03 19:47:14 -0500
  • 5e267e4fa7 fix(client): fix ESLint errors — real latent bugs (R2a) null 2026-07-03 19:42:52 -0500
  • c679022592 build(lint): add ESLint 9 + eslint-plugin-react-hooks/react-refresh (R1) null 2026-07-03 19:41:24 -0500
  • 38417ad8da docs(history): BM2 bill-modal decompose summary (v0.41.0) null 2026-07-03 19:25:15 -0500
  • 20b46c81df refactor(bill-modal): extract TemplateSection (BM2, 7/n) null 2026-07-03 19:23:57 -0500
  • ad68d965b6 refactor(bill-modal): extract LinkedTransactionsSection (BM2, 6/n) null 2026-07-03 19:22:58 -0500
  • 301bb152ef refactor(bill-modal): extract UnmatchDialogs + shared transactionDisplay (BM2, 5/n) null 2026-07-03 19:20:02 -0500
  • c61e3d84a5 refactor(bill-modal): extract PaymentFormFields (BM2, 4/n) null 2026-07-03 19:16:10 -0500
  • afba78e86b refactor(bill-modal): extract PaymentHistoryList (BM2, 3/n) null 2026-07-03 19:11:05 -0500
  • 9d670985fe refactor(bill-modal): extract AutopayTrustIndicator (BM2, 2/n) null 2026-07-03 19:07:35 -0500
  • 1018c55bb3 refactor(bill-modal): extract DebtDetailsSection (BM2, 1/n) null 2026-07-03 19:06:12 -0500
  • 2b710c459b feat(tracker): summary-card redesign — de-dup Paid, surface Remaining + progress (T3) null 2026-07-03 18:49:35 -0500
  • 4a76eb9b92 feat(tracker): optimistic pay/skip + toast.promise on syncs (M1/M2) null 2026-07-03 18:47:32 -0500
  • 55b515c401 feat(tracker): Pay-all-due per bucket + reversible quick-pay with specific toasts (T4) null 2026-07-03 18:43:01 -0500
  • 995f635d35 refactor(tracker): consolidate isPaidStatus + rowOutstanding + toast gap (T5) null 2026-07-03 18:36:30 -0500
  • d92cc38116 fix(bill-modal): correctness + toast fallbacks + validator consolidation (BM1) null 2026-07-03 18:32:25 -0500
  • e9c5e4d1d3 test(tracker): cover paymentAccounting + analytics money services (X2) null 2026-07-03 18:28:12 -0500
  • 9f4b53d37a perf(tracker): batch getTracker per-bill queries (kill N+1) (P1) null 2026-07-03 18:25:55 -0500
  • 73631ab812 fix(tracker): route error handling + autopay write atomicity (T2) null 2026-07-03 18:21:28 -0500
  • c91c97ef41 feat(tracker): live cross-query invalidation for the app shell (X3) null 2026-07-03 18:19:30 -0500
  • 10e159352a fix(notifications): honor per-bill reminder_days_before + expose for all bills (BM3) null 2026-07-03 18:16:10 -0500
  • ad1f5bebf6 fix(bill-modal): SimpleFIN import refreshes payments + Tracker live (BM4) null 2026-07-03 18:11:28 -0500
  • 4a38cc8614 fix(tracker): gate bank card unpaid/remaining by occurrence + add trackerService tests (T1) null 2026-07-03 18:10:28 -0500
  • d689ff6e68 fix(tracker): quick-pay duplicate guard + atomic balance write (X1) null 2026-07-03 18:05:19 -0500
  • 836dbdb9ae fix(snowball): surface projection errors + polish (Snowball #2,#3,#8) null 2026-07-03 17:08:41 -0500
  • 2b315f5d18 refactor(snowball): consolidate plan endpoints, standardize errors, fix N+1 (Snowball #4,#6,#7) null 2026-07-03 17:04:31 -0500
  • db4d33513e fix(debt): honest payoff date for unpayable debts + math tests (Snowball #1,#5) null 2026-07-03 17:01:17 -0500
  • 877e4c6d3c docs(data): record the Data page overhaul + sign-off (Batch 6) null 2026-07-03 15:25:25 -0500
  • d53a64b604 feat(data): "Erase my data" danger zone (Batch 5) null 2026-07-03 15:21:07 -0500
  • 314e4ff45e feat(export): JSON export + date-range/format payments export (Batch 4) null 2026-07-03 15:15:36 -0500
  • bd1eee00b0 feat(import): OFX/QFX transaction import (Batch 3) null 2026-07-03 15:11:59 -0500
  • c7b110cd68 feat(data): actionable badges, health dots, at-a-glance stats, palette links (Batch 2) null 2026-07-03 15:05:25 -0500
  • 6a1b2f62b2 feat(data): two-pane shell + connection hero + deep-linking (Batch 1) null 2026-07-03 15:02:36 -0500
  • 212117a61a feat(data): modernize SectionCard chrome (Batch 0 — Data overhaul) null 2026-07-03 14:57:03 -0500
  • 5aa5c0cc0e docs(qa): mark IMP-CODE-02 fully shipped (database.js 4174 -> 1297) null 2026-07-03 13:34:37 -0500
  • 12d9d4c5a8 refactor(db): extract legacy-reconcile migrations + lock version-sync (IMP-CODE-02) null 2026-07-03 13:34:01 -0500
  • 026c6a56b8 refactor(db): extract the versioned migrations array into its own module (IMP-CODE-02) null 2026-07-03 13:31:00 -0500
  • 78ad63dda4 docs(qa): IMP-UX-02 state audit complete — no gaps found null 2026-07-03 13:07:56 -0500
  • 318ffa368e docs(qa): archive IMP-CODE-02 partial (catalog seed extracted) null 2026-07-03 13:05:44 -0500
  • 7f2faeaede refactor(db): extract subscription-catalog seed data out of database.js (IMP-CODE-02) null 2026-07-03 13:05:16 -0500
  • 9aa312082d docs(qa): archive IMP-CODE-03 (canonical match-state writer) null 2026-07-03 13:02:47 -0500
  • fa2432265c refactor(match): one canonical writer for transaction match state (IMP-CODE-03) null 2026-07-03 13:02:10 -0500
  • c47638a373 docs(qa): archive IMP-UX-01 (recently-deleted restore view) null 2026-07-03 12:57:08 -0500
  • aace5a4356 feat(bills): "Recently deleted" restore view for the 30-day window (IMP-UX-01) null 2026-07-03 12:56:45 -0500
  • e09025430b docs(qa): archive IMP-IA-01 (Data in primary nav) null 2026-07-03 12:50:43 -0500
  • 0b1c6a8322 feat(nav): surface Data in the primary app menu (IMP-IA-01) null 2026-07-03 12:50:07 -0500
  • 54484ec8a0 docs(qa): archive IMP-CODE-01 (money formatter consolidation) null 2026-07-03 12:47:07 -0500
  • a15f00c568 refactor(client): single source of truth for money formatting (IMP-CODE-01) null 2026-07-03 12:46:22 -0500
  • 6f5ad9a015 docs(qa): record real end-to-end SimpleFIN sync validation null 2026-07-03 12:26:22 -0500
  • cc6332731f docs(qa): add improvement lens + B17/B18 batches + seeded backlog null 2026-07-03 12:23:37 -0500
  • b3168fca70 fix(qa): retention GC orphaned matched transactions on bill purge (QA-B5-04) null 2026-07-03 11:04:59 -0500
  • 07b6a04a97 chore: gitignore tests/Site-BKUP-Test/ (live DB copy — never commit) null 2026-07-03 10:42:58 -0500
  • a5671ab3be fix(qa): harden DB file permissions — was world-readable 644 (QA-B16-02) null 2026-07-03 10:32:39 -0500
  • fc2daf2e9e docs(qa): Cycle 1 header — 15 findings, B16 complete null 2026-07-03 10:06:24 -0500
  • 2963d11d1b fix(qa): version check is opt-out-able (QA-B16-01) null 2026-07-03 10:05:37 -0500
  • e8190170dc docs(qa): B16 execution — log QA-B16-01 (version check "optional" but no opt-out) null 2026-07-03 09:55:58 -0500
  • 9876207781 docs(qa): add B16 (migrations, secrets & deploy) — close plan coverage gaps null 2026-07-03 09:53:37 -0500
  • d82aa06652 docs(qa): Cycle 1 sign-off — all 17 batches run & complete, re-run clean null 2026-07-03 09:13:39 -0500
  • 5ffe2db85a test(qa): export→import round-trip preserves money (B9 data integrity) null 2026-07-02 22:26:49 -0500
  • c31d8cbe9e fix(qa): escape bill name in reminder email HTML — XSS via bill name (B14-04) null 2026-07-02 22:18:05 -0500
  • 2050e13407 fix(qa): notification _push export was clobbered → "Send test push" 500'd (B10-01) null 2026-07-02 22:11:34 -0500
  • 972daa9b07 docs(qa): mark B-UI batch probed (primitive behavior spec added) null 2026-07-02 22:04:14 -0500
  • 5fe1f6499b test(qa): B-UI primitive behavior spec (dialog/select/disabled) null 2026-07-02 22:03:52 -0500
  • 18c7025f3a docs(qa): record Cycle 1 sign-off — 12 findings fixed, automated re-run clean null 2026-07-02 21:57:50 -0500
  • ccf89e6df1 test(qa): summary skip-exclusion + per-month override regression (B2/B5) null 2026-07-02 21:56:46 -0500
  • ad474f1ac1 test(qa): admin/status authorization probe + B10/B11/B12 coverage notes null 2026-07-02 21:48:05 -0500
  • 3c1d000bab test(qa): production-build smoke (B15) — validates split chunks at runtime null 2026-07-02 21:45:25 -0500
  • 819cfdfa9f fix(qa): bank-tracking unpaid_this_month gates by occurrence (QA-B5-02) null 2026-07-02 21:41:33 -0500
  • 1bd282f47b fix(qa): Analytics "expected" gates by occurrence (matches Tracker/Summary) null 2026-07-02 21:23:37 -0500
  • a15ff056b3 fix(qa): Summary excludes bills not due in the month (reconciles with Tracker) null 2026-07-02 21:19:35 -0500
  • 72d06aa2d8 fix(qa): cent-exact toCents rounding + money.js test coverage null 2026-07-02 21:11:12 -0500
  • 98c8fab176 fix(qa): resolve a11y nested-interactive on Categories & Snowball rows null 2026-07-02 21:02:15 -0500
  • 127b69ffc2 chore(qa): vendor chunk splitting, remove unused markdown deps, remove dead totalInterestPaid (batch 0.41.0 QA cleanup) null 2026-07-02 20:47:50 -0500
  • 029c227685 fix(qa): seed demo data amounts, bill amount validation, negative USD format, a11y aria-labels, Playwright E2E setup (batch 0.41.0 QA) null 2026-07-02 20:36:09 -0500