Skip to content

polish sidebar navigation and project icons#8896

Merged
morgmart merged 12 commits intomainfrom
navigation-polish
Apr 29, 2026
Merged

polish sidebar navigation and project icons#8896
morgmart merged 12 commits intomainfrom
navigation-polish

Conversation

@morgmart
Copy link
Copy Markdown
Collaborator

Category: improvement
User Impact: Users can personalize projects with polished icons, scanned repository artwork, or custom uploads, and the sidebar feels more aligned and intentional.
Problem: Project color dots felt visually juvenile and did not give enough identity to code projects. The sidebar interactions also had uneven hover behavior and small action affordances that made rows feel less stable.
Solution: This adds a project icon picker with Tabler presets, repository icon scanning, custom image uploads, localized labels, and scoped upload feedback. It also refines the Goose 2 sidebar layout, row hover states, action sizing, and project/chat alignment so navigation feels calmer and more polished.

File changes

ui/goose2/src-tauri/src/commands/mod.rs
Registers the new project icon command module so the frontend can scan and read icons.

ui/goose2/src-tauri/src/commands/project_icons.rs
Adds repository icon discovery and custom icon loading, including extension checks, size limits, scoring, de-duping, and data URL generation.

ui/goose2/src-tauri/src/lib.rs
Exposes the new icon scanning and reading commands through the Tauri invoke handler.

ui/goose2/src/app/AppShell.tsx
Wires sidebar settings entry points and keeps project icon metadata available when projects flow into chat controls.

ui/goose2/src/app/ui/TopBar.tsx
Simplifies the top bar shell now that the left navigation carries the main chrome.

ui/goose2/src/features/chat/hooks/useChatSessionController.ts
Includes project icon metadata in project options used by chat controls.

ui/goose2/src/features/chat/types.ts
Adds optional project icon/color fields to the project option type.

ui/goose2/src/features/chat/ui/ChatContextPanel.tsx
Adjusts context panel toggle styling to match the updated navigation polish.

ui/goose2/src/features/chat/ui/ChatInputToolbar.tsx
Shows project icons in the project selector and keeps the no-project state visually distinct.

ui/goose2/src/features/chat/ui/ProjectSelectorIcon.tsx
Adds a small reusable renderer for project selector icons.

ui/goose2/src/features/projects/api/projects.ts
Adds frontend APIs and types for scanning repository icons and reading custom uploaded icon files.

ui/goose2/src/features/projects/ui/CreateProjectDialog.tsx
Replaces color selection with the icon picker, triggers repository scans from included directories, handles custom uploads, and keeps icon-specific errors close to the picker.

ui/goose2/src/features/projects/ui/ProjectIcon.tsx
Adds the shared project icon renderer with Tabler presets, data image support, legacy folder-dot normalization, and image fallback behavior.

ui/goose2/src/features/projects/ui/ProjectIconPicker.tsx
Adds the scrollable icon picker UI with scanned repository icons, evenly distributed Tabler presets, custom upload, loading state, and localized labels.

ui/goose2/src/features/projects/ui/ProjectsView.tsx
Renders project icons in the projects list and edit flows.

ui/goose2/src/features/projects/ui/tests/CreateProjectDialog.test.tsx
Updates dialog tests for icon selection and adds coverage for custom icon upload errors.

ui/goose2/src/features/settings/ui/SettingsModal.tsx
Shows project icons in archived project rows.

ui/goose2/src/features/sidebar/ui/Sidebar.tsx
Refactors sidebar structure, removes the moving highlight implementation, adds settings handling, and updates nav item rendering.

ui/goose2/src/features/sidebar/ui/SidebarChatRow.tsx
Refines chat row hover/active/menu states so the row stays highlighted while actions are hovered or open.

ui/goose2/src/features/sidebar/ui/SidebarItemMenu.tsx
Keeps project action menus visible while open and aligns action icon sizing with chat rows.

ui/goose2/src/features/sidebar/ui/SidebarNavItem.tsx
Adds a reusable sidebar navigation row component.

ui/goose2/src/features/sidebar/ui/SidebarProjectsSection.tsx
Renders project icons, aligns project/chat labels, updates row actions, and keeps hover treatment consistent across side buttons.

ui/goose2/src/features/sidebar/ui/useSidebarHighlight.ts
Removes the previous moving-highlight helper after replacing it with row-local hover and active states.

ui/goose2/src/features/status/ui/StatusBar.tsx
Removes the old status bar surface as part of the updated app chrome.

ui/goose2/src/shared/i18n/constants.ts
Removes the deleted status namespace registration.

ui/goose2/src/shared/i18n/i18n.ts
Removes the deleted status locale bundle.

ui/goose2/src/shared/i18n/locales/en/projects.json
Adds English strings for icon selection, upload, scanning, and Tabler preset labels.

