-
Notifications
You must be signed in to change notification settings - Fork 5
feat: App Navigator sidebar for quick app switching (#1026) - #2055
Draft
manzke wants to merge 1 commit into
Draft
feat: App Navigator sidebar for quick app switching (#1026) #2055manzke wants to merge 1 commit into
manzke wants to merge 1 commit into
Conversation
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
8 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.htmlhack from the aurahub fork with a native React component.client/src/shared/components/AppNavigator.jsx— the sliding panel (300px, 85vw max onmobile), backdrop, search box, and category groups. Opens via a new header button
(
AppNavigatorToggleButton.jsx) orCtrl/Cmd+B; closes on Escape, backdrop click, routechange, 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, mirroringthe existing admin
SidebarContext.jsxpattern).client/src/hooks/useAppNavigator.js— wraps the context and registers theCtrl/Cmd+Bshortcut, ignored while typing in a text field so it doesn't fight "bold text" shortcuts.
client/src/shared/utils/appNavigatorGroups.js(+appNavigatorGroups.test.js) — puresearch-filter and category-grouping logic, covered by a plain-node unit test wired into
npm run test:quickastest:app-navigator. Categories reuseappsList.categories.listas thesingle source of id/name/color — the new
appNavigator.categoryOrderconfig only reorders them,it doesn't redefine category metadata.
useKeyboardNavigationhook(no new keyboard-handling code needed).
(
AppNavigatorCustomization.jsx) to enable/disable the sidebar and reorder categories.V078__add_app_navigator_config.jsseedsui.json'sappNavigator: { enabled: true, categoryOrder: [] }for existing installs;server/defaults/config/ui.jsonships it for fresh installs. Documented indocs/ui.mdanddocs/releases/5.5.0/features.md.i18n: added anappNavigatorsection toshared/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 fromearlier 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 thandiscarded 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
client/src/shared/utils/appNavigatorGroups.test.js(11 assertions) — searchfiltering, category ordering/fallback, and the "Other" bucket — via
npm run test:app-navigator(now part oftest:quick).server/tests/migrations-runner.test.js— 46/46 passing, confirms the new V078 migrationdoesn't collide with the version-uniqueness check added earlier on this branch.
npx eslinton 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.V078applies cleanly,ui.jsongetsappNavigator: { enabled: true, categoryOrder: [] }.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