Full deployment history for this project.
Fix missing authentication on /api/events endpoint Adds X-API-Key header validation against INTERNAL_API_KEY for both GET and POST requests to prevent unauthorized access. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Add keyboard focus indicators to interview list buttons Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: [performance] Hoist invariant search string transformation - Hoisted `search.toLowerCase()` outside of the `.filter()` callback in `components/dashboard/interviews-list.tsx` to prevent redundant main-thread string allocations and operations for every item in the `store.interviews` array during renders. - Also applied `.toLowerCase()` to tags to ensure case-insensitive searches match tags properly. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Hoist invariant calculations in list filters Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add keyboard focus styles to native buttons Added `focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1` to native `<button>` elements in `site-header.tsx` and `theme-toggle.tsx` to restore keyboard accessibility indicators. Documented the learning in `.jules/palette.md`. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🔒 [security fix] Add authentication to events API Implemented API key authentication for the `/api/events` endpoint (GET and POST) using the `X-API-Key` header and `INTERNAL_API_KEY` environment variable. Key changes: - Added fail-closed authentication logic in `app/api/events/route.ts`. - Converted `lib/events.ts` to a Server Action to securely access `INTERNAL_API_KEY` without exposing it to the client. - Updated `emitEvent` to use absolute URLs derived from `next/headers`. - Expanded the test suite in `__tests__/api/events.test.ts` to cover authentication scenarios, including missing, invalid, and unconfigured keys. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ optimize redundant .find() operations in InterviewDetail Calculated kanbanSync and calendarSync once using useMemo to avoid multiple O(N) array scans during the React render phase. This improves rendering performance for the network sync status section. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🧪 Add tests for useToast reducer Added comprehensive unit tests for the `reducer` function in `hooks/use-toast.ts`. The tests cover: - ADD_TOAST: adding toasts and TOAST_LIMIT. - UPDATE_TOAST: updating toast properties. - DISMISS_TOAST: closing specific or all toasts. - REMOVE_TOAST: removing specific or all toasts. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
fix: implement in-memory store persistence for Node.js test environment - Added `memoryStore` module-level variable to `lib/store.ts` to hold state in environments without `window` (e.g., Node.js). - Updated `load()`, `save()`, and `resetStore()` to utilize `memoryStore` when `window` is undefined. - Updated `__tests__/lib/store.test.ts` to verify persistence and ensure test isolation using `resetStore()` in `beforeEach`. - Resolved TODO in `__tests__/lib/store.test.ts`. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Add focus states and ARIA labels to native buttons in interviews list Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Optimize getStats with single O(N) pass Replaced multiple array passes (`filter`, `reduce`) and an `O(N log N)` sort operation with a single `O(N)` loop in the `getStats` function. The original implementation performed 5 separate iterations and a sort over the interviews array on every recalculation. This becomes a bottleneck as the dataset grows, especially when called inside synchronous render paths. Reduces execution time complexity from `O(N log N)` to `O(N)` and eliminates intermediate array allocations, resulting in faster dashboard metric calculations and less main-thread blocking. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #22 from mbarbine/bolt/optimize-use-interview-6221358723204282818 ⚡ Bolt: Optimize `useInterview` hook for derived store state
Merge pull request #20 from mbarbine/palette/add-aria-labels-13978122914985130510 🎨 Palette: Add ARIA labels to icon-only buttons
Merge pull request #21 from mbarbine/bolt-remove-sync-localstorage-reads-1658302280920430070 ⚡ Bolt: Eliminate synchronous localStorage reads during React renders for team members
perf: replace synchronous getTeamMembersByIds calls during render with reactive store state derivations By eliminating synchronous calls to `getTeamMembersByIds` (which hits `localStorage` via `getStore()`) in `useInterviewTeam` and inside components (`dashboard-overview.tsx`, `prep-room.tsx`), we prevent blocking the main thread during React render cycles. The data is instead derived reactively from `useStore()` which is already available in the component context. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #18 from mbarbine/bolt/remove-sync-localstorage-reads-5380052807047478416
Merge pull request #16 from mbarbine/feat/claws-faq-breadcrumbs-5008411462551222149 feat: Add claws integration, FAQ, and Breadcrumbs
Merge pull request #15 from mbarbine/bolt-optimization-dashboard-memoization-7716745918746823575 ⚡ Bolt: Optimize DashboardOverview render performance
Merge pull request #14 from mbarbine/feat/enhance-discovery-ax-network-8189989547518517038 feat: enhance discovery files, AX, and network integrations
Merge pull request #13 from mbarbine/test/verify-project-setup-8286209063441237870 test: Run complete test suite and verify project setup
Merge pull request #12 from mbarbine/copilot/fix-integration-interview-creation Fix kanban/calendar integration in POST /api/v1/interviews and persist sync IDs
Merge pull request #11 from mbarbine/copilot/update-pnpm-lockfile [WIP] Update pnpm-lock.yaml to match package.json
Initial plan
Initial plan outline Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Initial plan
Merge pull request #5 from mbarbine/v0/mbarbine-05f1657f Launch interview coordination platform with video, AI, and calendar support
Merge pull request #4 from mbarbine/v0/mbarbine-f8583caa Launch interview coordination platform with Jitsi and Grok support
Merge pull request #3 from mbarbine/v0/mbarbine-8fa316eb Launch interview coordination platform with Jitsi and Grok support
Merge pull request #2 from mbarbine/v0/mbarbine-4eebdb6f Launch chat interview coordination platform with Jitsi integration
Merge pull request #1 from mbarbine/v0/mbarbine-a50b060b Launch chat interview coordination platform with enhanced dashboard