Closes #359, #360, #361, #362.
- Added
useBookmarkshook (src/hooks/useBookmarks.ts) that persists bookmarked invoice IDs tolocalStorage, enforces a maximum of 100 bookmarks, and exposestoggleBookmark,isBookmarked,clearAll,count, andatLimit. - Fixed duplicate
onQuickFundprop declaration inInvoiceMarketplaceCard. - Wired
isBookmarked/onBookmarkinto each card on the marketplace page. - Added a Bookmarked filter button to the marketplace filter bar; toggling it shows only bookmarked invoices and displays a live count badge.
- Tightened the
heroFadeInUpkeyframe to useease-outfor a more natural deceleration curve. - Added an explicit
opacity: 1baseline rule to.hero-animateso elements remain fully visible whenprefers-reduced-motion: reduceis active — eliminating any risk of invisible content in that mode. - Existing stagger (200 ms between elements, 600 ms per animation) and
animation-fill-mode: bothwere preserved. - Fixed a Tailwind canonical-class warning:
hover:translate-y-[-2px]→hover:-translate-y-0.5.
componentDidCatchnow capturesReact.ErrorInfo.componentStackand stores it in state.- In dev mode the error UI now shows two collapsible
<details>panels: Stack trace (open by default) and Component hierarchy. - The copy-to-clipboard payload now includes the component stack alongside the JS stack trace.
- Added a Docs link (dev mode only) pointing to the React error-boundary reference documentation, opened in a new tab.
- Created
SoundNotificationSettingscomponent (src/components/SoundNotificationSettings.tsx) that consumes the existinguseSoundNotificationshook. - UI provides: enable/disable toggle switch, mute toggle switch, volume slider (0–100 %), and two preview buttons (success chime / alert tone).
- All controls are disabled when the feature is off or muted. Settings are persisted automatically by the hook via
localStorage.
- On the marketplace page, bookmark several invoices and confirm the bookmark icon toggles and the count badge updates.
- Reload the page and verify bookmarks persist.
- Enable "Bookmarked" filter — confirm only bookmarked invoices are shown.
- Attempt to bookmark 101 invoices — confirm the 101st is silently rejected.
- On the landing page, confirm fade-in-up animations play in sequence with ~200 ms stagger.
- Enable
prefers-reduced-motion: reducein the OS / browser and verify all hero content is fully visible with no animations. - Trigger a component error in dev mode — confirm stack trace and component hierarchy panels appear and are readable, the copy button includes both, and the Docs link opens the correct React page.
- Open
SoundNotificationSettings, enable sounds, adjust volume, and click both preview buttons — confirm audio plays at the expected pitch/volume. - Reload and verify sound settings persisted.