summaryrefslogtreecommitdiff
path: root/apps/web/app/reader
Commit message (Collapse)AuthorAgeFilesLines
...
* fix: measure text nodes in sidebar min width calculationFuwn2026-02-072-26/+23
| | | | | | querySelectorAll(':scope > *') misses bare text nodes like 'notifications' in the footer button. Now walks childNodes to handle mixed text node + element children correctly.
* fix: include sidebar footer items in min width measurementFuwn2026-02-071-19/+48
| | | | | | Notifications button text is wider than all entries. Now measures all nav items AND footer links/buttons, taking the widest row plus badge reserve as the sidebar minimum width.
* fix: use Canvas text measurement for sidebar min widthFuwn2026-02-071-8/+23
| | | | | | getBoundingClientRect on wrapped text returns the narrow wrapped width, not the single-line width. Canvas measureText is layout- independent and gives the true single-line intrinsic text width.
* fix: measure sidebar min width from children intrinsic widthsFuwn2026-02-071-2/+16
| | | | | | scrollWidth on a block flex element returns parent width, not content width. Now sums getBoundingClientRect().width of each child element (text span + unread badge) for a screen-independent measurement.
* feat: derive sidebar min/default width from measured contentFuwn2026-02-071-2/+19
| | | | | | Measures the first sidebar nav item (all entries + unread badge) after mount and uses its scrollWidth + padding as minSize. Default is 1.4x the minimum for comfortable reading of feed titles.
* fix: persist detail panel sizes with panelIds-keyed storageFuwn2026-02-072-1/+2
| | | | | Without panelIds, the single-panel state (no entry selected) was overwriting the two-panel layout on every navigation.
* feat: persist sidebar panel sizes across page refreshesFuwn2026-02-072-2/+15
| | | | | Wire useDefaultLayout to sidebar Group with localStorage storage. Update reset command to clear both sidebar and detail layout keys.
* fix: use string percentages for react-resizable-panels v4 size propsFuwn2026-02-072-45/+56
| | | | | v4 treats numeric size props as pixels, not percentages. defaultSize={20} was rendering as 20px (~1.9% of viewport).
* feat: pre-ship polish — UI improvements, keyboard shortcuts, appearance ↵Fuwn2026-02-0716-422/+793
| | | | | | | | | | | | | | | | | | settings - Rename "muted keywords" to "muted phrases" throughout settings UI - Add header with navigation to auth pages (sign-in, sign-up, etc.) - Merge security tab (TOTP setup) into account settings tab - Fix TOTP name input truncation on Safari (w-64 → flex-1 min-w-0) - Add appearance settings: font size, time display format, entry images toggle, reading time toggle - Add keyboard shortcuts dialog (? key) with all keybindings documented - Add extended vim shortcuts: gg, G, n/N (next/prev unread), Ctrl+h/l (panel focus) - Add command palette shortcut (⌘K) to shortcuts dialog - Add icon URL fields for folders and custom feeds (DB + queries + settings UI) - Add data-has-unreads attribute for sidebar keyboard navigation - Fix SSR prerendering crash from Zustand persist and react-resizable-panels localStorage access - Add detail panel layout persistence via useDefaultLayout - Update marketing copy to advertise vim-like keyboard navigation
* style: lowercase all user-facing strings and add custom eslint ruleFuwn2026-02-079-55/+56
| | | | | | | | Comprehensive sweep of all user-facing text to enforce lowercase convention, including acronyms (api, rest, http, opml, json, totp, mfa, qr, hmac). Added asa-lowercase/lowercase-strings eslint rule that reports uppercase in notify() calls, error messages, jsx text, and checked attributes (placeholder, alt, title).
* feat: asa.news RSS reader with developer tier, REST API, and webhooksFuwn2026-02-0736-0/+6635
Full-stack RSS reader SaaS: Supabase + Next.js + Go worker. Includes three subscription tiers (free/pro/developer), API key auth, read-only REST API, webhook push notifications, Stripe billing with proration, and PWA support.