Skip to content

Update library landing pages and refresh shared site components - #1075

Open
Abeuty wants to merge 1 commit into
mainfrom
codex/update-library-landing-pages
Open

Update library landing pages and refresh shared site components#1075
Abeuty wants to merge 1 commit into
mainfrom
codex/update-library-landing-pages

Conversation

@Abeuty

@Abeuty Abeuty commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Refresh library landing pages, navigation, overlays, and supporting content sections
  • Update shared UI components and design-system routes
  • Add refreshed brand assets, favicons, and hero motion media
  • Improve maintainers, partners, stats, social proof, newsletter, and support experiences

Testing

Not run (not requested)

Summary by CodeRabbit

  • New Features

    • Added a maintainers design-system showcase and responsive maintainer cards.
    • Added expanded brand asset previews with downloadable logo, favicon, and social formats.
    • Added light/dark component previews, blog post cards, badge corner styles, and typography documentation.
    • Added mobile navigation back controls, AI/search tooltips, and homepage hero video playback controls.
    • Added light/dark favicons and improved library status badges.
  • Bug Fixes

    • Improved reduced-motion behavior and corrected migration input visibility.
    • Updated default maintainer layouts and refined responsive navigation interactions.
  • Style

    • Refreshed footer navigation, buttons, icons, theme colors, spacing, and mega-menu animations.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 29, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
tanstack-com bda5417 Commit Preview URL

Branch Preview URL
Jul 29 2026, 10:27 PM

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The PR refreshes shared design-system components, responsive navigation, maintainer and library views, homepage sections, branding previews, footer navigation, and application-starter styling. It also adds maintainer documentation routes, responsive media behavior, theme tokens, and accessibility-related motion handling.

Changes

Design system and component previews

