Skip to content

feat(desktop): add sidebar timeline setting#5366

Open
ComputelessComputer wants to merge 21 commits into
mainfrom
fix/sidebar-timeline-setting
Open

feat(desktop): add sidebar timeline setting#5366
ComputelessComputer wants to merge 21 commits into
mainfrom
fix/sidebar-timeline-setting

Conversation

@ComputelessComputer
Copy link
Copy Markdown
Collaborator

@ComputelessComputer ComputelessComputer commented May 29, 2026

Add a persisted app setting that lets users show the timeline in the left sidebar instead of the top timeline.


This is part 1 of 3 in a stack made with GitButler:


Note

Medium Risk
Large desktop shell and chat UX refactor (layout modes, chat state machine, window drag) touches many surfaces; regressions in navigation, escape shortcuts, or chat open/close are likely though not security-critical.

Overview
Adds a persisted Show timeline in sidebar setting (sidebar_timeline_enabled, default off) and rewires the main shell when it is on: the meeting timeline lives in the left sidebar instead of the top bar, with matching main surface chrome (left vs top vs default), Tauri titlebar drag regions, sidebar back/forward controls, and optional window dragging from the top of the main content area. Session headers gain a Stop listening control in this mode, and General settings are split into App vs Meetings sections with updated copy/i18n.

Chat no longer uses a resizable right-hand panel or native window width expansion; it opens as a floating dark overlay (FloatingOpen / FloatingClosed) with resize handles, expand/collapse, motion, and updated empty-state, message, input, and toolbar styling. Opening chat from the CTA uses OPEN instead of OPEN_RIGHT_PANEL. New chats get an immediate truncated fallback title and optional AI-generated titles via a dedicated title model.

Shared CustomSidebarHeader (home, optional history) replaces ad-hoc headers on calendar, contacts, settings, templates, and contacts list chrome. The left timeline UI picks up scroll fades, Now chips, and layout tweaks for the inset chrome; calendar/contact headers add drag-region attributes for Tauri.

Reviewed by Cursor Bugbot for commit 4a81d99. Bugbot is set up for automated code reviews on this repo. Configure here.

@netlify
Copy link
Copy Markdown

netlify Bot commented May 29, 2026

Deploy Preview for old-char canceled.

Name Link
🔨 Latest commit 4a81d99
🔍 Latest deploy log https://app.netlify.com/projects/old-char/deploys/6a19cccbedff760008d0d09b

@ComputelessComputer ComputelessComputer force-pushed the fix/sidebar-timeline-setting branch from e88dbfc to 243f5cb Compare May 29, 2026 13:32
Comment thread apps/desktop/src/store/zustand/tabs/chat-mode.test.ts
@ComputelessComputer ComputelessComputer force-pushed the fix/sidebar-timeline-setting branch from 243f5cb to 6f9f4a7 Compare May 29, 2026 15:34
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6f9f4a7. Configure here.

});

it("hides while the chat modal is open", () => {
mocks.chatMode = "ModalOpen";
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Test mocks use nonexistent ModalOpen chat mode value

Medium Severity

Multiple test files mock chat.mode as "ModalOpen", but ChatMode is defined as "FloatingOpen" | "FloatingClosed". The production code checks chat.mode === "FloatingOpen", so mocking "ModalOpen" simulates a closed chat rather than an open one. This causes tests like "hides while the chat modal is open" in chat-cta.test.tsx and "closes the chat modal before going home on escape" in useTabsShortcuts.test.tsx to either fail or silently pass while testing the wrong scenario.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 6f9f4a7. Configure here.

Comment thread apps/desktop/src/main/body.tsx
@ComputelessComputer ComputelessComputer force-pushed the fix/sidebar-timeline-setting branch 3 times, most recently from 33fd9e5 to bace6ce Compare May 29, 2026 17:22
Add a persisted app setting that lets users show the timeline in the left sidebar instead of the top timeline.
Show calendar and history controls in the top row for sidebar timeline mode and restore the macOS traffic-light offset.
Remove the right-side chat panel path and open chat in an in-window modal from the floating CTA and keyboard shortcut.
Show Settings, Calendar, and Contacts titles in the sidebar chrome with a back control that matches Escape behavior.
Only fade sidebar timeline content when it can scroll past the corresponding edge.
Summarize the first user request into a chat group title while keeping an immediate fallback title.
Use the floating CTA dark surface across the in-window chat modal and its toolbar, messages, and empty states.
Replace the floating chat close icon with an expand/collapse control, make the collapsed modal resizable, and add title-area padding.
Use softer scale, blur, and shorter travel for the floating chat modal entrance and exit.
Make the top 48px of left-edge main surfaces draggable and cover the behavior in main shell tests.
Remove the titlebar calendar icon, restore the upward-scroll calendar chip, and start the sidebar timeline near today.
Add the left-edge back navigation control to calendar mode and cover it in main shell tests.
Use the main Escape shortcut action for the calendar left chrome back button.
Show the Escape-backed left chrome button on settings and contacts sidebars.
Show the Escape-backed left chrome button on settings and contacts sidebars.
Use the shared left-surface chrome condition for the back button overlay.
Show a Stop listening button in the session header when sidebar timeline mode hides the top timeline.
Keep footer accessory borders intact and only square the bottom-left corner of the main surface when bottom content attaches.
Set the session header to 48px tall and increase the title field text size.
Use the left-surface sidebar and main chrome treatment for templates.
@ComputelessComputer ComputelessComputer force-pushed the fix/sidebar-timeline-setting branch from bace6ce to 4a81d99 Compare May 29, 2026 17:28
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