Skip to content

feat(local): redesign desktop experience and model management - #1757

Merged
AnishSarkar22 merged 19 commits into
MODSetter:devfrom
AnishSarkar22:feat/local-frontend
Sep 9, 2026
Merged

feat(local): redesign desktop experience and model management#1757
AnishSarkar22 merged 19 commits into
MODSetter:devfrom
AnishSarkar22:feat/local-frontend

Conversation

@AnishSarkar22

@AnishSarkar22 AnishSarkar22 commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator

Description

  • Add settings for appearance and model management.
  • Add searchable model switching directly from the chat composer.
  • Improve hardware-based model recommendations, fit labels, and collision handling.
  • Add safer document deletion and block deletion during processing.
  • Add source uploads from the chat composer.
  • Improve startup, dashboard, thread list, source panel, and catalog layouts.
  • Add the new SurfSense logo, animated startup loader, and refined theme colors.
  • Add smooth, edge-aware scroll shadows and other interaction polish.
  • Expand frontend and backend test coverage.
  • Update model recommendation and installation documentation.

Motivation and Context

FIX #

Screenshots

API Changes

  • This PR includes API changes

Change Type

  • Bug fix
  • New feature
  • Performance improvement
  • Refactoring
  • Documentation
  • Dependency/Build system
  • Breaking change
  • Other (specify):

Testing Performed

  • Tested locally
  • Manual/QA verification

Checklist

  • Follows project coding standards and conventions
  • Documentation updated as needed
  • Dependencies updated as needed
  • No lint/build errors or new warnings
  • All relevant tests are passing

High-level PR Summary

This PR implements a comprehensive local frontend redesign for SurfSense, featuring a new settings dialog with appearance and model management sections, improved model selection UX with an in-composer picker, enhanced catalog presentation with hardware fit indicators, collision resolution for duplicate runtime targets, document deletion safety during processing, refined UI spacing and visual hierarchy throughout the application, and new theme support infrastructure. The changes span backend catalog logic improvements, frontend architectural restructuring, and extensive styling refinements to create a more polished and cohesive user experience.

⏱️ Estimated Review Time: 1-3 hours

💡 Review Order Suggestion
Order File Path
1 plans/community-local/api/05-model-recommendations.md
2 plans/community-local/frontend/05-install-ux.md
3 surfsense_local/backend/modules/llm/recommendations/curated_models.py
4 surfsense_local/backend/modules/llm/recommendations/llmfit.py
5 surfsense_local/backend/modules/llm/recommendations/catalog.py
6 surfsense_local/backend/tests/unit/llm/recommendations/test_curated_models.py
7 surfsense_local/backend/tests/unit/llm/recommendations/test_llmfit.py
8 surfsense_local/backend/tests/unit/llm/recommendations/test_catalog.py
9 surfsense_local/backend/tests/integration/llm/test_routes.py
10 surfsense_local/backend/modules/documents/router.py
11 surfsense_local/backend/tests/integration/documents/test_routes.py
12 surfsense_local/frontend/src/index.css
13 .cursor/skills/color-system/PALETTE.css
14 surfsense_local/frontend/src/surfsense-logo.svg
15 surfsense_local/frontend/src/components/ui/icons.tsx
16 surfsense_local/frontend/src/app/app-bootstrap.test.tsx
17 surfsense_local/frontend/src/app/app-bootstrap.tsx
18 surfsense_local/frontend/src/features/model-selection/api.ts
19 surfsense_local/frontend/src/features/model-selection/use-model-selection.ts
20 surfsense_local/frontend/src/features/model-selection/provider-tab.tsx
21 surfsense_local/frontend/src/features/model-selection/model-selection-page.tsx
22 surfsense_local/frontend/src/features/model-selection/model-selection.test.tsx
23 surfsense_local/frontend/src/features/model-catalog/model-card.tsx
24 surfsense_local/frontend/src/features/model-catalog/model-family-group.tsx
25 surfsense_local/frontend/src/features/model-catalog/model-catalog-page.tsx
26 surfsense_local/frontend/src/features/model-catalog/model-catalog.test.tsx
27 surfsense_local/frontend/src/features/chat/model-picker.test.tsx
28 surfsense_local/frontend/src/features/chat/model-picker.tsx
29 surfsense_local/frontend/src/features/chat/chat-composer.tsx
30 surfsense_local/frontend/src/features/chat/thread-list.test.tsx
31 surfsense_local/frontend/src/features/chat/thread-list.tsx
32 surfsense_local/frontend/src/features/chat/thread-panel.tsx
33 surfsense_local/frontend/src/features/settings/appearance-toggle.tsx
34 surfsense_local/frontend/src/features/settings/models-settings.tsx
35 surfsense_local/frontend/src/features/settings/settings-section.tsx
36 surfsense_local/frontend/src/features/settings/settings-dialog.test.tsx
37 surfsense_local/frontend/src/features/settings/settings-dialog.tsx
38 surfsense_local/frontend/src/features/sources/use-sources.ts
39 surfsense_local/frontend/src/features/sources/sources-panel.tsx
40 surfsense_local/frontend/src/features/sources/source-upload.test.tsx
41 surfsense_local/frontend/src/features/workspaces/workspace-rail.tsx
42 surfsense_local/frontend/src/features/dashboard/dashboard-page.tsx
43 surfsense_local/frontend/src/features/dashboard/dashboard-page.test.tsx