Layer / File(s) Summary
Shared UI contracts and previews
src/components/ds/*, src/components/ds/ui/*, src/ui/*, src/styles/app.css, src/routes/ds.*
Adds reusable descriptions, blog cards, brand galleries, button variants, badge corner styles, light/dark previews, typography roles, and related documentation examples.

Maintainer and library experiences

Layer / File(s) Summary
Maintainer cards and library badges
src/components/MaintainerCard.tsx, src/components/MaintainersSection.tsx, src/components/LibraryStatusBadge.tsx, src/components/landing/*, src/components/stack/CategoryArticle.tsx
Simplifies maintainer cards, adds card-specific social links, and centralizes library badge rendering across landing and article views.
Maintainer documentation route
src/routes/ds.maintainers.tsx, src/components/ds/ds-nav.ts, src/routeTree.gen.ts
Adds the /ds/maintainers route, navigation entry, generated route types, and responsive maintainer-card previews.
Libraries overlay return flow
src/contexts/LibrariesOverlayContext.tsx, src/components/LibrariesOverlay.tsx
Passes an optional back callback through the overlay context and renders a “Back to menu” action when available.

Navigation and shared controls

Layer / File(s) Summary
Responsive navbar and mega-menu
src/components/Navbar.tsx, src/components/MegaMenuItem.tsx, src/styles/app.css
Replaces the mobile menu group with a sliding two-panel navigation, adds mobile entry animations, updates blog-card rendering, and adjusts desktop menu styling.
Search, account, cart, theme, and tooltip controls
src/components/SearchButton.tsx, src/components/NavbarAuthControls.tsx, src/components/NavbarCartButton.tsx, src/components/ThemeToggle.tsx, src/ui/Tooltip.tsx
Updates iconography, sizing, button variants, AI tooltip behavior, and reduced-motion tooltip handling.

Homepage and landing presentation

Layer / File(s) Summary
Homepage hero and sections
src/routes/index.tsx, src/components/home/*
Adds a controllable palm video hero, updates statistics and maintainer layouts, replaces blog-card rendering with BlogPostCard, and reworks newsletter presentation.
Landing and visual token styling
src/components/landing/DevtoolsLanding.tsx, src/components/OpenSourceStats.tsx, src/routes/__root.tsx
Updates theme-token styling, stat icons, inverse code surfaces, and light/dark SVG favicon links.

Application and site chrome

Layer / File(s) Summary
Application starter and migration behavior
src/components/ApplicationStarter.tsx, src/components/CopyPageDropdown.tsx, src/components/application-builder/useApplicationBuilder.tsx
Exports Claude and Cursor icons, reuses shared eyebrow styling, updates starter actions, and hides migration repository input on the home context.
Footer and partner links
src/components/Footer.tsx, src/components/PartnersSection.tsx, src/components/PartnersSponsorsSection.tsx
Replaces the card footer with structured navigation, legal, and social sections and updates partner calls to action to use the subtle-link button variant.

Estimated code review effort: 5 (Critical) | ~90 minutes

Possibly related PRs

Suggested reviewers: tannerlinsley

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 10.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately captures the main changes: updated library landing pages plus broader shared site component refreshes.
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.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
⚔️ Resolve merge conflicts 💡
  • Resolve merge conflict in branch codex/update-library-landing-pages
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/update-library-landing-pages

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (4)
src/components/MaintainerCard.tsx (2)

395-395: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

MaintainerCardProps still declares libraryId and hideLibraries, which are now ignored.

Callers can keep passing them with no effect. Trim the type (or keep the props and honor them) so the contract matches the behavior.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/MaintainerCard.tsx` at line 395, Update MaintainerCardProps
and the MaintainerCard API to remove the unused libraryId and hideLibraries
props, ensuring the declared contract matches the component’s current behavior;
alternatively, implement their intended behavior if those props must remain
supported.

190-199: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

slice(0, 2) picks social links by object key order.

Which platforms surface on the card depends on the declaration order in src/libraries/maintainers.ts per maintainer, so cards are inconsistent and linkedIn/website can silently disappear. Consider an explicit priority list (e.g. ['twitter', 'bluesky', 'website']) instead of positional truncation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/MaintainerCard.tsx` around lines 190 - 199, Update the card
branch in MaintainerCard’s socialEntries construction to select links using an
explicit platform-priority list rather than Object.entries(...).slice(0, 2).
Preserve the existing GitHub entry and ensure prioritized platforms such as
twitter, bluesky, and website are selected consistently without being dropped
due to object key order.
src/components/ds/DsKit.tsx (1)

22-28: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Class concatenation in DsDescription makes caller overrides order-dependent. DsDescription joins its role classes with the incoming className instead of merging them, so any caller utility that conflicts with a role default (margins, text size, color) coexists with it and resolution falls back to CSS source order.

  • src/components/ds/DsKit.tsx#L22-L28: replace the array join(' ') with the already-imported twMerge(descriptionStyles[role], className).
  • src/routes/ds.typography.tsx#L343-L345: after the merge fix, className="mt-2" will reliably override the role's mt-3/mt-1; no change needed here beyond confirming the intended spacing.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/ds/DsKit.tsx` around lines 22 - 28, Update DsDescription in
src/components/ds/DsKit.tsx:22-28 to use the imported twMerge with
descriptionStyles[role] and className instead of array joining, so caller
utilities reliably override role defaults. In
src/routes/ds.typography.tsx:343-345, make no code change; only confirm the
existing mt-2 spacing override remains intended.
src/components/ds/BrandAssets.tsx (1)

124-157: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Consider loading="lazy" / explicit dimensions on the preview <img>.

The gallery renders a dozen-plus square previews; lazy loading and intrinsic sizing would avoid layout shift and unnecessary fetches on this catalog page.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/ds/BrandAssets.tsx` around lines 124 - 157, Update the preview
img in AssetCard to use lazy loading and explicit square dimensions matching the
gallery layout, while preserving asset.preview, asset.alt, and asset.imgClass.
Ensure the intrinsic sizing prevents layout shift and offscreen previews are not
fetched unnecessarily.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/MaintainerCard.tsx`:
- Around line 397-399: The MaintainerCard wrapper div’s aria-label is
ineffective without an accessible role. Remove this redundant aria-label, or
assign an appropriate role such as group/listitem and connect it to the existing
maintainer-name-${maintainer.github} element via aria-labelledby.
- Around line 401-408: Update the GitHub profile anchor in MaintainerCard to
render maintainer.avatar when it is present, while retaining the gray background
as the fallback for missing avatars. Preserve the existing link, accessibility
attributes, and layout styling.

In `@src/routes/ds.typography.tsx`:
- Around line 343-345: Remove the hardcoded mt-2 class from the DsDescription
usage in the role-based typography rendering, allowing the role defaults (mt-3
for page and mt-1 for section) to apply without conflicting margin utilities.

In `@src/styles/app.css`:
- Around line 580-628: Add the missing light-mode declarations to .ds-mode-light
for every token overridden by html.dark: --color-icon-*,
--color-action-primary*, --color-status-*, --color-background-elevated,
--color-border-error/success, --color-text-accent, --color-input-bg-hover,
--color-menu-item-pressed, and --color-divider-*. Reuse the existing light-theme
token values so components such as ButtonMode and text-icon-muted remain fully
light-themed inside previews.

---

Nitpick comments:
In `@src/components/ds/BrandAssets.tsx`:
- Around line 124-157: Update the preview img in AssetCard to use lazy loading
and explicit square dimensions matching the gallery layout, while preserving
asset.preview, asset.alt, and asset.imgClass. Ensure the intrinsic sizing
prevents layout shift and offscreen previews are not fetched unnecessarily.

In `@src/components/ds/DsKit.tsx`:
- Around line 22-28: Update DsDescription in src/components/ds/DsKit.tsx:22-28
to use the imported twMerge with descriptionStyles[role] and className instead
of array joining, so caller utilities reliably override role defaults. In
src/routes/ds.typography.tsx:343-345, make no code change; only confirm the
existing mt-2 spacing override remains intended.

In `@src/components/MaintainerCard.tsx`:
- Line 395: Update MaintainerCardProps and the MaintainerCard API to remove the
unused libraryId and hideLibraries props, ensuring the declared contract matches
the component’s current behavior; alternatively, implement their intended
behavior if those props must remain supported.
- Around line 190-199: Update the card branch in MaintainerCard’s socialEntries
construction to select links using an explicit platform-priority list rather
than Object.entries(...).slice(0, 2). Preserve the existing GitHub entry and
ensure prioritized platforms such as twitter, bluesky, and website are selected
consistently without being dropped due to object key order.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 81b49e90-b99f-4803-94ab-27611ecc13fb

📥 Commits

Reviewing files that changed from the base of the PR and between c5da990 and bda5417.

⛔ Files ignored due to path filters (11)
  • public/favicon-dark.svg is excluded by !**/*.svg
  • public/favicon-light.svg is excluded by !**/*.svg
  • public/images/brand/social/mark-dark.svg is excluded by !**/*.svg
  • public/images/brand/social/mark-dark@2x.png is excluded by !**/*.png
  • public/images/brand/social/mark-light.svg is excluded by !**/*.svg
  • public/images/brand/social/mark-light@2x.png is excluded by !**/*.png
  • public/images/brand/social/stacked-dark.svg is excluded by !**/*.svg
  • public/images/brand/social/stacked-dark@2x.png is excluded by !**/*.png
  • public/images/brand/social/stacked-light.svg is excluded by !**/*.svg
  • public/images/brand/social/stacked-light@2x.png is excluded by !**/*.png
  • public/images/hero-palm-motion.mp4 is excluded by !**/*.mp4
