Commit Graph

7 Commits

Author SHA1 Message Date
Nyk d2edc71861 fix(auth): redirect unauthenticated panel requests to login 2026-03-05 11:11:16 +07:00
Nyk a9df1a25a5 feat: add workspace discoverability and multi-project task support 2026-03-04 22:44:57 +07:00
Bhavikprit 971befe193 feat(#40): improve frontend accessibility (WCAG 2.1 AA)
- Add reusable useFocusTrap hook for modal focus management with
  Escape key support and focus restoration on close
- Task board: add role=region and aria-label to kanban columns,
  role=button and keyboard support (Enter/Space) to task cards,
  role=alert on error display, role=status on loading spinner
- Modals: add role=dialog, aria-modal, aria-labelledby, focus
  trapping, backdrop click to close, aria-label on close buttons
- Tab interface: add role=tablist/tab/tabpanel with aria-selected
  and aria-controls for task detail tabs
- Forms: add htmlFor/id associations on all modal form labels
- Layout: add skip-to-content link for keyboard navigation,
  id=main-content on main element

Addresses #40
2026-03-04 11:17:21 +04:00
Nyk 760e0a255f feat: add promo banner for nyk, DictX, and Flight Deck Pro 2026-03-04 09:52:21 +07:00
Bhavik Patel 90b712ea29
feat(#115): virtual office visualization for agents (#127)
- Create OfficePanel with Office floor plan and Org Chart view modes
- Desk-style cards with status glow, emoji indicators, pulse animation for busy agents
- Agent detail modal with task stats, activity, session info
- Auto-refresh every 10 seconds for real-time updates
- Status summary in header (working/idle/error/away counts)
- Add OfficeIcon and office nav item in CORE group
- Register office route in page.tsx

Closes #115

Co-authored-by: bhavikprit <petrobhakti@gmail.com>
2026-03-04 08:03:24 +07:00
nyk 274b726df4
feat: add Update Available banner with GitHub release check (#94)
* fix: migrate middleware.ts to proxy.ts for Next.js 16 (#88)

Next.js 16 deprecated the `middleware` file convention in favor of
`proxy`. The proxy runs on the Node.js runtime instead of Edge, so
safeCompare now uses crypto.timingSafeEqual instead of manual XOR.

All auth logic, CSRF validation, host matching, and security headers
are preserved unchanged.

* feat: add "Update Available" banner with GitHub release check

Add a dismissible emerald banner that appears when a newer GitHub release
exists, so self-hosting users know an update is available. The banner
dismisses per-version (reappears for new releases).

- Create src/lib/version.ts as single source of truth from package.json
- Add /api/releases/check route with 1hr caching and graceful fallback
- Add UpdateBanner component mirroring LocalModeBanner pattern
- Add update state to Zustand store with localStorage persistence
- Fix hardcoded v2.0 in header-bar.tsx and 2.0.0 in websocket.ts
2026-03-03 17:17:15 +07:00
nyk 6ce38b13dc
feat: sync side panel navigation with URL routes (#76) (#87)
Move page.tsx to [[...panel]] optional catch-all route so each panel
gets its own URL (e.g. /tasks, /agents, /settings). URL is the source
of truth — synced into Zustand via usePathname on every navigation.
Enables bookmarking, refresh persistence, deep-linking, and browser
back/forward.
2026-03-03 15:08:59 +07:00