Skip to content

fix(ux): single search field, clearer disabled states, brand/radius consistency, affordance + visual polish - #154

Merged
holkexyz merged 1 commit into
stagingfrom
fix/ux-visual-polish
Jun 11, 2026
Merged

fix(ux): single search field, clearer disabled states, brand/radius consistency, affordance + visual polish#154
holkexyz merged 1 commit into
stagingfrom
fix/ux-visual-polish

Conversation

@hb-agent

Copy link
Copy Markdown
Collaborator

What & why

P2 UX + visual-polish long tail. Each change is minimal and clearly-correct; ambiguous / other-PR-owned items are deliberately skipped (see below).

1. Duplicate "Search Certified" inputs (tablet/desktop)

/explore rendered two "Search Certified" fields at every width ≥800px: the desktop top-bar's global GlobalSearch, plus the explore page's own in-page search (which doubles as the cross-kind filter). The top-bar copy is now suppressed on /explore so the page owns the single contextual search field.

2. Disabled buttons read ambiguously

The shared <Button> dimmed every disabled state to opacity-50, which left filled variants (primary / destructive) looking half-active. Disabled filled buttons now drop to a flat sunken fill + muted text + subtle border (tokens only) — unmistakably inert. Outline/text variants (secondary / ghost) keep the lighter opacity dim, and the loading state keeps opacity so the spinner stays legible. Enabled appearance is unchanged. This covers Publish activity, Publish project, and Sync from Bluesky, which all use the shared <Button>.

3. Marketing nav redundancy

Signed-out /welcome showed the full desktop top bar (global search + Explore/Apps/Help icon row + a top-right Sign in) on top of the landing's own hero Sign in with Certified CTA. On the self-contained marketing landing that bar is redundant, so it now drops out for signed-out viewers. Signed-in viewers keep it to navigate out. (The mobile <Navbar> already renders /welcome as a transparent overlay when signed out.)

4. Empty edit-profile banner

The empty banner box was a featureless gradient rectangle. It now shows a neutral guidance hint ("Add a banner image — shown across the top of your profile (3:1)"). Decorative (aria-hidden) because the "Change banner" button already carries the accessible affordance.

Deliberately skipped (with reason)

  • App-card affordance + icon-wrap radius (/apps): already spec-compliant on staging — the tile has a hover lift/shadow/border + cursor:pointer (it's an <a>), and .apps-store__icon-wrap already uses var(--radius) (2px). The only remaining icon-corner mismatch is baked into the source partner-logo images (e.g. Ma Earth's rounded JPEG), which CSS can't normalize.
  • project_new title placeholder weight and the disabled "Save changes" pill: both live in cert-detail.css / profile-edit.css, owned by other PRs (PR3 / PR2). Not touched.
  • /about tablet line-length: the legal-page reading-width cap (880px) is a documented intentional choice in layout.css (PR4-adjacent); tightening it is ambiguous, so skipped.
  • /workspace route: left in place (out of scope to delete).

Verification gate (all green)

  • npm run lint → 0 errors, 66 warnings (identical to staging baseline — no new warnings)
  • npx tsc --noEmit → 0 errors
  • npm run typecheck:test → 0 errors
  • npm test → 605 passed (83 files)
  • Playwright screenshots at mobile/tablet/desktop confirmed: single search on /explore, clear disabled-primary in the dev gallery, no redundant top bar on signed-out /welcome.

Constraints honored

Radius var(--radius)/999px/50% only (no off-spec radii touched or introduced); breakpoints 800/1100/1300; tokens for colors; reused the shared <Button> primitive for the disabled fix.

🤖 Generated with Claude Code

…redundancy, empty-banner hint

UX + visual polish (P2 long tail):

- Explore: drop the top-bar global "Search Certified" field on /explore.
  The page already renders its own contextual "Search Certified" input
  (which doubles as the cross-kind filter), so both showed at every
  width >=800px — a duplicate. Explore now owns the single search field.

- Button: make the disabled state of filled variants (primary /
  destructive) unambiguous. Half-opacity left the brand fill looking
  "active"; disabled filled buttons now drop to a flat sunken fill +
  muted text + subtle border that clearly reads as inert. Outline / text
  variants (secondary / ghost) keep the lighter opacity dim, and the
  loading state keeps opacity so the spinner stays legible. Enabled
  appearance is unchanged. Covers Publish activity / Publish project /
  Sync from Bluesky, which all use the shared <Button>.

- Marketing nav: signed-out /welcome now drops the desktop top bar
  entirely. The landing is self-contained (hero "Sign in with Certified"
  CTA + footer), so the top bar's search + Explore/Apps/Help icon row +
  a second "Sign in" were redundant. Signed-in viewers keep the bar to
  navigate out.

- Edit-profile: the empty banner box gets a neutral guidance hint
  ("Add a banner image ... 3:1") instead of a featureless gradient
  rectangle. Decorative (aria-hidden) since the "Change banner" button
  already carries the accessible affordance.

Deliberately out of scope (other PRs own the file): the project_new
title placeholder weight and the disabled "Save changes" pill both live
in cert-detail.css / profile-edit.css. Apps-grid card hover affordance
and the icon-wrap radius are already spec-compliant on staging (var(--radius),
hover lift/shadow); the remaining icon-corner mismatch is baked into the
source logo images, not CSS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
certified-app Ready Ready Preview, Comment Jun 11, 2026 11:17am

Request Review

@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 71ca4f40-1c87-4e16-8b27-8ec58e4eba67

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/ux-visual-polish

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 and usage tips.

@holkexyz
holkexyz marked this pull request as ready for review June 11, 2026 11:46
@holkexyz
holkexyz merged commit cc8eeaf into staging Jun 11, 2026
4 checks passed
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.

2 participants