Skip to content

feat(web): link mobile Kandev brand to workspace home#1755

Merged
carlosflorencio merged 3 commits into
mainfrom
feature/mobile-quick-chats-ysj
Jul 18, 2026
Merged

feat(web): link mobile Kandev brand to workspace home#1755
carlosflorencio merged 3 commits into
mainfrom
feature/mobile-quick-chats-ysj

Conversation

@carlosflorencio

@carlosflorencio carlosflorencio commented Jul 17, 2026

Copy link
Copy Markdown
Member

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 fmt
  • make typecheck
  • make test (backend, web, and CLI suites)
  • make test-scripts with Rust 1.88
  • make lint
  • pnpm test -- components/kanban/kanban-header-mobile.test.tsx
  • pnpm e2e:run --host --project mobile-chrome -- tests/chat/mobile-quick-chat-entry.spec.ts

Checklist

  • I have performed a self-review of my code.
  • I have manually tested my changes and they work as expected.
  • My changes have tests that cover the new functionality and edge cases.
  • If my change touches UI files (apps/web/), I have added or updated Playwright e2e tests in apps/web/e2e/ and verified them with make test-e2e.
  • I checked whether this affects public docs in docs/public/** and updated them or noted why no docs change is needed.

Review in cubic

Kandev Agent and others added 2 commits July 17, 2026 11:40
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>
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Changes

Mobile Quick Chat topbar

Layer / File(s) Summary
Topbar behavior contracts
docs/specs/mobile-quick-chat-topbar/*, docs/plans/mobile-quick-chat-topbar/*
Documents workspace-aware home navigation, Quick Chat ordering, title visibility, scope, acceptance criteria, and verification steps.
Workspace-aware mobile header
apps/web/components/kanban/kanban-header-mobile.tsx
Adds the Kandev leading link, preserves workspaceId in its home URL, removes the back label, and updates non-Home title rendering.
Header behavior validation
apps/web/components/kanban/kanban-header-mobile.test.tsx, apps/web/e2e/tests/chat/mobile-quick-chat-entry.spec.ts
Tests home-link targets, omitted Home labeling, Quick Chat/search ordering, workspace navigation, and overflow behavior.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • kdlbs/kandev#1157: Introduced the mobile search toggle behavior referenced by the new ordering test.
  • kdlbs/kandev#1751: Provides the existing mobile Quick Chat behavior extended by this topbar update.

Suggested reviewers: jcfs

Poem

I’m a bunny with a topbar tune,
Quick Chat hops before Search’s moon.
Kandev leads the workspace way,
Home stays bright without display.
Tests guard each little track—
No overflow sneaks back!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the main change: linking the mobile Kandev brand to the workspace home.
Description check ✅ Passed The description includes the required summary, validation steps, and checklist, and it is specific enough for the change.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/mobile-quick-chats-ysj

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.

@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @carlosflorencio's task in 2m 6s —— View job


Review in progress

  • Gather context and load tools
  • Read SKILL.md for review process
  • Read changed files and diff
  • Post review findings

@greptile-apps

greptile-apps Bot commented Jul 17, 2026

Copy link
Copy Markdown

Greptile Summary

This PR makes the Kandev wordmark in the mobile header a workspace-preserving home link, removes the now-redundant "Home" label from the root page's leftActions, and keeps the Quick Chat button immediately before Search. It is a focused follow-up to PR #1751.

  • MobileBrandLink is extracted as a small component that calls workspaceHomeHref({ id: workspaceId }) and is passed to PageTopbar's leading slot; backLabel is permanently cleared.
  • leftActions now returns null on the Home page (and keeps the title/workspace-label for all other pages), eliminating the inner {!isHome && ...} conditional.
  • Component tests are updated to assert the link's href, empty leftActions, and Quick Chat/Search DOM order; a new E2E test drives the full navigation flow on a mobile viewport.

Confidence Score: 5/5

Safe to merge — the change is narrowly scoped to the mobile header's leading slot and leftActions condition, with component tests and an E2E test covering the key paths.

The component change is minimal: one new presentational sub-component, one condition tweak in leftActions, and a cleared backLabel. The existing test suite was extended to cover the new link href, DOM order, and absence of the Home label. No backend, store, or shared-component logic is touched.

No files require special attention.

Important Files Changed

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
Loading
%%{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
Loading

Reviews (2): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile

Comment thread apps/web/components/kanban/kanban-header-mobile.tsx
Base automatically changed from feature/quick-chat-on-mobile-wnn to main July 17, 2026 12:05
…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

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @carlosflorencio's task in 2m 27s —— View job


Findings

Suggestion (recommended, doesn't block)

  1. Spec status out of sync with plan/taskdocs/specs/mobile-quick-chat-topbar/spec.md:2

    • Issue: the spec carries status: building while the plan says status: complete and the single task is status: done.
    • Fix: update the spec frontmatter to status: complete (inline suggestion posted).
  2. isHome detection couples to a magic stringapps/web/components/kanban/kanban-header-mobile.tsx:55

    • Issue: const isHome = "Home" silently breaks if the title text ever changes (rename, i18n). The currentPage prop already exists to signal page context but currently only covers "kanban" | "tasks".
    • Fix: extend currentPage to include "home" or add an explicit isHome boolean prop — but this is pre-existing design, not introduced by this PR, so it's a low-priority follow-up.
  3. Greptile's office-workspace routing concern (resolved by author): confirmed by reading workspaceHomeHrefisOfficeWorkspace checks office_workflow_id, and since KanbanHeaderMobile only receives a plain workspaceId string (no office metadata), the guard always correctly routes to /?workspaceId=.... The author's reply is accurate.

Summary

Severity Count
Blocker 0
Suggestion 2

Verdict: Ready to merge — one tiny doc fix (spec status) is nice to have but doesn't block.

The implementation itself is clean: MobileBrandLink is a small focused component, the backLabel="" + leading slot swap is an intentional suppression of the old static text, the leftActions condition simplification removes a nested guard correctly, and the test coverage (unit + E2E) is solid.

@@ -0,0 +1,48 @@
---
status: building

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.

Suggested change
status: building
status: complete

@carlosflorencio
carlosflorencio merged commit 547f312 into main Jul 18, 2026
61 checks passed
@carlosflorencio
carlosflorencio deleted the feature/mobile-quick-chats-ysj branch July 18, 2026 15:17
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