Skip to content

web: port ClusterMAX quote carousel — logo strip + inline quote icon#394

Open
samharshe wants to merge 1 commit into
SemiAnalysisAI:masterfrom
samharshe:feat/quote-carousel-logo-strip
Open

web: port ClusterMAX quote carousel — logo strip + inline quote icon#394
samharshe wants to merge 1 commit into
SemiAnalysisAI:masterfrom
samharshe:feat/quote-carousel-logo-strip

Conversation

@samharshe
Copy link
Copy Markdown

@samharshe samharshe commented May 27, 2026

Mirrors the carousel redesign from SemiAnalysisAI/clustermax#201 so the two public sites stay consistent.

Changes

  • Carousel: Replaced the uppercase org-name pseudo-tab strip with a clickable infinite-marquee logo strip. Active logo lights up + gets bg-accent/60; inactive are grayscale @ 50% opacity. Falls back to uppercase name when a quote has no logo. Auto-rotates every 8s, pauses on hover/focus, respects prefers-reduced-motion.
  • Layout: Split the bottom of the card into an active-author block (left, with logo + brand bar + name/title + external-link icon) and the existing 'See more supporters →' link (right), aligned to the same baseline.
  • Quote icon: Moved out of the IntroSection heading and inline with the quotation paragraph itself, matching the ClusterMAX fix.
  • Unitalicized the long-form quote on /quotes (Sam's rule: long-form text should never be italic; carousel was already non-italic).
  • globals.css: Added @keyframes marquee + .animate-marquee helpers (hover/focus pause, reduced-motion off).

Files touched

4 files, +147/−52

  • packages/app/src/components/quote-carousel.tsx
  • packages/app/src/components/intro-section.tsx
  • packages/app/src/components/quotes/quotes-content.tsx
  • packages/app/src/app/globals.css

Verification

  • pnpm typecheck
  • pnpm lint ✅ (0 warnings, 0 errors)
  • pnpm build compiled successfully; only failure was the unrelated DATABASE_READONLY_URL runtime data-collection step (presentation-layer changes don't touch it — clean in Vercel where env vars are set)

Branding notes

Kept InferenceX tokens (text-brand/bg-brand/focus-visible:ring-brand/40) instead of ClusterMAX's primary everywhere, and kept InferenceX's analytics track() calls + ExternalLinkIcon + shared CompanyLogo/highlightBrand helpers in @/components/quotes/quote-utils.


Note

Low Risk
Presentation-only marketing UI (CSS + carousel components); no auth, data, or API changes.

Overview
Redesigns the home intro quote carousel to match the ClusterMAX carousel: the uppercase org-name tabs become a clickable infinite-marquee logo strip (duplicated row + -50% translate in globals.css), with active logos highlighted and inactive ones grayscale at reduced opacity, plus hover/focus pause and prefers-reduced-motion off.

Quote layout splits body and attribution: the quote icon moves from the IntroSection heading into the carousel quote line; author block (logo, bar, name/title) sits bottom-left with See more supporters bottom-right on one row. Long-form quotes on /quotes drop italic styling for consistency.

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

Mirrors the carousel redesign from SemiAnalysisAI/ClusterMAX#201 so the two
public sites stay consistent.

- Carousel: replace the uppercase org-name pseudo-tab strip with a clickable
  infinite-marquee logo strip. Active logo lights up + gets bg-accent/60;
  inactive are grayscale @ 50% opacity. Falls back to uppercase name when a
  quote has no logo. Auto-rotates every 8s, pauses on hover/focus, respects
  prefers-reduced-motion.
- Layout: split the bottom of the card into an active-author block (left,
  with logo + brand bar + name/title + external-link icon) and the existing
  'See more supporters →' link (right), aligned to the same baseline.
- Quote icon: moved out of the IntroSection heading and inline with the
  quotation paragraph itself, matching the ClusterMAX fix.
- Unitalicized the long-form quote on /quotes (Sam's rule: long-form text
  should never be italic; carousel was already non-italic).
- globals.css: add @Keyframes marquee + .animate-marquee helpers.
@vercel
Copy link
Copy Markdown

vercel Bot commented May 27, 2026

@samharshe is attempting to deploy a commit to the SemiAnalysisAI Team on Vercel.

A member of the Team first needs to authorize it.

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 3 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2042ef8. Configure here.

Each set carries `pr-5` so the trailing gap is baked into the 50%
translate, keeping the loop seamless. */}
<div className="overflow-hidden">
<div className="flex w-max animate-marquee">
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Marquee and quote pause diverge

Medium Severity

The quote carousel's auto-advance and logo marquee animations pause independently. The quote rotation pauses on hover of the entire carousel, while the logo strip only pauses on hover or focus of the marquee element itself. This leads to scenarios where one component pauses while the other continues, creating an inconsistent user experience.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 2042ef8. Configure here.

isActive ? 'grayscale-0 dark:invert' : 'grayscale dark:invert'
}`}
loading="lazy"
/>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Strip logos lack error fallback

Low Severity

The marquee strip renders sponsor logos with a plain img and no onError handler, while the active author row below uses CompanyLogo, which swaps to initials when the asset fails. A missing or broken file can show a broken image in the strip next to a correct fallback in the author block.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 2042ef8. Configure here.

@media (prefers-reduced-motion: reduce) {
.animate-marquee {
animation: none;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Reduced motion ignores quote rotation

Medium Severity

The new prefers-reduced-motion rule disables only the logo marquee animation. The carousel still runs its 8s setInterval advance and 300ms opacity fades, so users who request reduced motion see a static strip but quotes keep changing—contrary to the PR’s stated reduced-motion support for the carousel.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 2042ef8. Configure here.

@vercel
Copy link
Copy Markdown

vercel Bot commented May 27, 2026

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

Project Deployment Actions Updated (UTC)
inferencemax-app Ready Ready Preview, Comment May 27, 2026 1:37am

Request Review

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