Skip to content

feat(web): add project sidebar accents - #7972

Open
msegec wants to merge 2 commits into
pingdotgg:mainfrom
msegec:feat/project-sidebar-accents
Open

feat(web): add project sidebar accents#7972
msegec wants to merge 2 commits into
pingdotgg:mainfrom
msegec:feat/project-sidebar-accents

Conversation

@msegec

@msegec msegec commented Aug 23, 2026

Copy link
Copy Markdown

What changed

Projects can define a checked-in sidebar accent in t3.json.

  • Simple mode accepts one six-digit hex color and generates restrained idle, hover, and selected tints.
  • Advanced mode accepts exact idle, hover, and selected colors.
  • The tint covers the full thread row and remains visible while idle. Hover and selection strengthen it without adding a dot, strip, animation, or transition.
  • The existing project favicon response carries the accent, so sidebar rows do not make another request.

This applies to the web sidebar and desktop wrapper. The separate mobile thread list is unchanged.

Why

Project icons are easy to miss when the sidebar contains threads from several repositories. A persistent, low-contrast tint makes project groups faster to identify while keeping the existing row layout and interaction states.

UI changes

The T3 Code repository uses #1688f0 in simple mode for the after view.

Before After
Sidebar thread rows before project accent colors T3 Code thread rows with persistent blue project accents

Verification

  • 60 focused contract, shared, server, asset, and web tests pass.
  • Contracts, shared, server, and web typechecks pass.
  • Targeted lint and git diff --check pass.
  • Checked idle and selected states in an isolated real-app preview using copied project data.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before and after screenshots
  • No animation or motion was added, so a video is not applicable

Note

Medium Risk
Extends the shared t3.json contract and asset URL payload, and changes sidebar row styling. Invalid or missing accents fail closed (null); not auth/security-critical.

Overview
Projects can now set a checked-in sidebar accent in t3.json. A single six-digit hex generates idle/hover/selected tints; an idle/hover/selected object uses exact colors.

The accent rides on the existing project-favicon asset response (projectAccent on AssetCreateUrlResult) so thread rows do not fetch extra data. Sidebar rows apply CSS variables and data-project-accent state, reusing one favicon asset fetch via ProjectFaviconFromAsset.

Docs and this repo’s own t3.json (#1688f0) are updated. Mobile thread list is unchanged.

Reviewed by Cursor Bugbot for commit 34f80a0. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add project sidebar accent colors from t3.json

  • Introduces an optional accentColor field in t3ProjectFile.ts accepting either a single six-digit hex color or a palette of idle, hover, and selected colors
  • Server resolves the accent via ProjectFaviconResolver.resolveAccent and includes it in AssetCreateUrlResult; resolution failures now raise AssetProjectFaviconResolutionError
  • Sidebar thread rows apply per-project tinting using data-project-accent attributes and CSS variables, reusing the favicon asset state to avoid a duplicate fetch
  • Adds projectAccentRowState and projectAccentRowStyle helpers and documents the feature under "Customize project appearance"
  • Behavioral Change: issueAssetUrl now fails with AssetProjectFaviconResolutionError when resolveAccent throws for project-favicon assets, before path resolution occurs

Macroscope summarized 34f80a0.

Project icons are easy to miss in a busy sidebar. Checked-in accent colors keep each project's thread rows identifiable across idle, hover, and selected states.
@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. 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: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 060c49a7-eda6-4e6f-989e-5243e74521bf

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

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.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 23, 2026

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed the sidebar project-accent styling for consistency with the existing row surface model and CSS ownership rules. Three findings, all in the new accent styling: the accent rules are scoped to an ancestor attribute that does not exist in the mobile sidebar, the hover rule is not pointer-gated like the row's Tailwind hover: utilities, and the accent state attribute collapses route-active and multi-select into one surface.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/index.css Outdated
Comment thread apps/web/src/index.css Outdated
Comment thread apps/web/src/components/Sidebar.tsx Outdated
@macroscopeapp

macroscopeapp Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Skipped

Macroscope did not run approvability analysis for this PR. Macroscope could not determine whether this PR modifies its approvability configuration, so the PR was not approved automatically. A PR that may change the rules that govern approval is never approved automatically.

…select

The accent rules required a [data-app-sidebar] ancestor that the mobile
sheet sidebar never renders, the bare :hover left sticky tints on touch
pointers, and routed-active plus multi-selected rows collapsed into one
surface. Drop the ancestor scope, gate :hover behind (hover: hover), and
emit distinct active and selected states mixed over their own row tokens.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant