Skip to content

New Branding, Design System, and Landing Pages - #1027

Open
Abeuty wants to merge 76 commits into
mainfrom
ds-rebrand-phosphor-icons
Open

New Branding, Design System, and Landing Pages#1027
Abeuty wants to merge 76 commits into
mainfrom
ds-rebrand-phosphor-icons

Conversation

@Abeuty

@Abeuty Abeuty commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

What

Builds out the /ds design system as the source of truth for the site, applies its rebrand tokens/type across the app, and migrates every icon from lucide-react to @phosphor-icons/react.

Design system (/ds)

  • Rendered style book with tree nav — Styles (Colors, Typography, Iconography, Icon Migration, Shadows, Effects), Figma Tokens (Palette, Semantic Tokens), Components (Buttons, Badges, Inputs, Dropdown, Avatar, Spinner, Collapsible, Breadcrumbs, Cards).
  • Figma token layer in app.css via @theme static — primitives (--color-ds-*), library (--color-lib-*), and semantic tokens (text/background/border/icon/action/status/accent) with html.dark overrides. Editing a primitive propagates through everything that references it.
  • New-system component kit at src/components/ds/ui built on the semantic tokens.

Site-wide rebrand

  • Global type: h1..h6 → Bricolage Grotesque, mono → IBM Plex Mono, loaded globally from __root.tsx. Re-pointing --font-ds-* restyles the whole site.
  • Navbar: swapped to the new rebrand landscape logo (light/dark variants), centered nav, centered mega menu.
  • PalmSpinner: a branded pixel-art palm loader that sways at the trunk base (respects prefers-reduced-motion).

Icon migration — lucide → Phosphor (155 files)

  • 218 distinct icons (85 keep their name, 133 renamed) at regular weight. Every Phosphor target was validated against the installed package before the sweep.
  • Props translated: dropped strokeWidth/absoluteStrokeWidth, fillweight="fill", LucideIcon type → Phosphor Icon type; aliases (Search as SearchIconMagnifyingGlass as SearchIcon) and same-target collisions (Layers/Boxes/SquareStackStack) handled.
  • /ds/icon-migration review page renders old → new glyphs side by side (Flagged / Renamed / All tabs + search) so maintainers can flag any swap that doesn't fit its context.

Notes for reviewers

  • lucide-react is intentionally kept installed — the review page renders the "before" glyphs from it. It can be removed once that page is retired.
  • A few icon mappings are judgment calls worth a look on /ds/icon-migration (e.g. Server→HardDrives, Route→Path, Milestone→MapPinLine, Activity→Pulse, Dock→AppWindow, and the four that collapse to Stack).
  • The unreferenced 193MB public/videos/hero.mp4 is deliberately not included in this PR.
  • Verified: tsc clean, lint clean, unit tests pass (all via pre-commit), and /ds pages render without console errors.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 250 files, which is 100 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 9a04d2e7-e4da-45f4-99ff-ca72b8fa37af

📥 Commits

Reviewing files that changed from the base of the PR and between a02b957 and 5ca3cb7.

