Skip to content

Navigation Menu

Sign in
Sign up

feat: App Navigator sidebar for quick app switching (#1026) - #2055

Draft
manzke wants to merge 1 commit into
main from
claude/charming-fermat-js2fkf
Draft

feat: App Navigator sidebar for quick app switching (#1026) #2055
manzke wants to merge 1 commit into
main from
claude/charming-fermat-js2fkf

Conversation

@manzke

@manzke manzke commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes #1026. Adds a hamburger-triggered "App Navigator" sidebar — a searchable, category-grouped
list of apps — so users can switch between apps without leaving an active chat, replacing the
DOM-injected custom-scripts.html hack from the aurahub fork with a native React component.

  • client/src/shared/components/AppNavigator.jsx — the sliding panel (300px, 85vw max on
    mobile), backdrop, search box, and category groups. Opens via a new header button
    (AppNavigatorToggleButton.jsx) or Ctrl/Cmd+B; closes on Escape, backdrop click, route
    change, or selecting an app.
  • client/src/shared/contexts/AppNavigatorContext.jsx — open/closed state (never persisted,
    per the issue's FR-12) and per-category collapsed state (persisted to localStorage, mirroring
    the existing admin SidebarContext.jsx pattern).
  • client/src/hooks/useAppNavigator.js — wraps the context and registers the Ctrl/Cmd+B
    shortcut, ignored while typing in a text field so it doesn't fight "bold text" shortcuts.
  • client/src/shared/utils/appNavigatorGroups.js (+ appNavigatorGroups.test.js) — pure
    search-filter and category-grouping logic, covered by a plain-node unit test wired into
    npm run test:quick as test:app-navigator. Categories reuse appsList.categories.list as the
    single source of id/name/color — the new appNavigator.categoryOrder config only reorders them,
    it doesn't redefine category metadata.
  • Keyboard navigation: Up/Down between app items via the existing useKeyboardNavigation hook
    (no new keyboard-handling code needed).
  • Admin UI: new UI Customization > App Navigator tab
    (AppNavigatorCustomization.jsx) to enable/disable the sidebar and reorder categories.
  • Config: new migration V078__add_app_navigator_config.js seeds
    ui.json's appNavigator: { enabled: true, categoryOrder: [] } for existing installs;
    server/defaults/config/ui.json ships it for fresh installs. Documented in docs/ui.md and
    docs/releases/5.5.0/features.md.
  • i18n: added an appNavigator section to shared/i18n/en.json/de.json.

Per the implementation-plan comment already on the issue, this PR intentionally scopes to the
original PRD (app switcher + categories + search) and does not attempt the larger "Phase 1C"
three-column ChatGPT-style shell proposed in a later comment (tracked separately as #1491) —
building that in the same PR would conflate two different-sized efforts.

Note on branch history

This branch (claude/charming-fermat-js2fkf) already had three unrelated, unmerged commits from
earlier sessions with no PR ever opened for them (migration version-collision fix for #1685, an
audit-log gap fix, and a dead-code removal in LoginPage). Per repo convention I kept rather than
discarded that prior work, so this diff includes those in addition to the App Navigator feature.
Happy to split them into separate PRs if preferred.

Test plan

  • New client/src/shared/utils/appNavigatorGroups.test.js (11 assertions) — search
    filtering, category ordering/fallback, and the "Other" bucket — via
    npm run test:app-navigator (now part of test:quick).
  • server/tests/migrations-runner.test.js — 46/46 passing, confirms the new V078 migration
    doesn't collide with the version-uniqueness check added earlier on this branch.
  • npx eslint on all changed/new files — 0 errors (a few pre-existing-style warnings only,
    confirmed present before this change too).
  • npx prettier --check — clean.
  • npx vite build (client) — succeeds with no errors.
  • Booted the dev server: migration V078 applies cleanly, ui.json gets
    appNavigator: { enabled: true, categoryOrder: [] }.
  • Manual browser verification of the sidebar UI (open/close, search, category collapse,
    keyboard nav) was not performed in this sandboxed session — no way to drive a real browser
    here.

🤖 Generated with Claude Code


Generated by Claude Code

Adds a hamburger-triggered, searchable, category-grouped sidebar so
users can jump between apps without leaving an active chat, ported
from the aurahub fork's DOM-injected version as a native React
component.
- Opens via a new header button or Ctrl/Cmd+B; closes on Escape,
 backdrop click, or app selection.
- Apps are grouped by category with collapsible sections (collapse
 state persisted per browser); apps without a recognized category
 land in a trailing "Other" group.
- Client-side search filters by name/description; Up/Down arrow keys
 navigate the list via the existing useKeyboardNavigation hook.
- Admin-configurable under UI Customization > App Navigator: enable
 toggle and category display order, reusing appsList.categories.list
 as the single source of category metadata (no duplication).
- New migration V078 seeds ui.json defaults for existing installs;
 fresh installs get them via server/defaults/config/ui.json.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WSQoE1fhwZLhziXxv8SYiq 
@github-actions github-actions Bot added documentation Improvements or additions to documentation dependencies Pull requests that update a dependency file backend i18n frontend admin ui labels Jul 15, 2026
@manzke manzke mentioned this pull request Jul 15, 2026
8 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Assignees

No one assigned

Labels

admin backend dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation frontend i18n ui

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

feat: App Navigator Sidebar

2 participants

AltStyle によって変換されたページ (->オリジナル) /