nh9961
767967f25d
fix: unify day boundaries on device-local time, JSON import preview parity
...
- Limits/streaks/greeting now use device-local days (was hardcoded Europe/London),
matching dashboard metrics; label copy updated
- JSON imports now go through the same preview/duplicate-detection modal as Excel
2026-07-19 21:12:02 +00:00
nh9961
9e8f3c55d6
perf: logbook memoization and pagination, debounced realtime, lazy exceljs
...
- Precompute per-entry spend/caffeine/sugar map; paginate ledger at 50 rows
- Debounce realtime refetches (500ms trailing) and suppress during bulk import
- Show import progress (Importing X of N)
- Dynamic-import exceljs: entry chunk 1640 -> 700 kB
- Skeleton placeholders for initial load on Overview/Trends/Logbook
2026-07-19 21:00:51 +00:00
nh9961
bb5750e928
feat(ui): unified motion language and interaction states
...
- Shared transition constants (view/modal/toast/tile) with standard ease-out
- MotionConfig reducedMotion=user plus CSS reduced-motion neutralizer
- Consistent hover/press/focus-visible states across all interactive classes
2026-07-19 20:45:47 +00:00
nh9961
3706021326
feat(ui): view-by-view UX redesign and accessibility pass
...
- Overview: limits hero with progress states, spend pill, primary quick-add, mobile FAB
- Logbook: day-grouped entries with subtotals, unified filter bar, Log again,
human source labels
- Trends: unified chart cards, tick thinning, chart aria summaries, radiogroup
forecast control
- Settings: sectioned layout with separated danger zone, ThemePicker aria fix
- EntryModal: fieldset grouping, Field primitive, safe date validation
- AuthView: autoComplete, password visibility toggle
- StatHint popover replacing title-only tooltips; mobile stacked import preview
- Remaining inline hex styles converted to theme tokens
2026-07-19 20:34:10 +00:00
nh9961
733c6cbae8
feat(ux): toast system, accessible modal wrapper, safer dialogs
...
- Global toast stack (success/error/info) replacing hidden notice/syncError
- Shared Modal: focus trap, Escape, focus restore, scroll lock; all dialogs migrated
- ConfirmDialog tone prop; limit-override now warning-styled
- Single-entry delete now requires confirmation, per-row busy spinner
- Onboarding no longer closes on failed save; inline error + skip option
2026-07-19 20:08:14 +00:00
nh9961
50c729eae7
refactor: decompose monolithic App.tsx into per-component files
...
- Extract views to src/components/views/ (Overview, Logbook, Trends, Settings, Auth)
- Extract standalone components (EntryModal, ImportPreviewModal, ConfirmDialog,
Sidebar, TopBar, MobileNav, EntryLedger, FiltersPanel, QuickAddPanel, etc.)
- Move shared helpers to src/lib (dashboard, filters, userDisplay) and static
data to src/data (accents, quickAdds)
- App.tsx now orchestration-only (2971 -> 777 lines); no behavior change
2026-07-19 19:31:40 +00:00