📒 Files selected for processing (48)
  • src/components/ApplicationStarter.tsx
  • src/components/ButtonGroup.tsx
  • src/components/CopyPageDropdown.tsx
  • src/components/Footer.tsx
  • src/components/LibrariesOverlay.tsx
  • src/components/LibraryStatusBadge.tsx
  • src/components/MaintainerCard.tsx
  • src/components/MaintainersSection.tsx
  • src/components/MegaMenuItem.tsx
  • src/components/Navbar.tsx
  • src/components/NavbarAuthControls.tsx
  • src/components/NavbarCartButton.tsx
  • src/components/OpenSourceStats.tsx
  • src/components/PartnersSection.tsx
  • src/components/PartnersSponsorsSection.tsx
  • src/components/SearchButton.tsx
  • src/components/ThemeToggle.tsx
  • src/components/application-builder/useApplicationBuilder.tsx
  • src/components/ds/BrandAssets.tsx
  • src/components/ds/DsKit.tsx
  • src/components/ds/ds-nav.ts
  • src/components/ds/ui/BlogPostCard.tsx
  • src/components/ds/ui/StatsSection.tsx
  • src/components/ds/ui/index.tsx
  • src/components/home/HomeCommunitySection.tsx
  • src/components/home/HomeNewsletterSection.tsx
  • src/components/home/HomeSocialProofSection.tsx
  • src/components/home/HomeStatsSection.tsx
  • src/components/landing/DevtoolsLanding.tsx
  • src/components/landing/HighlightLanding.tsx
  • src/components/landing/LibraryLanding.tsx
  • src/components/landing/MarkdownLanding.tsx
  • src/components/stack/CategoryArticle.tsx
  • src/contexts/LibrariesOverlayContext.tsx
  • src/routeTree.gen.ts
  • src/routes/__root.tsx
  • src/routes/ds.badges.tsx
  • src/routes/ds.buttons.tsx
  • src/routes/ds.cards.tsx
  • src/routes/ds.logos.tsx
  • src/routes/ds.maintainers.tsx
  • src/routes/ds.typography.tsx
  • src/routes/index.tsx
  • src/routes/maintainers.tsx
  • src/routes/paid-support.tsx
  • src/styles/app.css
  • src/ui/Badge.tsx
  • src/ui/Tooltip.tsx

Comment on lines 397 to 399
<div
className="group bg-white dark:bg-gray-900 rounded-lg overflow-hidden shadow-xs border border-gray-200 dark:border-gray-800"
className="group flex w-full max-w-[252px] flex-col items-center rounded-[26px] corner-squircle p-1.5 transition-colors duration-200 hover:bg-[#f2f2f2] focus-within:bg-[#f2f2f2] active:bg-[#e5e5e5] motion-reduce:transition-none dark:hover:bg-[#262626] dark:focus-within:bg-[#262626] dark:active:bg-[#404040]"
aria-label={`Maintainer card for ${maintainer.name}`}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

aria-label on a generic <div> isn't exposed to assistive tech.

Without a role, the label is dropped. Either drop it (the inner link already carries a descriptive label) or give the wrapper a role such as group/listitem — the existing id={maintainer-name-${maintainer.github}} on Line 412 could then serve as aria-labelledby.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/MaintainerCard.tsx` around lines 397 - 399, The MaintainerCard
wrapper div’s aria-label is ineffective without an accessible role. Remove this
redundant aria-label, or assign an appropriate role such as group/listitem and
connect it to the existing maintainer-name-${maintainer.github} element via
aria-labelledby.

Comment on lines 401 to +408
<a
href={`https://github.com/${maintainer.github}`}
target="_blank"
rel="noopener noreferrer"
aria-label={`View ${maintainer.name}'s GitHub profile`}
className="relative h-64 overflow-hidden block"
className="block aspect-square w-full overflow-hidden rounded-[22px] corner-squircle bg-[#d9d9d9] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus"
tabIndex={0}
>
<img
alt={`Avatar of ${maintainer.name}`}
className="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500"
src={maintainer.avatar}
loading="lazy"
decoding="async"
style={{
aspectRatio: '1/1',
objectFit: 'cover',
}}
/>
<div className="absolute inset-0 bg-linear-to-t from-black/60 via-black/30 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" />
<div className="absolute inset-0 p-4 flex flex-col justify-end opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<div className="space-y-2">
{maintainer.frameworkExpertise &&
maintainer.frameworkExpertise.length > 0 && (
<div className="flex flex-wrap gap-2 mb-2">
{maintainer.frameworkExpertise.map((framework) => (
<FrameworkChip key={framework} framework={framework} />
))}
</div>
)}
{maintainer.specialties && maintainer.specialties.length > 0 && (
<div className="flex flex-wrap gap-2">
{maintainer.specialties.map((specialty) => (
<SpecialtyChip key={specialty} specialty={specialty} />
))}
</div>
)}
</div>
</div>
</a>
<div className="p-3 space-y-2">
<div className="flex items-center justify-between">
<span
className="text-base font-bold"
id={`maintainer-name-${maintainer.github}`}
>
{maintainer.name}
</span>
<div className="flex items-center gap-2">
{libraryId && (
<RoleBadge maintainer={maintainer} libraryId={libraryId} />
)}
</div>
</div>
{!hideLibraries && !libraryId && libraries.length > 0 && (
<div className="flex flex-wrap gap-1.5 pt-1">
{libraries
.slice(0, showAllLibraries ? undefined : 2)
.map((library) => (
<LibraryBadge key={library.id} library={library} />
))}
{!showAllLibraries && libraries.length > 2 && (
<button
onClick={(e) => {
e.preventDefault()
e.stopPropagation()
setShowAllLibraries(true)
}}
className="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 transition-colors focus:outline-none focus:ring-2 focus:ring-blue-400"
aria-label={`Show ${libraries.length - 2} more libraries`}
tabIndex={0}
type="button"
>
+{libraries.length - 2} more
</button>
)}
</div>
)}
<MaintainerSocialLinks maintainer={maintainer} />
/>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

