Frontend sidebar — project & thread navigation #14

Open
opened 2026-04-16 11:31:21 +00:00 by claude-desktop · 0 comments
Collaborator

User story

As a user, I want a sidebar listing my projects with their threads in a hierarchical view, so that I can navigate between conversations, create new threads, and manage my workspace.

Acceptance criteria

SidebarModel (RELM4 component, components/sidebar.rs)

  • Displays a list of projects from the read model
  • Each project expands to show its threads
  • Thread rows show: title (or "Untitled"), provider icon (Claude/Codex), status indicator (idle/running/error)
  • Selecting a thread sends AppMsg::SelectThread(id) to the parent
  • Selecting a project sends AppMsg::SelectProject(id) to the parent
  • Active thread is visually highlighted

Actions

  • "New thread" button in the header bar dispatches CreateThread command (with a default provider/model from config)
  • Right-click context menu on a thread: "Delete thread" (dispatches DeleteThread)
  • "Add project" button or action to open a directory chooser (gtk::FileDialog) and dispatch CreateProject

State updates

  • Reacts to DomainEvent updates: new projects/threads appear, deleted ones disappear, status changes update indicators
  • Thread list auto-scrolls to newly created threads

Styling

  • Uses GtkListBox with AdwActionRow or custom rows
  • Follows libadwaita sidebar patterns (selection, hover, navigation)
  • Settings button at the bottom of the sidebar

Tests

  • Test: sidebar renders correct number of projects/threads from read model
  • Test: selecting a thread emits the correct message

Out of scope

  • Drag-and-drop reordering
  • Thread search/filter (post-v1)

References

  • Spec §10.2 (Layout — sidebar section)

Dependencies

  • Blocked by: #13 (AppModel, AppMsg)
  • Blocks: none (v0.1 leaf)
  • Branch off: issue-13-app-shell
  • Full graph: #21
## User story As a **user**, I want a sidebar listing my projects with their threads in a hierarchical view, so that I can navigate between conversations, create new threads, and manage my workspace. ## Acceptance criteria ### SidebarModel (RELM4 component, `components/sidebar.rs`) - [ ] Displays a list of projects from the read model - [ ] Each project expands to show its threads - [ ] Thread rows show: title (or "Untitled"), provider icon (Claude/Codex), status indicator (idle/running/error) - [ ] Selecting a thread sends `AppMsg::SelectThread(id)` to the parent - [ ] Selecting a project sends `AppMsg::SelectProject(id)` to the parent - [ ] Active thread is visually highlighted ### Actions - [ ] "New thread" button in the header bar dispatches `CreateThread` command (with a default provider/model from config) - [ ] Right-click context menu on a thread: "Delete thread" (dispatches `DeleteThread`) - [ ] "Add project" button or action to open a directory chooser (`gtk::FileDialog`) and dispatch `CreateProject` ### State updates - [ ] Reacts to `DomainEvent` updates: new projects/threads appear, deleted ones disappear, status changes update indicators - [ ] Thread list auto-scrolls to newly created threads ### Styling - [ ] Uses `GtkListBox` with `AdwActionRow` or custom rows - [ ] Follows libadwaita sidebar patterns (selection, hover, navigation) - [ ] Settings button at the bottom of the sidebar ### Tests - [ ] Test: sidebar renders correct number of projects/threads from read model - [ ] Test: selecting a thread emits the correct message ## Out of scope - Drag-and-drop reordering - Thread search/filter (post-v1) ## References - Spec §10.2 (Layout — sidebar section) ## Dependencies - **Blocked by:** #13 (AppModel, AppMsg) - **Blocks:** none (v0.1 leaf) - **Branch off:** `issue-13-app-shell` - **Full graph:** #21
claude-desktop added this to the v0.1.0 milestone 2026-04-16 11:31:21 +00:00
Sign in to join this conversation.
No description provided.