Commit graph

22 commits

Author SHA1 Message Date
ba25ee47a5 fix: pin bucket grid to bottom of viewport with sticky footer; prevents mis-click from layout shift 2026-03-04 12:26:04 -08:00
cf69452e42 feat: implement FetchView — SSE progress bars, account selection, targeted fetch 2026-03-04 12:23:58 -08:00
a9f7ba1b0c feat: implement StatsView — label distribution bars, file info, download 2026-03-04 12:21:21 -08:00
d372155e4b feat: implement SettingsView — IMAP account management, test connection, display toggles 2026-03-04 12:20:30 -08:00
7fa62ae073 feat: add useApiSSE helper for Server-Sent Events connections 2026-03-04 12:17:46 -08:00
7bd37ef982 feat: add Vue Router + stow-able AppSidebar; stub Fetch/Stats/Settings views 2026-03-04 12:12:26 -08:00
8ec2dfddee fix: bucket grid now renders 3x3+1 numpad layout on all screen sizes 2026-03-04 11:31:36 -08:00
92da5902ba fix: UndoToast now emits expire after 5s so toast self-dismisses 2026-03-04 11:29:03 -08:00
82eeb4defc fix: prevent blank page on rebuild and queue drain on skip/discard
Two bugs fixed:

1. Blank white page after vue SPA rebuild: browsers cached old index.html
   referencing old asset hashes. Assets are deleted on rebuild, causing
   404s for JS/CSS -> blank page. Fix: serve index.html with
   Cache-Control: no-cache so browsers always fetch fresh HTML.
   Hashed assets (/assets/chunk-abc123.js) remain cacheable forever.

2. Queue draining to empty on skip/discard: handleSkip and handleDiscard
   never refilled the local queue buffer. After enough skips, store.current
   went null and the empty state showed (blank-looking). Fix: both handlers
   now call fetchBatch() when queue drops below 3, matching handleLabel.

Also: sync classifier_adapters LABELS to match current 10-label schema
(new_lead + hired, remove unrelated).

48 Python tests pass, 48 frontend tests pass.
2026-03-03 19:26:34 -08:00
47973aeba6 feat(avocet): easter eggs — hired confetti, century mark, clean sweep, midnight labeler, cursor trail 2026-03-03 16:24:47 -08:00
382bca28a1 feat(avocet): LabelView — wires store, API, card stack, keyboard, easter eggs
Implements Task 13: LabelView.vue wires together the label store, API
fetch, card stack, bucket grid, keyboard shortcuts, haptics, motion
preference, and three easter egg badges (on-a-roll, speed round, fifty
deep). App.vue updated to mount LabelView and restore hacker-mode theme
on load. 3 new LabelView tests; all 48 tests pass, build clean.
2026-03-03 16:21:07 -08:00
b623d252d0 feat(avocet): LabelBucketGrid bucket-mode CSS — spring expansion, glow on drop 2026-03-03 16:19:29 -08:00
9b5a1ae752 feat(avocet): EmailCardStack — swipe gestures, depth shadows, dismissal classes 2026-03-03 16:16:09 -08:00
e7f08ce685 feat(avocet): UndoToast — 5-second countdown, undo button, accessible 2026-03-03 16:13:02 -08:00
5114e6ac19 feat(avocet): useLabelKeyboard — 1-9, h, S, D, U, ? shortcuts 2026-03-03 16:12:58 -08:00
cd6cae2040 feat(avocet): LabelBucketGrid — numpad layout, bucket-mode expansion, drag drop 2026-03-03 16:04:31 -08:00
e05ac885d7 feat(avocet): EmailCard component — subject, from/date, body preview, expand/collapse 2026-03-03 16:03:01 -08:00
e823c84196 feat(avocet): useApi, useMotion, useHaptics, useEasterEgg (Konami/hacker mode)
- useApiFetch: typed fetch wrapper with network/http error discrimination
- useMotion: reactive localStorage override for rich-animation toggle, respects OS prefers-reduced-motion
- useHaptics: label/discard/skip/undo vibration patterns, gated on rich mode
- useKonamiCode + useHackerMode: 10-key Konami sequence → hacker theme, persisted in localStorage
- test-setup.ts: jsdom matchMedia stub so useMotion imports cleanly in Vitest
- smoke.test.ts: import smoke tests for all 4 composables (12 tests, all passing)
2026-03-03 15:58:43 -08:00
209f49f7ea feat(avocet): Pinia label store with queue, lastAction, easter egg counter 2026-03-03 15:54:44 -08:00
2abda18b92 fix(avocet): align theme with Peregrine design system — full token set, dark mode, self-hosted fonts 2026-03-03 15:52:38 -08:00
ac1f4b8ba1 feat(avocet): CircuitForge base theme + Avocet Slate Teal/Russet colors 2026-03-03 15:49:07 -08:00
cb059492bf feat(avocet): Vite + Vue 3 + UnoCSS + Vitest scaffold 2026-03-03 15:46:58 -08:00