Full deployment history for this project.
refactor: extract coaching thresholds and improve cue copy Agent-Logs-Url: https://github.com/mbarbine/platphorm-biofeedback/sessions/86a578ea-f215-47bd-b7f5-33fd88b5af75 Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #18 from mbarbine/palette-a11y-roi-selector-17435920233723785745 🎨 Palette: Accessibility Improvements for ROI Selector
Merge branch 'main' into palette-a11y-roi-selector-17435920233723785745
Merge pull request #17 from mbarbine/bolt-memoize-metrics-panels-12054836691078963598 ⚡ Bolt: Memoize metrics panels with custom areEqual to prevent 30fps re-renders
Merge branch 'main' into bolt-memoize-metrics-panels-12054836691078963598
Merge pull request #13 from mbarbine/bolt-memoize-dashboard-panels-13057253169605864094 ⚡ Bolt: Memoize dashboard panel components to prevent frequent re-renders
Merge branch 'main' into bolt-memoize-dashboard-panels-13057253169605864094
Merge pull request #16 from mbarbine/bolt/memoize-mental-state-monitor-16642708186500084025 ⚡ Bolt: Memoize MentalStateMonitor to prevent unnecessary re-renders
Merge branch 'main' into bolt/memoize-mental-state-monitor-16642708186500084025
Merge pull request #21 from mbarbine/palette-a11y-improvements-10231411983773985828 🎨 Palette: Screen Reader Experience Enhancements
Merge branch 'main' into palette-a11y-improvements-10231411983773985828
Merge pull request #12 from mbarbine/bolt-memoize-caninemonitor-13962140850705893938 ⚡ Bolt: Memoize CanineMonitor to prevent unnecessary re-renders
Merge branch 'main' into bolt-memoize-caninemonitor-13962140850705893938
Merge pull request #14 from mbarbine/perf/bolt-memoize-panels-6799529604017376598 ⚡ Bolt: Memoize expensive metrics panels
Merge branch 'main' into palette/ux-aria-busy-auto-detect-17653363026763235914
Merge pull request #22 from mbarbine/palette/ux-accessibility-improvements-8603265534135105213 🎨 Palette: Improve accessibility for Auto-Detect button and empty states
Merge branch 'main' into palette/ux-accessibility-improvements-8603265534135105213
Merge pull request #26 from mbarbine/jules-palette-a11y-17389275807341616484 🎨 Palette: Accessibility improvements for async buttons and empty states
feat(ux): 🎨 Palette: Accessibility improvements for async buttons and empty states 💡 What: - Added `aria-busy={isAutoDetecting}` to the 'Auto-Detect' button in `app/page.tsx` - Added `aria-hidden="true"` to the decorative `<Target />` icon in the 'No Active Scenario' empty state in `components/scenario-status.tsx` - Created `.jules/palette.md` UX journal to log these accessibility learnings 🎯 Why: - These updates satisfy the project's UX and accessibility standards. Buttons performing asynchronous operations should signal their busy state to assistive technologies, and purely decorative visual elements in empty states should be hidden to reduce screen reader clutter. 📸 Before/After: - Verified UI functionality using Playwright script before removing temporary test artifacts. ♿ Accessibility: - Async loading state is communicated to screen readers via `aria-busy`. - Screen reader focus and announcement flow is improved by hiding non-semantic, decorative icons via `aria-hidden`.
🎨 Palette: Accessibility enhancements for async states and empty states - Added `aria-busy` to Auto-Detect button during active detection processing - Added `aria-hidden="true"` to large, decorative empty state icons (`<Target />` and `<Activity />`) - Updated `.jules/palette.md` UX journal with accessibility learnings
🎨 Palette: Improve accessibility for async buttons and empty states Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: Add security headers to Next.js configuration Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add accessibility attributes to loading button and empty state Added `aria-busy` to the auto-detect button to announce its loading state properly and `aria-hidden="true"` to decorative `Activity` icons in `page.tsx` and `anomaly-feed.tsx` to reduce screen reader clutter. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
feat(a11y): enhance screen reader experience for buttons and icons - Add `aria-busy` to the Auto-Detect button during active detection. - Add `aria-hidden="true"` to decorative `lucide-react` icons in control buttons and the Recent Events header to prevent redundant screen reader announcements. - Add corresponding entry to `.jules/palette.md` documenting this accessibility learning. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
feat(ux): Add aria-busy and aria-hidden to Auto-Detect button Added `aria-busy` to the "Auto-Detect" button in `app/page.tsx` to announce its async state to screen readers. Also added `aria-hidden="true"` to the purely decorative `<Activity>` icons within the button to reduce screen reader clutter. Documented this finding in `.jules/palette.md`. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Enhance empty states and async button accessibility 💡 What: Added `aria-busy` to the Auto-Detect async button, improved the visual design of the "Recent Events" empty state by adding a subdued decorative icon, and hid decorative icons from screen readers using `aria-hidden="true"`. 🎯 Why: Async buttons should notify screen readers when a process is running, and decorative icons clutter screen reader output if not hidden. Additionally, plain text empty states feel broken or unintentional; a subdued icon improves visual polish. ♿ Accessibility: Better screen reader experience for loading states and less auditory clutter from purely decorative SVG icons. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Improve accessibility of ROI selector * Added `role="region"` and `aria-label` to the interactive canvas to provide screen reader context. * Added `aria-pressed` to the lock toggle button. * Added `aria-expanded` to the help toggle button. * Updated `.jules/palette.md` to log this critical learning. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Memoize metrics panels with custom areEqual to prevent 30fps re-renders Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
perf: Memoize MentalStateMonitor with custom comparator - Wrapped MentalStateMonitor in React.memo - Added custom areEqual function to check specific primitive fields consumed by the component - Added explanatory comments detailing the expected impact - Created a new entry in .jules/bolt.md documenting the learning around memoization with large, frequently updated objects Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Memoize MentalStateMonitor with custom equality Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
perf: memoize expensive metrics panels to reduce re-renders Added React.memo with custom equality comparisons to `MentalStateMonitor` and `AdvancedSignalsPanel`. These components previously re-rendered at 30fps whenever the parent's `metrics` object reference changed, even if their specific target metrics were stable. Impact: Significantly reduces DOM reconciliation overhead by preventing unnecessary evaluations of these complex UI panels during the active monitoring loop. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #7 from mbarbine/palette-ux-aria-labels-9993793985486216224 🎨 Palette: Add aria-labels to icon-only buttons in Session History
Merge branch 'main' into palette-ux-aria-labels-9993793985486216224
Merge branch 'main' into palette-accessibility-session-history-7793599967026165453
🎨 Palette: Added aria-labels to Session History action buttons Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
feat: Add ARIA labels to Session History export and delete buttons Adds `aria-label` attributes to the icon-only buttons in `components/session-history.tsx` to improve screen reader accessibility. This includes the JSON export, CSV export, and session delete buttons. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
sync changes from main into development branch Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
feat: reorganize layout for visible research concept metrics Move Advanced Analysis to top and ensure all research panels display data. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
fix: resolve hydration error in header component Replace nested <p> tags with <div> to fix rendering issue. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
fix: handle undefined values in TeamSyncPanel Add safe defaults to handle undefined values and prevent errors. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
fix: add safe defaults to AnomalyFeed component Prevent undefined errors with nullish coalescing for props. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
feat: enhance live demo with advanced physiological signals and real-time features Add new signals, anomaly detection, real-time scoring, and readiness indicators. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
fix: upgrade React and React DOM to 19.2.1 for security Update to patched version to address CVE-2025-55182. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
fix: upgrade React and React DOM to patched version 19.2.1 Address CVE-2025-55182 security vulnerability. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
feat: add nostril flaring detection and UI updates Implement nostril flaring detection and categorize events by origin. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>