Need help? Join our Discord

…heck

- Refactored the document deletion logic to prevent deletion of documents that are currently processing.
- Introduced a new test to verify that a document in processing cannot be deleted, returning a 409 conflict status.
- Updated frontend components to handle document deletion actions, including disabling the delete option for processing documents.
- Enhanced the user experience by providing feedback on deletion actions in the UI.
…labels and updated descriptions

- Added a Badge component to display model fit labels in the ModelCard, improving user feedback on compatibility.
- Updated ModelCatalogPage to clarify model compatibility with a new informational message.
- Refined section titles and descriptions for better clarity and user experience.
…layout

- Introduced a new SVG logo for SurfSense to enhance branding.
- Adjusted padding and layout in ModelCard, ModelCatalogPage, and ModelFamilyGroup for a more consistent design.
- Updated ModelSelectionPage to incorporate the new logo and refine component spacing for better user experience.
- Enhanced test coverage for model selection to ensure UI elements remain accessible and properly positioned.
- Added a background style for the model selection page in macOS Electron.
- Changed background color in the chat thread list and sources panel for improved visual consistency.
- Enhanced the layout of the model selection page to include a data attribute for better targeting.
… and styling

- Added CSS styles for fading effects on sidebar row titles to improve visual presentation.
- Updated ThreadList component to ensure long chat titles fit within the compact sidebar layout.
- Introduced tests for ThreadList to verify title overflow handling and styling consistency.
- Refactored source upload tests to check for updated class names and styles in the UI components.
- Introduced a timeout mechanism for document highlighting in the WorkspaceDashboard component, allowing for automatic clearing after 3 seconds.
- Updated tests for the dashboard to verify the correct behavior of document highlighting and scrolling.
- Refactored related components to ensure consistent handling of highlighted documents and improved user experience.
- Added class modifications to the AlertDialogContent in the model catalog for better styling.
- Removed the workspaceName prop from the ThreadList component to simplify its interface.
- Updated the ThreadList header to display a static title "SurfSense" with improved styling.
- Adjusted related tests to reflect the changes in the ThreadList component and ensure proper rendering of the new title.
…ThreadPanel

- Introduced an AddSourcesButton component to allow users to upload multiple source files.
- Integrated the new button into the ChatComposer and ThreadPanel components, enabling file uploads in both placements.
- Updated related tests to ensure the presence and functionality of the AddSourcesButton in different layouts.
…odel validation

- Updated the catalog assembly process to enforce unique catalog rows for exact runtime targets, improving clarity in model recommendations.
- Introduced logging for ambiguous model collisions, providing better insights during model resolution.
- Enhanced the CuratedModelsManifest to reject duplicate runtime targets, ensuring data integrity.
- Increased the maximum output bytes for llmfit scans to accommodate larger datasets.
- Added tests to verify the correct handling of model collisions and curated model ownership.
…dd related tests

- Introduced a SettingsDialog component to manage appearance preferences (light, dark, system).
- Integrated theme selection functionality with icons for better user experience.
- Added tests for the SettingsDialog to ensure correct theme persistence and UI behavior.
- Updated WorkspaceRail to include a button for opening the settings dialog.
- Enhanced icon imports in the icons.tsx file to support new features.
- Added a new color variable for app shell background.
- Updated sidebar color to enhance visual consistency across components.
- Adjusted related CSS variables to ensure proper theming integration.
- Introduced a new AppearanceToggle component to allow users to switch between light, dark, and system themes.
- Updated SettingsDialog to integrate the AppearanceToggle, enhancing user experience for theme preferences.
- Modified related tests to ensure correct functionality of the theme selection feature.
…bility

- Updated the padding and font size of the "Settings" label in the SettingsDialog component to enhance visual clarity and consistency with the overall design.
…improvements

- Introduced a new ModelsSettings component to manage model selection within the settings dialog.
- Updated the DashboardPage to integrate model selection and settings management, allowing users to open settings directly from the workspace rail.
- Enhanced the SettingsDialog to support dynamic section rendering for general and model settings.
- Added a ProviderTab component to streamline model selection for different providers.
- Improved test coverage for the settings dialog and model management features to ensure functionality and user experience.
…in model picker and settings section

- Implemented scroll detection in the ModelPicker and SettingsSection components to provide visual feedback with shadow effects.
- Updated tests for both components to verify the correct behavior of scroll interactions and shadow visibility.
- Refactored the ModelPicker to utilize a ref for scroll management, improving performance and maintainability.
@vercel

vercel Bot commented Sep 9, 2026

Copy link
Copy Markdown

@AnishSarkar22 is attempting to deploy a commit to the Rohan Verma's projects Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 9d3b7310-0afa-402a-ab6e-115722b635fc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AnishSarkar22 AnishSarkar22 changed the title Feat/local frontend feat(local): redesign desktop experience and model management Sep 9, 2026
@AnishSarkar22
AnishSarkar22 merged commit ca08163 into MODSetter:dev Sep 9, 2026
4 of 8 checks passed
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.

1 participant