BillTracker/client
null 255036afc2 feat(ts): branded Cents/Dollars money types — first TS conversion (T2)
Converted client/lib/money.js -> money.ts with branded types:
  type Cents = number & { __unit: 'cents' }
  type Dollars = number & { __unit: 'dollars' }
plus asCents/asDollars/centsToDollars/dollarsToCents. The formatters now require
the correct branded unit (a bare number won't do), so a typed caller physically
cannot format cents as dollars (the 100×-too-big bug) or vice-versa. Existing
.jsx callers are unaffected (checkJs off) — gradual adoption.

money.type-test.ts is a compile-time guard (never imported/bundled): its
@ts-expect-error lines assert each unit mixup is a real error, so typecheck
fails loudly if the branding ever regresses. Verified: removing a guard makes
tsc error 'Argument of type 1234 is not assignable to DollarsInput'.

typecheck + build (with React Compiler) + 48 client tests all green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 21:36:24 -05:00
..
components refactor(tracker): shared useTogglePaid mutation hook — finish Tracker mutations (F1) 2026-07-03 21:18:18 -05:00
contexts theme correctness 2026-05-28 01:30:40 -05:00
hooks refactor(tracker): shared useTogglePaid mutation hook — finish Tracker mutations (F1) 2026-07-03 21:18:18 -05:00
lib feat(ts): branded Cents/Dollars money types — first TS conversion (T2) 2026-07-03 21:36:24 -05:00
pages feat(tracker): prefetch adjacent month on nav hover for instant switching (P2) 2026-07-03 20:58:23 -05:00
public/img refactor: component splits, PWA support, CommandPalette 2026-05-28 20:53:22 -05:00
App.jsx feat(query): global background-refetch error toast (P1) 2026-07-03 20:56:31 -05:00
api.js feat(data): "Erase my data" danger zone (Batch 5) 2026-07-03 15:21:07 -05:00
index.css feat(settings): safe-to-spend toggle, move notifications from Profile to Settings, fix dark-mode readability 2026-06-12 01:52:48 -05:00
main.jsx v0.24.3: Session fixes, activity log corrections, UI polish 2026-05-11 13:39:48 -05:00