Skip to content

Design Exploration: Replace the site dropdown with a permanent site header - #4400

Draft
shaunandrews wants to merge 28 commits into
add-overview-preview-sitesfrom
stu-2162-site-header-actions
Draft

Design Exploration: Replace the site dropdown with a permanent site header#4400
shaunandrews wants to merge 28 commits into
add-overview-preview-sitesfrom
stu-2162-site-header-actions

Conversation

@shaunandrews

@shaunandrews shaunandrews commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Related issues

How AI was used in this PR

Written with Claude Code and Codex through iterative design passes in the running app. I directed the interaction model and visual hierarchy, reviewed each pass, and had the implementation rebuilt on current trunk before updating this exploration.

Proposed Changes

This remains a visual design exploration rather than a merge-ready proposal.

This is the third PR in the site-management UI stack:

  1. Agentic UI: Add Connections to site overview #4474 — Connections on the overview
  2. Agentic UI: Add preview sites to site overview #4483 — Preview sites on the overview
  3. Design Exploration: Replace the site dropdown with a permanent site header #4400 — Persistent site header with Share and Sync dialogs (this PR)
  4. Agentic UI: Integrate the site overview, sharing, and sync progress #4601 — Integrated overview polish, reusable sharing controls, and operation progress

Site actions currently hide behind a dropdown whose trigger reads primarily as status. This exploration replaces that entry point with a permanent site header: site identity and state on one side, with the most relevant actions always visible on the other.

The visible hierarchy is:

  • Open in as a quiet split action.
  • Share… for temporary preview links.
  • Publish… or Sync… as the primary site action.

It also introduces dedicated Share, Publish/connect, and selective Sync dialogs. Sync supports multiple connected sites, Push/Pull direction, database selection, and a file tree. The responsive header truncates identity first, then progressively reduces secondary actions while preserving the primary action for as long as possible.

The final stack layer (#4601) reuses the exact Preview sites list inside Share, opens this Sync dialog from each connection row, and adds operation progress to both the overview and persistent notices.

Current UI

Persistent site header at native Retina resolution

Share · light Share · dark
Share dialog in light mode Share dialog in dark mode
Selective Sync · light Selective Sync · dark
Selective Sync dialog in light mode Selective Sync dialog in dark mode

Testing Instructions

  1. Launch the agentic UI and open a local site chat or Overview.
  2. Confirm the permanent header appears consistently on both surfaces.
  3. Exercise each Open in destination and confirm the remembered default updates.
  4. Exercise Share, Publish/connect, and Sync with connected and disconnected sites.
  5. In Sync, switch between multiple targets and Push/Pull, then change database/file selections.
  6. Resize through wide, compact, icon-only, overflow, and minimal states.
  7. Check headers, menus, tooltips, and dialogs in light, dark, and RTL layouts.

Verification used while preparing this stack:

  • Built this exact PR head and captured all three screenshots above.
  • Verified the final integrated dialogs in light, dark, and Hebrew RTL.
  • The site-toolbar tests and full typecheck pass on the integrated stack head.

Pre-merge Checklist

  • Have you checked for TypeScript, React or other console errors?

shaunandrews and others added 19 commits August 4, 2026 13:40
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ons as site tabs

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ons and results in toasts

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…step

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…t renderer

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…used webview

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…aks panel

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@shaunandrews
shaunandrews force-pushed the stu-2162-site-header-actions branch from 0dfb256 to e200d5a Compare August 4, 2026 17:55
@shaunandrews shaunandrews changed the title Replace the site dropdown with a permanent site header Design Exploration: Replace the site dropdown with a permanent site header Aug 6, 2026
…-actions

# Conflicts:
#	apps/cli/commands/pull.ts
#	apps/local/src/index.ts
#	apps/studio/src/ipc-utils.ts
#	apps/studio/src/main-window.ts
#	apps/studio/src/menu.ts
#	apps/studio/src/modules/sync/lib/ipc-handlers.ts
#	apps/ui/src/components/progressive-blur/style.module.css
#	apps/ui/src/components/sidebar-layout/index.tsx
#	apps/ui/src/components/sidebar-layout/style.module.css
#	apps/ui/src/components/site-dropdown/index.tsx
#	apps/ui/src/components/site-dropdown/main-view.module.css
#	apps/ui/src/components/site-dropdown/main-view.test.tsx
#	apps/ui/src/components/site-dropdown/main-view.tsx
#	apps/ui/src/components/site-dropdown/trigger-secondary.ts
#	apps/ui/src/components/site-dropdown/utils.ts
#	apps/ui/src/components/site-list/index.tsx
#	apps/ui/src/components/site-overview-view/index.test.tsx
#	apps/ui/src/components/site-overview-view/index.tsx
#	apps/ui/src/components/site-toolbar/index.test.tsx
#	apps/ui/src/components/site-toolbar/utils.test.ts
#	apps/ui/src/data/core/connectors/ipc/index.ts
#	apps/ui/src/data/core/connectors/local/index.ts
#	apps/ui/src/data/core/index.ts
#	apps/ui/src/data/core/types.ts
#	apps/ui/src/data/queries/use-sync-site.ts
#	apps/ui/src/data/sync-activity.ts
#	apps/ui/src/ui-classic/components/session-view/index.tsx
#	apps/ui/src/ui-classic/router/route-onboarding-connect/index.tsx
#	apps/ui/src/ui-classic/router/route-onboarding-connect/style.module.css
#	apps/ui/src/ui-classic/router/route-site-overview/index.tsx
#	packages/common/sites/sync.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant