feat(web): link mobile Kandev brand to workspace home#1755
Conversation
Quick chat was unreachable on touch devices: every trigger was desktop-only (keyboard shortcut, command palette, app sidebar) and the full-screen dialog had no touch dismissal. - add quick chat button to the mobile kanban/tasks header - add quick chat button to the tablet header (640-767px has no sidebar) - add chat button to the mobile session task-switcher sheet - add a mobile-only close control to the quick chat tab bar - cover the touch entry points with a mobile Playwright spec Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
📝 WalkthroughWalkthroughChangesMobile Quick Chat topbar
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
|
Claude finished @carlosflorencio's task in 2m 6s —— View job Review in progress
|
|
| Filename | Overview |
|---|---|
| apps/web/components/kanban/kanban-header-mobile.tsx | Adds MobileBrandLink component and wires it into PageTopbar's leading slot; removes the redundant Home title from leftActions for the root page. |
| apps/web/components/kanban/kanban-header-mobile.test.tsx | Updates PageTopbar mock to expose the leading slot, renames and rewrites the Home test, adds workspace-preserving href assertion and DOM-order test for Quick Chat before Search. |
| apps/web/e2e/tests/chat/mobile-quick-chat-entry.spec.ts | Adds an E2E scenario verifying the brand link navigates to the active workspace Home with the workspaceId param preserved and no redundant Home label in the header. |
| docs/specs/mobile-quick-chat-topbar/spec.md | New spec documenting the mobile Quick Chat topbar feature; currently marked status: building while the plan/task are already complete. |
| docs/plans/mobile-quick-chat-topbar/plan.md | New implementation plan marked status: complete, with a single task referencing the frontend changes. |
| docs/plans/mobile-quick-chat-topbar/task-01-mobile-topbar.md | Task file for the single implementation wave, marked status: done. |
| docs/specs/INDEX.md | Adds the new mobile-quick-chat-topbar spec entry with status: building. |
Sequence Diagram
%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
participant User as Mobile User
participant Header as KanbanHeaderMobile
participant Brand as MobileBrandLink
participant Nav as workspaceHomeHref
participant Router as App Router
Header->>Brand: render(workspaceId)
Brand->>Nav: "workspaceHomeHref({ id: workspaceId })"
Note over Nav: isOfficeWorkspace checks office_workflow_id<br/>(not present - always returns false)<br/>returns /?workspaceId=id
Nav-->>Brand: href string
Brand-->>Header: Link href rendered
User->>Brand: tap Kandev wordmark
Brand->>Router: navigate to href
Router-->>Header: re-render at workspace Home
Note over Header: isHome=true - leftActions=null<br/>No redundant Home label rendered
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
participant User as Mobile User
participant Header as KanbanHeaderMobile
participant Brand as MobileBrandLink
participant Nav as workspaceHomeHref
participant Router as App Router
Header->>Brand: render(workspaceId)
Brand->>Nav: "workspaceHomeHref({ id: workspaceId })"
Note over Nav: isOfficeWorkspace checks office_workflow_id<br/>(not present - always returns false)<br/>returns /?workspaceId=id
Nav-->>Brand: href string
Brand-->>Header: Link href rendered
User->>Brand: tap Kandev wordmark
Brand->>Router: navigate to href
Router-->>Header: re-render at workspace Home
Note over Header: isHome=true - leftActions=null<br/>No redundant Home label rendered
Reviews (2): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile
…chats-ysj # Conflicts: # apps/web/components/kanban/kanban-header-mobile.test.tsx # apps/web/components/kanban/kanban-header-mobile.tsx # apps/web/e2e/tests/chat/mobile-quick-chat-entry.spec.ts
|
Claude finished @carlosflorencio's task in 2m 27s —— View job FindingsSuggestion (recommended, doesn't block)
Summary
Verdict: Ready to merge — one tiny doc fix (spec status) is nice to have but doesn't block. The implementation itself is clean: |
| @@ -0,0 +1,48 @@ | |||
| --- | |||
| status: building | |||
There was a problem hiding this comment.
The spec has status: building but the plan (docs/plans/mobile-quick-chat-topbar/plan.md) says status: complete and task-01 says status: done. Update to status: complete before merge so the INDEX entry is consistent.
| status: building | |
| status: complete |

Mobile users can reach Quick Chat from PR #1751, but the root header still duplicates Home and
the brand is not navigational. This stacked follow-up makes Kandev a workspace-preserving Home
link while keeping Quick Chat directly before Search.
Validation
make fmtmake typecheckmake test(backend, web, and CLI suites)make test-scriptswith Rust 1.88make lintpnpm test -- components/kanban/kanban-header-mobile.test.tsxpnpm e2e:run --host --project mobile-chrome -- tests/chat/mobile-quick-chat-entry.spec.tsChecklist
apps/web/), I have added or updated Playwright e2e tests inapps/web/e2e/and verified them withmake test-e2e.docs/public/**and updated them or noted why no docs change is needed.