Full deployment history for this project.
fix(perf): use `useShallow` for Zustand store in `EditorPage` Replaced direct object destructuring of the `useMarkdown` store in `EditorPage` with `useShallow` from `zustand/react/shallow`. This prevents the entire page component from re-rendering whenever unrelated properties in the store (like high-frequency hover states) change. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: optimize EditorPage re-renders with useShallow Updated the app/editor/page.tsx to use `useShallow` when pulling multiple fields from the `useMarkdown` store. This prevents the entire main editor page from re-rendering when unrelated state (like search query or position) changes. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [CRITICAL] Fix XSS vulnerabilities with isomorphic-dompurify Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Fix unoptimized Zustand subscription in EditorPage Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Prevent unnecessary EditorPage re-renders using useShallow Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [HIGH] Fix XSS vulnerability in Markdown rendering - Added `sanitizeUrl` and `sanitizeAttribute` utility functions in `lib/security/utils.ts`. - Updated `components/editor/markdown-preview.tsx` to sanitize URLs and attributes in links and images. - Updated `app/api/v1/export/route.ts` to sanitize URLs and attributes in links and images. - Added raw HTML escaping in `app/api/v1/export/route.ts` to prevent raw script execution. - Fixed blockquote parsing regression after HTML escaping. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add accessible names to responsive toolbar buttons * Add `aria-label` and `title` to View Mode, Direction, and AI Enhance buttons * Add `aria-label` to Search input * Ensures mobile layout (where text is hidden) remains accessible to screen readers Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Optimize Zustand useMarkdown store selector in EditorPage Extracted specific properties with `useShallow` from `zustand/react/shallow` in `app/editor/page.tsx`'s `useMarkdown` store call. This prevents the large layout component from unnecessarily re-rendering when unrelated store state changes (like hovering over nodes in the graph or selecting elements). Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: Fix Cross-Site Scripting (XSS) in Markdown Preview Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [CRITICAL] Fix XSS vulnerability in markdown preview Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Fix XSS vulnerabilities in markdown parser attribute rendering Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #19 from mbarbine/bolt-zustand-selectors-16839430100400386694 ⚡ Bolt: Fix expensive unnecessary re-renders via Zustand selectors
Merge pull request #17 from mbarbine/bolt-optimize-ast-parsing-3830695850576027694 ⚡ Bolt: [Reuse parsed AST in API routes to prevent redundant parsing]
Merge pull request #18 from mbarbine/palette/fix-nested-buttons-outline-3183703951342272004 🎨 Palette: Improve outline panel accessibility and fix nested buttons
🎨 Palette: Improve outline panel accessibility and fix nested buttons Refactored `OutlineItemComponent` to replace invalid nested `<button>`s with a wrapper `<div>` and sibling buttons. Added `aria-expanded`, `aria-label`, and `aria-current` attributes to improve screen reader accessibility. Also added a learning entry to `.Jules/palette.md`. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
perf: reuse parsed AST in API routes to prevent redundant parsing Updated `generateOutline` and `getDocumentStats` in `lib/markdown/parser.ts` to accept an optional pre-computed graph to avoid redundant O(N) string parsing. Applied this optimization to `app/api/v1/transform/route.ts`, `app/api/v1/export/route.ts`, and `app/api/v1/ai/chat/route.ts` which previously parsed the same markdown string three times sequentially. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #16 from mbarbine/palette-ux-tooltips-14576470073094475814
Merge pull request #15 from mbarbine/bolt/optimize-reactflow-selection-4896638417061960109
🎨 Palette: Add native tooltips and aria-labels to site header buttons What: Added `title` and `aria-label` attributes to the icon-only buttons in the SiteHeader component (File Menu, Documentation, GitHub, Theme Toggle, Mobile Menu). Why: Users didn't get immediate feedback on what the icons represented. Native tooltips provide this context without cluttering the UI. Before/After: Before, hovering over the GitHub icon did nothing. Now, it displays a native "GitHub" tooltip. Accessibility: Added explicit `aria-label`s on the `<Button>` elements to be robustly read by screen readers, complementing the existing `sr-only` spans inside them. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #14 from mbarbine/jules-5691648731242740345-0269b904 feat: enhance docs, SEO, rss, faq and platform registration
Merge pull request #13 from mbarbine/jules-144229747703492302-8c4bca18 🎨 Palette: Enhance backend, integrations, schemas, and graph feature
Merge pull request #10 from mbarbine/palette-add-toolbar-aria-labels-16361203223346263366 🎨 Palette: Add ARIA labels to icon-only toolbar buttons
Merge pull request #11 from mbarbine/perf-graph-viewer-memoization-13154626182728788078 ⚡ Bolt: Memoize expensive React Flow graph layout algorithm