server:
- backup exporter, auth extractors, error shapes, CONTEXT (prior work)
- spa assets served outside the rate limit via route_layer
- requests_per_second went to per_second(), which takes an interval not a
rate: 50 meant one request per 50s once burst was spent. now converted
properly. 15/s, burst 60
spa fixes:
- account delete cleared snake_case token keys that were never written
- refresh interceptor could retry forever
- date ranges used local day boundaries stamped +00:00
- "all" period trend plotted one page; calendar days fabricated mood 3
- chart grid invisible: hsl(var(--border)) against rgba tokens
- blob url leak, orphaned media on failed save, devtools in prod bundle
- pt-safe/safe-area-pb classes never existed
spa features:
- offline outbox: entries queue to IndexedDB, replay with backoff, only
server refusals count against an entry
- drafts persist, quick-log sheet, diary infinite scroll + filters
- route error boundary, stale-chunk recovery, no service worker in dev
a11y + perf:
- mood picker is a radiogroup, activity picker keyboard-operable,
text alternatives for colour/emoji, locale week start
- dark glass over the bright photo: worst case 1.4:1 -> 4.9-9.6:1
- initial payload 1095->769kB raw, 306->230kB gzip; 38 unused components
and 5 deps dropped; fonts 218->133kB
53 tests added (43 spa, 10 server)
- Simplified map creation in ActivityCorrelations component.
- Adjusted className formatting in AccordionTrigger and other UI components for better readability.
- Removed unnecessary line breaks in various components including Breadcrumb, Calendar, Checkbox, and others.
- Enhanced code formatting in NativeSelect and NavigationMenuTrigger components for consistency.
- Updated route imports in routeTree.gen.ts for uniformity in quotation marks.
- Cleaned up JSX structure in ReminderCard and ReminderForm components for clarity.