⛔ Files ignored due to path filters (22)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • public/blog-assets/tanstack-has-a-new-look/design-system-snapshot.svg is excluded by !**/*.svg
  • public/blog-assets/tanstack-has-a-new-look/logo-swatch.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-emblem-black.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-emblem-charcoal.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-emblem-cream.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-emblem-white.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-landscape-black.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-landscape-charcoal.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-landscape-white.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-stacked-black.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-stacked-charcoal.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-stacked-cream.svg is excluded by !**/*.svg
  • public/images/brand/tanstack-stacked-white.svg is excluded by !**/*.svg
  • public/images/brand/tanstack/landscape-black.svg is excluded by !**/*.svg
  • public/images/brand/tanstack/landscape-charcoal.svg is excluded by !**/*.svg
  • public/images/brand/tanstack/landscape-white.svg is excluded by !**/*.svg
  • public/images/brand/tanstack/stacked-black.svg is excluded by !**/*.svg
  • public/images/brand/tanstack/stacked-charcoal.svg is excluded by !**/*.svg
  • public/images/brand/tanstack/stacked-cream.svg is excluded by !**/*.svg
  • public/images/brand/tanstack/stacked-white.svg is excluded by !**/*.svg
  • public/images/hero-palm-gradient.jpg is excluded by !**/*.jpg
📒 Files selected for processing (258)
  • .agents/index.md
  • .agents/skills/design-motion-principles/SKILL.md
  • .agents/skills/design-motion-principles/references/accessibility.md
  • .agents/skills/design-motion-principles/references/anti-checklist.md
  • .agents/skills/design-motion-principles/references/audit-checklist.md
  • .agents/skills/design-motion-principles/references/creation-gotchas.md
  • .agents/skills/design-motion-principles/references/demo-shell.html
  • .agents/skills/design-motion-principles/references/emil-kowalski.md
  • .agents/skills/design-motion-principles/references/jakub-krehel.md
  • .agents/skills/design-motion-principles/references/jhey-tompkins.md
  • .agents/skills/design-motion-principles/references/motion-cookbook.md
  • .agents/skills/design-motion-principles/references/output-format.md
  • .agents/skills/design-motion-principles/references/performance.md
  • .agents/skills/design-motion-principles/references/report-template.html
  • .agents/skills/design-motion-principles/workflows/audit.md
  • .agents/skills/design-motion-principles/workflows/create.md
  • .claude/launch.json
  • .claude/skills/design-motion-principles
  • .gitignore
  • package.json
  • skills-lock.json
  • src/blog/tanstack-has-a-new-look.md
  • src/builder/templates.ts
  • src/components/ApplicationStarter.tsx
  • src/components/AuthenticatedUserMenu.tsx
  • src/components/Avatar.tsx
  • src/components/AvatarCropModal.tsx
  • src/components/BlogAuthorFilter.tsx
  • src/components/BrandContextMenu.tsx
  • src/components/Breadcrumbs.tsx
  • src/components/CodeExplorerTopBar.tsx
  • src/components/CopyPageDropdown.tsx
  • src/components/Doc.tsx
  • src/components/DocFeedbackFloatingButton.tsx
  • src/components/DocFeedbackNote.tsx
  • src/components/DocFeedbackProvider.tsx
  • src/components/ExampleDeployDialog.tsx
  • src/components/FeatureGrid.tsx
  • src/components/FeedbackLeaderboard.tsx
  • src/components/FeedbackModerationList.tsx
  • src/components/FilterComponents.tsx
  • src/components/FrameworkCard.tsx
  • src/components/ImageUpload.client.tsx
  • src/components/LibrariesOverlay.tsx
  • src/components/LibraryCard.tsx
  • src/components/LibraryDownloadsMicro.tsx
  • src/components/LibraryGridCard.tsx
  • src/components/LibraryLayout.tsx
  • src/components/LibraryStatsSection.tsx
  • src/components/LibraryTestimonials.tsx
  • src/components/LoginModal.tsx
  • src/components/MegaMenuItem.tsx
  • src/components/Navbar.tsx
  • src/components/NavbarAuthControls.tsx
  • src/components/NavbarCartButton.tsx
  • src/components/NewsletterSignup.tsx
  • src/components/NotFound.tsx
  • src/components/NotesModerationList.tsx
  • src/components/OpenSourceStats.tsx
  • src/components/OssSponsors.tsx
  • src/components/OssSponsorsSection.tsx
  • src/components/PaginationControls.tsx
  • src/components/PartnersGrid.tsx
  • src/components/PartnershipCallout.tsx
  • src/components/PlaceholderOssSponsors.tsx
  • src/components/PlaceholderSponsorPack.tsx
  • src/components/SearchButton.tsx
  • src/components/SearchModal.tsx
  • src/components/Select.tsx
  • src/components/ShowcaseCard.tsx
  • src/components/ShowcaseDetail.tsx
  • src/components/ShowcaseGallery.tsx
  • src/components/ShowcaseModerationList.tsx
  • src/components/ShowcaseSection.tsx
  • src/components/ShowcaseSubmitForm.tsx
  • src/components/Spinner.tsx
  • src/components/SponsorPack.tsx
  • src/components/SponsorsSection.tsx
  • src/components/TableComponents.tsx
  • src/components/ThemeToggle.tsx
  • src/components/TocMobile.tsx
  • src/components/UserFeedbackSection.tsx
  • src/components/VersionSelect.tsx
  • src/components/account/AccountProfilePictureSection.client.tsx
  • src/components/admin/AdminAccessDenied.tsx
  • src/components/admin/DocsCacheTab.tsx
  • src/components/admin/UserAvatar.tsx
  • src/components/application-builder/parts.tsx
  • src/components/application-builder/useApplicationBuilder.tsx
  • src/components/builder/BuilderSummary.tsx
  • src/components/builder/BuilderWorkspace.tsx
  • src/components/builder/CustomAddonDialog.tsx
  • src/components/builder/CustomTemplateDialog.tsx
  • src/components/builder/DeployDialog.tsx
  • src/components/builder/FeaturePicker.tsx
  • src/components/charts/ChartControls.tsx
  • src/components/ds/DsKit.tsx
  • src/components/ds/ds-nav.ts
  • src/components/ds/pixel-spinner-frames.ts
  • src/components/ds/ui/PalmSpinner.tsx
  • src/components/ds/ui/PixelSpinner.tsx
  • src/components/ds/ui/StatsSection.tsx
  • src/components/ds/ui/index.tsx
  • src/components/game/engine/entities/Coins.ts
  • src/components/game/ui/CompleteOverlay.tsx
  • src/components/game/ui/GameHUD.tsx
  • src/components/game/ui/StatsHUD.tsx
  • src/components/home/HomeApplicationStarter.tsx
  • src/components/home/HomeCommunitySection.tsx
  • src/components/home/HomeNewsletterSection.tsx
  • src/components/home/HomeSectionFallbacks.tsx
  • src/components/home/HomeSocialProofSection.tsx
  • src/components/home/HomeStatsSection.tsx
  • src/components/icons/CheckCircleIcon.tsx
  • src/components/icons/CogsIcon.tsx
  • src/components/landing/AiLanding.tsx
  • src/components/landing/CliLanding.tsx
  • src/components/landing/ConfigLanding.tsx
  • src/components/landing/DbLanding.tsx
  • src/components/landing/DevtoolsLanding.tsx
  • src/components/landing/FormLanding.tsx
  • src/components/landing/HighlightLanding.tsx
  • src/components/landing/HotkeysLanding.tsx
  • src/components/landing/IntentLanding.tsx
  • src/components/landing/LandingCopyPromptButton.tsx
  • src/components/landing/LibraryLanding.tsx
  • src/components/landing/MarkdownLanding.tsx
  • src/components/landing/PacerLanding.tsx
  • src/components/landing/QueryLanding.tsx
  • src/components/landing/RangerLanding.tsx
  • src/components/landing/RouterLanding.tsx
  • src/components/landing/StartLanding.tsx
  • src/components/landing/StoreLanding.tsx
  • src/components/landing/TableLanding.tsx
  • src/components/landing/VirtualLanding.tsx
  • src/components/landing/WorkflowLanding.tsx
  • src/components/markdown/CodeBlockView.tsx
  • src/components/markdown/MarkdownContent.tsx
  • src/components/npm-stats/BaselineSection.tsx
  • src/components/npm-stats/ChartControls.tsx
  • src/components/npm-stats/DisabledChartActions.tsx
  • src/components/npm-stats/LatestBucketNavigator.tsx
  • src/components/npm-stats/NPMStatsChart.tsx
  • src/components/npm-stats/PackagePills.tsx
  • src/components/npm-stats/PackageSearch.tsx
  • src/components/npm-stats/StatsTable.tsx
  • src/components/shop/CartDrawer.tsx
  • src/components/shop/ui/Qty.tsx
  • src/components/stack/CategoryArticle.tsx
  • src/contexts/LibrariesOverlayContext.tsx
  • src/libraries/ai.tsx
  • src/libraries/browse-utils.ts
  • src/libraries/categories.ts
  • src/libraries/cli.tsx
  • src/libraries/config.tsx
  • src/libraries/db.tsx
  • src/libraries/devtools.tsx
  • src/libraries/form.tsx
  • src/libraries/hotkeys.tsx
  • src/libraries/icons.ts
  • src/libraries/intent.tsx
  • src/libraries/libraries.ts
  • src/libraries/pacer.tsx
  • src/libraries/query.tsx
  • src/libraries/ranger.tsx
  • src/libraries/react-charts.ts
  • src/libraries/router.tsx
  • src/libraries/start.tsx
  • src/libraries/store.tsx
  • src/libraries/table.tsx
  • src/libraries/virtual.tsx
  • src/libraries/workflow.tsx
  • src/routeTree.gen.ts
  • src/routes/-library-landing-route.tsx
  • src/routes/__root.tsx
  • src/routes/_library/$libraryId/$version.docs.blog.tsx
  • src/routes/_library/$libraryId/$version.docs.contributors.tsx
  • src/routes/_library/$libraryId/$version.docs.framework.$framework.examples.$.tsx
  • src/routes/_library/$libraryId/$version.docs.npm-stats.tsx
  • src/routes/account/feedback.tsx
  • src/routes/account/index.tsx
  • src/routes/account/integrations.tsx
  • src/routes/account/notes.tsx
  • src/routes/account/submissions.tsx
  • src/routes/admin/audit.tsx
  • src/routes/admin/feedback_.$id.tsx
  • src/routes/admin/github-stats.tsx
  • src/routes/admin/index.tsx
  • src/routes/admin/intent.tsx
  • src/routes/admin/logins.tsx
  • src/routes/admin/npm-stats.tsx
  • src/routes/admin/roles.$roleId.tsx
  • src/routes/admin/roles.index.tsx
  • src/routes/admin/route.tsx
  • src/routes/admin/showcases_.$id.tsx
  • src/routes/admin/users.$userId.tsx
  • src/routes/admin/users.tsx
  • src/routes/ads.tsx
  • src/routes/blog.index.tsx
  • src/routes/brand-guide.tsx
  • src/routes/dashboard.tsx
  • src/routes/ds.avatar.tsx
  • src/routes/ds.badges.tsx
  • src/routes/ds.breadcrumbs.tsx
  • src/routes/ds.buttons.tsx
  • src/routes/ds.cards.tsx
  • src/routes/ds.collapsible.tsx
  • src/routes/ds.colors.tsx
  • src/routes/ds.dropdown.tsx
  • src/routes/ds.effects.tsx
  • src/routes/ds.eyebrow.tsx
  • src/routes/ds.icon-migration.tsx
  • src/routes/ds.iconography.tsx
  • src/routes/ds.index.tsx
  • src/routes/ds.inputs.tsx
  • src/routes/ds.logos.tsx
  • src/routes/ds.navbar.tsx
  • src/routes/ds.palette.tsx
  • src/routes/ds.semantic.tsx
  • src/routes/ds.shadows.tsx
  • src/routes/ds.spinner.tsx
  • src/routes/ds.stats.tsx
  • src/routes/ds.tsx
  • src/routes/ds.typography.tsx
  • src/routes/ethos.tsx
  • src/routes/index.tsx
  • src/routes/intent/registry/$packageName.tsx
  • src/routes/learn.tsx
  • src/routes/libraries.tsx
  • src/routes/libraries_.$framework.tsx
  • src/routes/login.tsx
  • src/routes/maintainers.tsx
  • src/routes/merch.tsx
  • src/routes/oauth/authorize.tsx
  • src/routes/paid-support.tsx
  • src/routes/partners.$partner.tsx
  • src/routes/partners.railway.tsx
  • src/routes/shop.cart.tsx
  • src/routes/shop.search.tsx
  • src/routes/sponsors-embed.tsx
  • src/routes/stats/npm/index.tsx
  • src/routes/tenets.tsx
  • src/routes/workshops.tsx
  • src/server/blog.ts
  • src/server/sponsors.ts
  • src/styles/app.css
  • src/ui/Badge.tsx
  • src/ui/Button.tsx
  • src/ui/FormInput.tsx
  • src/ui/Tooltip.tsx
  • src/utils/blog.functions.ts
  • src/utils/blog.ts
  • src/utils/partners.tsx
  • src/utils/publicImageDimensions.ts
  • src/utils/sitemap.ts
  • src/utils/sponsors.functions.ts
  • src/utils/stats.server.ts
  • tests/libraries-utils.test.ts

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ds-rebrand-phosphor-icons

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.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 2, 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 5ca3cb7 Commit Preview URL

Branch Preview URL
Jul 29 2026, 05:33 AM

@socket-security

socket-security Bot commented Jul 14, 2026

Copy link
Copy Markdown

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Action Severity Alert  (click "▶" to expand/collapse)
Warn High
Obfuscated code: npm data-urls is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/@figma/code-connect@1.4.8npm/data-urls@5.0.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/data-urls@5.0.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm rrweb-cssom is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/@figma/code-connect@1.4.8npm/rrweb-cssom@0.7.1

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/rrweb-cssom@0.7.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm rrweb-cssom is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/@figma/code-connect@1.4.8npm/rrweb-cssom@0.8.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/rrweb-cssom@0.8.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

@tannerlinsley tannerlinsley changed the title Design system, rebrand styles, and lucide→Phosphor icon migration New Branding, Design System, and Landing Pages Jul 27, 2026
Abeuty and others added 26 commits July 28, 2026 13:21
…ration

Build out the /ds design system as the source of truth for the site and
apply its tokens, type, and icons across the app.

Design system (/ds):
- Rendered style book with tree nav: Styles (Colors, Typography, Iconography,
  Icon Migration, Shadows, Effects), Figma Tokens (Palette, Semantic Tokens),
  and Components (Buttons, Badges, Inputs, Dropdown, Avatar, Spinner,
  Collapsible, Breadcrumbs, Cards).
- Figma token layer in app.css (@theme static): primitives (--color-ds-*),
  library (--color-lib-*), and semantic tokens (text/background/border/icon/
  action/status/accent) with html.dark overrides.
- New-system component kit (src/components/ds/ui) on the semantic tokens.

Site-wide rebrand application:
- Global type: h1..h6 → Bricolage Grotesque, mono → IBM Plex Mono, fonts
  loaded globally from __root.tsx. Editing --font-ds-* propagates everywhere.
- Navbar swapped to the new rebrand landscape logo (light/dark variants) with
  centered nav; mega menu centered.
- Palm-tree pixel-art spinner (PalmSpinner) that sways at the trunk base.

Icon migration (lucide-react → @phosphor-icons/react), 155 files:
- 218 distinct icons (85 kept name, 133 renamed) at regular weight.
- Props translated: dropped strokeWidth/absoluteStrokeWidth, fill→weight="fill",
  LucideIcon type → Phosphor Icon type; aliases and same-target collisions handled.
- /ds/icon-migration review page renders old→new glyphs side by side so
  maintainers can flag any swap that doesn't fit its context.

lucide-react is kept installed (the review page renders the "before" glyphs);
it can be removed once that page is retired.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Centered header (PRINCIPLES eyebrow + display title + subtitle) over a
  single bordered container with 4 full-width stacked principle cards
- Adopt DS rebrand tokens: Bricolage Grotesque display, IBM Plex Mono,
  ds color/type semantic tokens (theme-aware, works light + dark)
- Per-card eyebrow accents (terracotta/green/blue/purple) matching Figma
- Keep the proof visualizations; float them (no surface box) and scale
  them up to fill the media slot's footprint
- Drop the now-unused per-card icons and iconClassName field

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Design-system follow-ups on top of the rebrand:

- Palette: bridge legacy gray/twine to the warm DS neutral ramp in app.css so
  the whole site adopts the new palette; migrate the shared primitives (Button,
  Badge, FormInput, Tooltip) to semantic tokens.
- Typography: add semantic .h1-.h6 classes; move Font families to the top of
  /ds/typography and make the family cards minimal.
- MegaMenuItem: extract the mega-menu row into a reusable component matched to
  the Figma "Mega Menu Item" (bordered 44px icon, Bricolage-bold title, #aba594
  description, adaptive hover/press); wire it into the Navbar with 8px spacing
  between items.
- /ds/navbar: new Navbar DS page - anatomy preview with a device-size toggle
  (Auto/Mobile/iPad/Desktop) driven by container queries, plus a MegaMenuItem
  showcase. Add a "Design System" nav item under Support.
- Home: remove the "Browse the stack" section; restructure "Why TanStack" into
  four centered principle sections. Refine navbar spacing.
- Icons: finish the lucide->Phosphor migration (CheckCircleIcon->CheckCircle,
  CogsIcon->Gear); remove the orphaned custom icons.
- Spinner: remove the Palm spinner demo from /ds/spinner.
- Add @figma/code-connect dev dependency.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bump the shared DsPage wrapper from max-w-5xl (1024px) to max-w-7xl (1280px)
so all design-system pages use more horizontal space on wide screens (e.g. the
icon-migration grid no longer truncates names). Header stays left-aligned.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Resolve conflicts with the updated base:
- pnpm-lock.yaml: regenerated from the merged package.json (keeps @figma/
  code-connect plus the base's new deps).
- app.css: the base added a :root/:host block pinning grays to the original
  cool values (a layer-stability fix); updated it to the warm DS-neutral bridge
  values so the palette shift isn't reverted.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Migrate the libraries page to the rebrand design and turn it into a
temporary, navigational overlay opened over the current page instead of
its own route.

- New LibraryGridCard: dark rebrand cards, per-category Phosphor icon
  tint (icon brightens one DS shade on hover), squircle corners, instant
  (transition-less) hover, mono copy from each library's real description.
- LibrariesOverlay (Radix Dialog) + LibrariesOverlayContext: glass modal
  opened from the nav "Libraries" trigger, the "All Libraries" mega-menu
  item (now desktop too), and the home/404/breadcrumb CTAs. Backdrop
  click, Escape, and the close button dismiss it; it auto-closes on
  navigation.
- Framework pills filter the grid in place; selecting one shows the
  framework header/description inline.
- Staggered grid reveal animation.
- Remove the /libraries route and the /libraries/$framework sub-route
  (and now-unused LibraryCard); drop /libraries from the sitemap. Move
  browse utils to ~/libraries/browse-utils.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Match overlay tint to the mega-menu glass, as a reverse vignette
  (dark centre → ~60% rim) over the mega-menu blur.
- 150ms glass fade-in, then a row-staggered card reveal.
- Replace the wrapping framework pills with a DS Dropdown beside the
  title (default "All frameworks"; each framework as a menu item with a
  monochrome icon + count). Guard the dialog so selecting an item filters
  instead of dismissing the overlay.
- Move the close button to the fixed top-right corner (24px inset, 40px
  light-weight icon); soften card borders; monochrome framework icons.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Installed via `npx skills add kylezantos/design-motion-principles`.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…only SVGs

Continue the rebrand rollout by replacing the leftover old TanStack logos
with the new brand assets, and remove the unreferenced 193MB hero video.

- Extract emblem-only SVGs from the stacked logo's island path into
  public/images/brand/tanstack-emblem-{black,white,charcoal,cream}.svg
  (the rebrand set only shipped stacked/landscape, both with the wordmark).
- SearchModal AI-message avatar → emblem (theme-swapped black/white).
- Game coin texture → emblem-black.
- BrandContextMenu download menu → Landscape / Stacked / Emblem (black + white).
- brand-guide asset sections → Landscape / Stacked / Emblem in brand colors.
- login + oauth/authorize splash → emblem (theme-swapped).
- Remove unreferenced public/videos/hero.mp4 (193MB, never committed).
- launch.json: autoPort so the dev server falls back off a busy port 3000.

Left intentionally (separate follow-ups): homepage hero (redesign scope),
ShopHero3D 3D textures, and favicons/OG images (need PNG rasterization + a
mono-vs-color decision).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Brighten resting card name (70% -> 90%) so it reads as the headline
  without hover; use the short tagline (2-line clamp) instead of the full
  description; persistent "Docs ->" affordance + keyboard focus ring.
- Group cards under tinted category headers (Framework / Data & State /
  UI & UX / Performance / Tooling); stagger the reveal per section.
- Framework filter moves to a dropdown beside the title (stacks below on
  mobile); 20% translucent card fill across all breakpoints.
- Responsive: wider side margins on tablet-down, 16px card gutter, and a
  mobile "unified list" — each category a bordered, rounded squircle box
  with dividers between rows (standalone cards restored at sm+).
- Tighten the icon-to-name gap to 4px.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Lets the preview harness pick a free port (Vite honors PORT) instead of
colliding on 3000 with other worktrees/sessions.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Formatting-only reflow of two description lines (matches CI fix bb0fe1e).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…e DS work (#1040)

Replace the copy-pasted per-library landing pages with a single config-driven
LibraryLanding component, and convert Query (rich) and Ranger (lean) as the
first POC pages.

Landing:
- Shared LibraryLanding template (hero, why-grid, split sections, testimonials,
  ecosystem, CTA) driven by a per-library config + demo-panel slots
- De-noise: one exclamation-free CTA, drop superlative taglines, small TanStack
  mark stacked over a large product wordmark
- Repackage typography onto DS text-ds-* roles (drop font-black)
- ~30% more section padding, gutters, and column gap

Design system:
- Eyebrow component: mono-caps role, brand-by-category via --color-lib-* tokens,
  with a /ds/eyebrow style book
- Logos brand page (/ds/logos) with per-variant SVG downloads; Brand entry
  merged into a "Brand & Styles" nav section
- Button: add polymorphic `as` prop so it can render as a Link/anchor
- Lighten body type tokens (body xl/lg/md -> weight 300) + style-book labels
- Navbar library wordmark -> DS heading-4 in the display font

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…e DS work

Replace the copy-pasted per-library landing pages with a single config-driven
LibraryLanding component, and convert Query (rich) and Ranger (lean) as the
first POC pages.

Landing:
- Shared LibraryLanding template (hero, why-grid, split sections, testimonials,
  ecosystem, CTA) driven by a per-library config + demo-panel slots
- De-noise: one exclamation-free CTA, drop superlative taglines, small TanStack
  mark stacked over a large product wordmark
- Repackage typography onto DS text-ds-* roles (drop font-black)
- ~30% more section padding, gutters, and column gap

Design system:
- Eyebrow component: mono-caps role, brand-by-category via --color-lib-* tokens,
  with a /ds/eyebrow style book
- Logos brand page (/ds/logos) with per-variant SVG downloads; Brand entry
  merged into a "Brand & Styles" nav section
- Button: add polymorphic `as` prop so it can render as a Link/anchor
- Lighten body type tokens (body xl/lg/md -> weight 300) + style-book labels
- Navbar library wordmark -> DS heading-4 in the display font

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Abeuty and others added 24 commits July 28, 2026 13:28
…wport

The homepage adapter graph (w-320px scale-1.35 => 432px) pushed the page's
scroll width past the viewport, so the fixed mobile menu sized to the overflow
and its panels + Log In button were clipped off the right edge. Add
overflow-x-clip to the site-content wrapper so nothing widens the page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…l+focus

- Headline is bold at every breakpoint (font-bold — the display-sm/md tokens are
  weight 500).
- Desktop hero inset 40px on the sides (xl:px-10) with rounded-2xl corners.
- 'Start with a prompt' link button gains a right arrow and, on click, smooth-
  scrolls to the app starter and focuses/selects its prompt field (polling for
  the lazily-hydrated textarea).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Give the hero photo 8px padding on all sides (absolute inset-2 + rounded-xl)
so it reads as a framed image within the card.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Remove the .ts-mega-trigger::after underline; nav triggers now use the same
subtle hover fill as the mega-menu items (hover:bg-text-primary/[0.04]).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Descriptions previously wrapped in the 260px items (15/18 overflowed), which
broke the visual balance. Widen the item + section-grid columns to 330px and
force single-line subtext (whitespace-nowrap on desktop title + description).

Shortened the descriptions that still overflowed 330px so nothing wraps:
- Workshops:  "Remote and in-person sessions from maintainers." → "Live sessions from the maintainers."
- Discord:    "Community support and real-time discussion."     → "Real-time community support."
- Showcase:   "Products and teams building with TanStack."       → "Teams building with TanStack."
- Ethos:      "How we think about open source and products."     → "How we approach open source."
- Design System: "Logos, tokens, and components for TanStack surfaces." → "Logos, tokens, and UI components."

Verified live: 0/18 descriptions overflow at 330px (248px text column).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The card's overflow-hidden + rounded-2xl clipped the inset image's corners.
Drop them; the image now carries the shape: 8px inset (inset-2), rounded-[2rem]
with corner-shape:squircle.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add the subtle overlay states used by the other mega menus to the Libraries
  rows: hover white/4%, pressed white/12% (mode-adaptive via text-primary).
  Replaces the dead `surface-state-hover` class, which was never a defined
  token, so rows previously had no hover background at all.
- Space library rows 4px apart (gap-1) for a less cramped column.
- Center the "Browse all libraries" button in the menu footer.

Verified live: rows gap 4px, hover/pressed classes applied, button centered.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ips)

Replace the starter preset chips with a placeholder that rotates through the
suggestions in the empty prompt field. Shift+Enter accepts the shown suggestion
(or submits typed text) and reveals the builder options. submitCurrentInput now
takes an optional override so the placeholder can be submitted without a state
race. Applies to the home (full) layout; the compact layout keeps its chips.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drop xl:px-10 so the hero spans full width; the 8px squircle image frame
remains on all sides.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Wrap the hero <img> in an inset-2 div so the 8px frame is symmetric; the
  intrinsic-sized <img> was positioned at left:8 but kept full width, pushing
  its right edge 8px past the card (clipped).
- Height now scales with the viewport (h calc(100dvh - navbar)) capped at 720px
  (max-h) with a 560px floor, instead of a rigid 720px.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Toward the Figma StackBuilder progressive-disclosure design (809:2114):
- Heading reads 'Whatcha want to build?' on the home starter.
- Submit is now the TanStack brand rainbow-gradient 'Go ->' button (dark ink)
  instead of the emerald 'Next'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…abled state

- 'Copy Prompt' results CTA now uses the brand rainbow gradient (matching the
  Figma 'Copy Prompt to build this stack').
- Go button reads disabled (grayscale) until there's real input.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Home starter now matches the Figma StackBuilder resting look:
- Dark #0a0a0a surface with a terracotta glow; no header bar / PROMPT label /
  inner borders (all gated to context='home' so the builder page is unchanged).
- Centered Bricolage-light heading above the field.
- Prompt field starts empty so the rotating suggestion placeholder shows, with a
  quiet 'Press Shift + Enter' hint that yields to the gradient Go CTA on input.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…box, dissolving prompts

- Heading now floats above the box (Figma StackBuilder), not in a header bar.
- Box: 24px full-squircle corners + the Figma terracotta glow (0/21/39.2/-28).
- Rotating placeholder uses the short labels (Blank starter, Build a blog, …) in
  an animated overlay that gently dissolves out, then reveals the next
  left-to-right (CSS keyframes; sequenced so the previous is fully gone first;
  respects prefers-reduced-motion). Shift+Enter still submits the full prompt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…arger text

- Box background is the subtle surface (#171717) instead of #0a0a0a.
- 'Press Shift + Enter' hint sits lateral to the prompt text (top-right); once
  the user types, the gradient 'Go ->' CTA replaces it in that spot.
- Bump the prompt text to 16px and the hint to 14px (one level up).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Apply rebrand to library landing pages

* Make library landings bespoke

* Restore the AI hero graph

* Restore light and dark landing themes

* Align landing typography and category colors
Brings this session's work onto the branch:
- Category-colored Libraries mega menu (restored) with hover/pressed states,
  4px row spacing, centered "Browse all libraries".
- Support mega menu refined to Figma (boxed 32px icons, mono eyebrows, PARTNERS
  rail redesign) + widened 330px items with non-wrapping subtext.
- MegaMenuItem rest/hover/pressed states; mega-menu panel padding 40/36/32.
- DS StatsSection, homepage stats promotion, partners category bands.

Conflict resolution:
- app.css: kept this branch's (WIP) canonical palette; grafted the additive
  --color-text-menu-title token (neutral-tint-200 already present).
- MegaMenuItem.tsx: took the session version (32px boxed icon + states).
- Bespoke landings + library configs: kept this branch's WIP.
- QueryLanding: took the session/template-compatible version (the WIP copy used
  the pre-rebrand LandingAccent API).
- Wired the now-existing PixelSpinner export in ds/ui.
- pnpm install synced @tanstack/workflow-{core,runtime} to the merged lockfile.

Verified: tsc 0 errors, pnpm test 24/24 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tannerlinsley
tannerlinsley force-pushed the ds-rebrand-phosphor-icons branch from df9543e to ed9ef43 Compare July 28, 2026 19:36
@socket-security

socket-security Bot commented Jul 28, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​phosphor-icons/​react@​2.1.109410010080100
Added@​figma/​code-connect@​1.4.8981008297100

View full report

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