Files
k-mood/spa
Gabriel Kaszewski bf148902ab spa hardening, offline logging, rate limit fixes
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)
2026-08-28 15:00:30 +02:00
..
2026-08-25 23:24:36 +02:00
2026-08-25 23:24:36 +02:00
2026-08-26 20:58:14 +02:00
2026-08-25 23:24:36 +02:00
2026-08-25 23:24:36 +02:00
2026-08-26 20:58:14 +02:00
2026-08-25 23:24:36 +02:00
2026-08-25 23:24:36 +02:00

K-Mood SPA

Frontend for K-Mood, a self-hosted mood tracking journal. Log moods, activities, photos, and voice memos. Track trends, streaks, and correlations over time.

Stack

React 19, TanStack Router (file-based), TanStack Query, Axios, Zod, Tailwind v4, shadcn/ui, Recharts, Vite

Getting started

bun install
bun dev          # http://localhost:5173

Set VITE_API_URL in .env to point at the Rust API (defaults to same origin).

Scripts

Command Description
bun dev Dev server on port 5173
bun run build Production build
bun run preview Preview production build
bun run typecheck Type check without emitting
bun test Run tests
bun run lint Lint
bun run format Format with Prettier

Project structure

src/
  api/           # Zod schemas + Axios client
  components/    # UI and feature components
  hooks/         # TanStack Query hooks
  routes/        # File-based routes (TanStack Router)
  lib/           # Utilities