diff --git a/docs/design/sidebar-customization.md b/docs/design/sidebar-customization.md new file mode 100644 index 0000000..13c822e --- /dev/null +++ b/docs/design/sidebar-customization.md @@ -0,0 +1,181 @@ +# Sidebar Customization — design + +## Goal + +Let users group, collapse, and hide sidebar entries so the left rail matches how they actually work. Default behavior is unchanged for first-time users; preferences persist locally. + +``` +Sidebar (after change) +├── Workspace (collapsible section, default expanded) +│ All Sessions · Projects · Timeline · Activity · Running +│ Analytics · Starred · Leaderboard · Cloud Sync +├── Agents (collapsible, default expanded) +│ Claude · Codex · Qwen · Kiro · Cursor · Copilot Chat · Copilot CLI · OpenCode · Kilo +└── Tools (collapsible, default expanded) + ├── Install agents (nested collapsible, default collapsed) + │ Claude · Codex · Qwen · Kiro · OpenCode · Kilo · Copilot CLI + ├── Export / Import + ├── Changelog + └── Settings (gains new "Sidebar" sub-pane) +``` + +## Why + +Сейчас сайдбар — 30+ пунктов одним списком, в нём есть редко используемые (Leaderboard, Cloud Sync, Starred) и шумная «Install Agents» секция с 7 повторяющимися записями. У разных пользователей разные интересы (только Claude + Projects + Running у одного, Cursor + Activity + Analytics у другого). Группировка + видимость каждого пункта решают это без удаления функциональности. + +## Non-goals + +- Не меняем поведение самих вкладок (Activity bug — отдельный PR, см. CLAUDE.md TODO). +- Не добавляем drag-and-drop переупорядочивания (вне scope этого PR). +- Не трогаем серверные API, файлы сессий, формат `~/.codedash/settings.json`. +- Не добавляем синхронизацию настроек между устройствами — все только в `localStorage`. +- Не делаем «скрытый пункт остаётся доступен через URL hash» как UX-фичу — но `data-view` атрибуты остаются на месте, поэтому хеш-роутинг (`#leaderboard`) технически продолжит работать; в навигации просто не будет ссылки. + +## Data inventory + +Где читаются/пишутся sidebar items сейчас: + +| Источник | Файл | Роль | +|---|---|---| +| HTML | `src/frontend/index.html:11-141` | статичная разметка `
'; - container.innerHTML = html; - - // Load LLM config into the inputs - loadLLMSettings(); + return html; } // → moved to leaderboard.js @@ -3696,6 +4038,11 @@ function _onProjectsHashChange() { } (function init() { + // Sidebar customization — apply persisted config before any other init so the + // user never sees a flash of hidden items. + applySidebarConfig(); + _bindSidebarHeaders(); + // Load data loadSessions(); loadTerminals(); diff --git a/src/frontend/index.html b/src/frontend/index.html index ecf8162..5e91223 100644 --- a/src/frontend/index.html +++ b/src/frontend/index.html @@ -8,135 +8,205 @@ + +