Skip to content

Add iconDark to profile links - #85

Closed
vineyardbovines wants to merge 1 commit into
mainfrom
app-3616-switch-profile-link-favicons-based-on-user-color-scheme
Closed

vineyardbovines wants to merge 1 commit into
mainfrom
app-3616-switch-profile-link-favicons-based-on-user-color-scheme

Conversation

@vineyardbovines

Copy link
Copy Markdown
Member

Adds an optional iconDark to profile links, for a site's icon in a dark color scheme (APP-3616).

  • app.bsky.actor.link#main.iconDark: blob, same limits as icon.
  • app.bsky.actor.defs#profileLinkView.iconDark: image URL, like icon.

Clients use icon when iconDark is missing, so existing links and clients are unaffected. The dark icon comes from cardyb's /v1/favicon?scheme=dark (bluesky-social/tango#1843).

goat lex lint reports the same existing unlimited-string warnings on defs.json as on main, and none for these fields, so this needs lex-lint-override like #84.

@linear-code

linear-code Bot commented Oct 23, 2026

Copy link
Copy Markdown

APP-3616

@claude

claude Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Claude finished @vineyardbovines's task in 48s —— View job


Review

No findings. Both fields are optional and additive, so existing records, views and clients aren't affected.

What I checked:

  • app.bsky.actor.link#main.iconDark (lexicons/app/bsky/actor/link.json:30-35): it has the same blob type, accept list and maxSize: 100000 as icon. It isn't in required, so older link records still validate. Readers that don't know the field ignore it, which fits the "fall back to icon" note in the description.
  • app.bsky.actor.defs#profileLinkView.iconDark (lexicons/app/bsky/actor/defs.json:214-218): it has the same string/uri shape as icon and isn't required. The existing unlimited-string lint warnings are on other fields, so lex-lint-override is still needed, as the PR says.
  • No changeset needed: the diff only touches the root lexicons/ tree. It doesn't change any published package under packages/.
  • SDK lexicons: packages/sdk/lexicons/ is a separate copy, synced from the atproto repo by scripts/install-lexicons-local.mjs. It already differs from root lexicons/app/bsky/actor/* on main. So @bsky/sdk types won't include iconDark until the next sync and codegen. That's how the repo works today, not a problem with this PR, but the app needs that sync before it can read iconDark through the SDK's generated types.

@github-actions

Copy link
Copy Markdown
Contributor

Lexicon lint findings

lexicons/app/bsky/actor/defs.json

  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length
  • unlimited-string (warn): no max length

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