ui/goose2/src/shared/i18n/locales/en/sidebar.json
Updates the recents section label to match the new navigation language.

ui/goose2/src/shared/i18n/locales/en/status.json
Removes the deleted status namespace.

ui/goose2/src/shared/i18n/locales/es/projects.json
Adds Spanish strings for icon selection, upload, scanning, and Tabler preset labels.

ui/goose2/src/shared/i18n/locales/es/sidebar.json
Updates the recents section label in Spanish.

ui/goose2/src/shared/i18n/locales/es/status.json
Removes the deleted status namespace.

ui/goose2/src/shared/styles/globals.css
Adds small shared styling support used by the refreshed navigation surfaces.

Reproduction Steps

  1. Open Goose 2 and create or edit a project with at least one included repository directory.
  2. In the project dialog, confirm the Icon section shows scanned repository icons first, followed by evenly spaced Tabler preset icons and an Upload button.
  3. Upload an unsupported or oversized icon and confirm the error appears directly under the icon picker.
  4. Choose a Tabler icon and save; confirm the project icon appears in the sidebar, project selector, projects view, and archived project settings row.
  5. Hover project and chat rows in the sidebar, including their ellipsis/edit actions, and confirm the full row highlight stays active while hovering side buttons or while menus are open.
  6. Collapse the sidebar and confirm projects/chats still render with aligned, legible icons.

Verification

  • cargo fmt --all -- --check
  • cargo clippy --all-targets -- -D warnings
  • pnpm --dir ui/goose2 run check
  • ./scripts/check-openapi-schema.sh
  • pnpm --dir ui/goose2 test -- CreateProjectDialog
  • Pre-push goose2 gate passed: Biome, Vitest, Tauri cargo check/clippy, and production build

Screenshots/Demos

Visual review happened locally during implementation. Screenshots are in the working thread for the sidebar icon picker, upload error placement, and row hover states.

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7704aabec7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread ui/goose2/src-tauri/src/commands/project_icons.rs Outdated
@lifeizhou-ap

This comment has been minimized.

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 675f5d61da

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread ui/goose2/src-tauri/src/commands/project_icons.rs
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
@morgmart
Copy link
Copy Markdown
Collaborator Author

@lifeizhou-ap thanks for the review. I addressed the checklist in the follow-up work:

  • Split SidebarProjectsSection into focused sidebar pieces: SidebarProjectList, SidebarProjectSection, and SidebarRecentsSection, so the project list / per-project rows / recents behavior are easier to evolve independently.
  • Extracted the icon scan, upload, selection, reset, and pending/error state from CreateProjectDialog into useProjectIconSelection.
  • Moved the pure icon catalog, normalization, file/data-url helpers, and path encoding out of ProjectIcon.tsx into features/projects/lib/projectIcons.ts, leaving ProjectIcon.tsx as the renderer.
  • Replaced the handwritten editingProject shape with the shared ProjectInfo type so the dialog stays aligned with the project DTO.
  • Added direct unit coverage for projectIcons and useProjectIconSelection, and kept the dialog tests covering the integrated behavior.

Verified with the targeted Vitest files, pnpm exec tsc --noEmit, Biome checks, the local e2e suite, and the full pre-push suite.

Copy link
Copy Markdown
Collaborator

@baxen baxen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! tested locally and icon identification is working well, the various operations around projects all working

@morgmart morgmart added this pull request to the merge queue Apr 29, 2026
Merged via the queue into main with commit 5fcdf31 Apr 29, 2026
27 checks passed
@morgmart morgmart deleted the navigation-polish branch April 29, 2026 18:28
lifeizhou-ap added a commit that referenced this pull request Apr 30, 2026
* main: (24 commits)
  fix: copy and content improvements in goose2 (#8886)
  feat: make ollama host configurable in goose2 (#8912)
  polish sidebar navigation and project icons (#8896)
  fix: model picker stays usable during provider loading (#8900)
  feat: update provider row after saving credentials (#8914)
  feat: support google model inventory refresh (#8913)
  chore: Added goose 2 UI refactor review skill (#8903)
  blog: goose with peekaboo (#8884)
  blog: Built-in Local Inference blogpost. (#8808)
  perf: parallelize provider resolution and eagerly init SQLite pool (#8899)
  refactor: update goose2 credential management behind provider-scoped ACP/core API (#8887)
  fix: handle acp requests concurrently (#8781)
  build: set LLAMA_STATIC_CRT for Windows CUDA (#8901)
  perf: deduplicate _goose/providers/list RPC call at startup (#8873)
  chore: add a bit more instructions in the release pr (#8890)
  chore: disable spellcheck in model search (#8889)
  add skills to the chat composer (#8881)
  mergeable configs + cleanup (#8378)
  refactor: agent provider to use explicit type states (#8879)
  [goose2] MCP Apps: hydrate and replay app payloads in Goose2 (#8632)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants