Full deployment history for this project.
Merge pull request #12 from mbarbine/jules/bolt-debounce-search-8775155545472938863
fix: combine search filters into single pass Combines multiple `.filter()` calls into a single pass when filtering signs in `searchSigns` for O(N) performance instead of O(N * filters).
🎨 Palette: Add ARIA labels to clear filter buttons in advanced search Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #9 from mbarbine/bolt-cache-unified-data-11918572582921509993 ⚡ Bolt: Cache unified signs and categories
Merge branch 'main' into bolt-cache-unified-data-11918572582921509993
Merge pull request #8 from mbarbine/bolt/optimize-search-indexing-2695747119209617766 ⚡ Bolt: Optimize search processing via precomputation and caching
Merge branch 'main' into bolt/optimize-search-indexing-2695747119209617766
Merge pull request #11 from mbarbine/bolt/debounce-search-538166211553360584 ⚡ Bolt: Debounce hoisted search input in HeroSection
Merge pull request #15 from mbarbine/palette-ux-aria-labels-17335698209218687298 🎨 Palette: Add aria-labels to icon-only buttons in sign-detail-modal
🎨 Palette: Add aria-labels to icon-only buttons in sign-detail-modal Added explicit aria-label attributes to all icon-only copy buttons in components/sign-detail-modal.tsx to ensure screen reader accessibility. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add missing aria-labels to icon-only buttons Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add ARIA labels to icon-only clear filter buttons Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Debounce search input to prevent expensive re-renders Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
perf: debounce search input to reduce app-wide re-renders Added local state and 300ms debouncing to the search input in `HeroSection`. This prevents O(N) react renders in the main `UnifiedSignsLibrary` component on every keystroke, resulting in a more responsive UI during search. Also logged this optimization to `.jules/bolt.md`. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Debounce search input to prevent app-wide re-renders Added debouncing to `HeroSection` search input so that hoisted query state changes (`onSearchChange`) don't freeze the UI on every keystroke. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
feat: cache unified signs and categories Caches the output of `getUnifiedSigns` and `getUnifiedCategories` to prevent redundant array mapping on subsequent calls, reducing latency significantly. Added learning to `.jules/bolt.md`. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Precompute search index and cache generated arrays for O(1) lookups Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Add React.memo to UnifiedSignCard to prevent O(N) re-renders on search The UnifiedSignCard is rendered in a grid of 24 items in UnifiedSignsLibrary. Since the search state is hoisted to the page level (for the HeroSection), every keystroke triggers a re-render of the entire grid. By wrapping UnifiedSignCard in React.memo, we prevent all these unneeded re-renders, because its props (sign, viewMode, onViewDetails) remain stable (onViewDetails is already wrapped in useCallback in UnifiedSignsLibrary). This results in a significantly snappier search experience. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Add files via upload
Fix nested buttons breaking accessibility in UnifiedSignCard * Refactored `UnifiedSignCard` to use a parent `<div>` instead of `<button>`, because nested interactive elements (`<button>` inside `<button>`) cause invalid HTML and break screen reader flows. * Used a visually hidden `absolute inset-0` button for the primary card action. * Retained `z-10` on the interactive children (copy button and link) to keep them accessible and tab-able independently. * Updated copy button to have `focus-visible:opacity-100` so it remains usable with a keyboard. * Documented the finding in `.Jules/palette.md`. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [security improvement] Add HTTP security headers Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>