The avatar is never rendered — every card shows the bare gray placeholder.

The anchor has no children and maintainer.avatar is no longer read anywhere in this component, so bg-[#d9d9d9] is the permanent visual for real maintainers on /maintainers, /paid-support, MaintainersSection, and HomeCommunitySection. If the placeholder is intentional for the DS preview only, the image should still render when maintainer.avatar is present.

🐛 Proposed fix
         className="block aspect-square w-full overflow-hidden rounded-[22px] corner-squircle bg-[`#d9d9d9`] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus"
         tabIndex={0}
-      />
+      >
+        {maintainer.avatar ? (
+          <img
+            src={maintainer.avatar}
+            alt=""
+            loading="lazy"
+            className="h-full w-full object-cover"
+          />
+        ) : null}
+      </a>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<a
href={`https://github.com/${maintainer.github}`}
target="_blank"
rel="noopener noreferrer"
aria-label={`View ${maintainer.name}'s GitHub profile`}
className="relative h-64 overflow-hidden block"
className="block aspect-square w-full overflow-hidden rounded-[22px] corner-squircle bg-[#d9d9d9] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus"
tabIndex={0}
>
<img
alt={`Avatar of ${maintainer.name}`}
className="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500"
src={maintainer.avatar}
loading="lazy"
decoding="async"
style={{
aspectRatio: '1/1',
objectFit: 'cover',
}}
/>
<div className="absolute inset-0 bg-linear-to-t from-black/60 via-black/30 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" />
<div className="absolute inset-0 p-4 flex flex-col justify-end opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<div className="space-y-2">
{maintainer.frameworkExpertise &&
maintainer.frameworkExpertise.length > 0 && (
<div className="flex flex-wrap gap-2 mb-2">
{maintainer.frameworkExpertise.map((framework) => (
<FrameworkChip key={framework} framework={framework} />
))}
</div>
)}
{maintainer.specialties && maintainer.specialties.length > 0 && (
<div className="flex flex-wrap gap-2">
{maintainer.specialties.map((specialty) => (
<SpecialtyChip key={specialty} specialty={specialty} />
))}
</div>
)}
</div>
</div>
</a>
<div className="p-3 space-y-2">
<div className="flex items-center justify-between">
<span
className="text-base font-bold"
id={`maintainer-name-${maintainer.github}`}
>
{maintainer.name}
</span>
<div className="flex items-center gap-2">
{libraryId && (
<RoleBadge maintainer={maintainer} libraryId={libraryId} />
)}
</div>
</div>
{!hideLibraries && !libraryId && libraries.length > 0 && (
<div className="flex flex-wrap gap-1.5 pt-1">
{libraries
.slice(0, showAllLibraries ? undefined : 2)
.map((library) => (
<LibraryBadge key={library.id} library={library} />
))}
{!showAllLibraries && libraries.length > 2 && (
<button
onClick={(e) => {
e.preventDefault()
e.stopPropagation()
setShowAllLibraries(true)
}}
className="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 transition-colors focus:outline-none focus:ring-2 focus:ring-blue-400"
aria-label={`Show ${libraries.length - 2} more libraries`}
tabIndex={0}
type="button"
>
+{libraries.length - 2} more
</button>
)}
</div>
)}
<MaintainerSocialLinks maintainer={maintainer} />
/>
<a
href={`https://github.com/${maintainer.github}`}
target="_blank"
rel="noopener noreferrer"
aria-label={`View ${maintainer.name}'s GitHub profile`}
className="block aspect-square w-full overflow-hidden rounded-[22px] corner-squircle bg-[`#d9d9d9`] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus"
tabIndex={0}
>
{maintainer.avatar ? (
<img
src={maintainer.avatar}
alt=""
loading="lazy"
className="h-full w-full object-cover"
/>
) : null}
</a>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/MaintainerCard.tsx` around lines 401 - 408, Update the GitHub
profile anchor in MaintainerCard to render maintainer.avatar when it is present,
while retaining the gray background as the fallback for missing avatars.
Preserve the existing link, accessibility attributes, and layout styling.

Comment on lines +343 to +345
<DsDescription role={role} className="mt-2">
{children}
</DsDescription>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

className="mt-2" collides with the role's own top margin.

DsDescription concatenates classes rather than merging them, so mt-2 plus the role default (mt-3 for page, mt-1 for section) both land in the class list and the winner depends on CSS order. Root cause and fix are noted on src/components/ds/DsKit.tsx.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/routes/ds.typography.tsx` around lines 343 - 345, Remove the hardcoded
mt-2 class from the DsDescription usage in the role-based typography rendering,
allowing the role defaults (mt-3 for page and mt-1 for section) to apply without
conflicting margin utilities.

Comment thread src/styles/app.css
Comment on lines +580 to +628
.ds-mode-light {
color-scheme: light;
--color-text-primary: var(--color-ds-neutral-500);
--color-text-secondary: var(--color-ds-neutral-400);
--color-text-muted: var(--color-ds-neutral-300);
--color-text-inverse: #ffffff;
--color-background-default: #ffffff;
--color-background-surface: #ffffff;
--color-background-subtle: #fafafa;
--color-background-inverse: var(--color-ds-neutral-500);
--color-border-default: var(--color-ds-neutral-200);
--color-border-subtle: var(--color-ds-neutral-100);
--color-border-strong: var(--color-ds-neutral-400);
--color-border-focus: var(--color-ds-blue-400);
--color-action-secondary: var(--color-ds-neutral-100);
--color-action-secondary-hover: var(--color-ds-neutral-200);
--color-category-framework: var(--color-ds-green-400);
--color-category-data: var(--color-ds-terracotta-400);
--color-category-ui: var(--color-ds-blue-400);
--color-category-performance: var(--color-ds-amber-400);
--color-category-tooling: var(--color-ds-neutral-400);
--color-surface-state-hover: #1111110f;
--color-surface-state-pressed: #1111111f;
}

.ds-mode-dark {
color-scheme: dark;
--color-text-primary: #ffffff;
--color-text-secondary: #aea691;
--color-text-muted: #756c5b;
--color-text-inverse: #111111;
--color-background-default: #111111;
--color-background-surface: #1f1f1f;
--color-background-subtle: #1b1b1b;
--color-background-inverse: #ffffff;
--color-border-default: #2d2d2d;
--color-border-subtle: #232323;
--color-border-strong: #aea691;
--color-border-focus: #61adbf;
--color-action-secondary: #2b2b2b;
--color-action-secondary-hover: #3a3a3a;
--color-category-framework: var(--color-ds-green-300);
--color-category-data: var(--color-ds-terracotta-300);
--color-category-ui: var(--color-ds-blue-300);
--color-category-performance: var(--color-ds-amber-300);
--color-category-tooling: var(--color-ds-neutral-200);
--color-surface-state-hover: #ffffff1f;
--color-surface-state-pressed: #ffffff29;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

.ds-mode-light doesn't mirror every token html.dark overrides, so dark values bleed into light specimens.

html.dark overrides --color-icon-*, --color-action-primary*, --color-status-*, --color-background-elevated, --color-border-error/success, --color-text-accent, --color-input-bg-hover, --color-menu-item-pressed, and --color-divider-*; .ds-mode-light re-declares only a subset. When the site is in dark mode, a .ds-mode-light preview (e.g. ButtonMode mode="light" in src/routes/ds.buttons.tsx, or icon links using text-icon-muted) still resolves those to the dark values on a white surface. Worth adding the remaining overrides so previews are truly self-contained.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/styles/app.css` around lines 580 - 628, Add the missing light-mode
declarations to .ds-mode-light for every token overridden by html.dark:
--color-icon-*, --color-action-primary*, --color-status-*,
--color-background-elevated, --color-border-error/success, --color-text-accent,
--color-input-bg-hover, --color-menu-item-pressed, and --color-divider-*. Reuse
the existing light-theme token values so components such as ButtonMode and
text-icon-muted remain fully light-themed inside previews.

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