From f0de7980a182f567340b806601169e075fb5d3bf Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 16:10:25 -0500 Subject: [PATCH 1/9] clean up supporters page: match carousel style, add NVIDIA/AMD logos, brand highlighting --- packages/app/public/logos/amd.svg | 1 + packages/app/public/logos/nvidia.svg | 1 + .../src/components/quotes/quotes-content.tsx | 67 +++++++++++++++---- .../app/src/components/quotes/quotes-data.ts | 5 ++ 4 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 packages/app/public/logos/amd.svg create mode 100644 packages/app/public/logos/nvidia.svg diff --git a/packages/app/public/logos/amd.svg b/packages/app/public/logos/amd.svg new file mode 100644 index 00000000..fb891572 --- /dev/null +++ b/packages/app/public/logos/amd.svg @@ -0,0 +1 @@ +AMD \ No newline at end of file diff --git a/packages/app/public/logos/nvidia.svg b/packages/app/public/logos/nvidia.svg new file mode 100644 index 00000000..0197daf7 --- /dev/null +++ b/packages/app/public/logos/nvidia.svg @@ -0,0 +1 @@ +NVIDIA \ No newline at end of file diff --git a/packages/app/src/components/quotes/quotes-content.tsx b/packages/app/src/components/quotes/quotes-content.tsx index b3bc8c97..edafd0fe 100644 --- a/packages/app/src/components/quotes/quotes-content.tsx +++ b/packages/app/src/components/quotes/quotes-content.tsx @@ -1,32 +1,73 @@ 'use client'; import { Card } from '@/components/ui/card'; +import { useState } from 'react'; import { QUOTES } from './quotes-data'; +function highlightBrand(text: string) { + const parts = text.split(/(InferenceMAX™?|InferenceX™?|InferenceMAX|InferenceX)/gi); + return parts.map((part, i) => + /^inference(max|x)/i.test(part) ? ( + + {part} + + ) : ( + part + ), + ); +} + +function CompanyLogo({ company, logo }: { company: string; logo?: string }) { + const [failed, setFailed] = useState(false); + + if (!logo || failed) { + return ( +
+ {company[0]} +
+ ); + } + + return ( + {company} setFailed(true)} + /> + ); +} + function QuoteCard({ text, name, title, + company, + logo, link, }: { text: string; name: string; title: string; + company: string; + logo?: string; link?: string; }) { const content = ( - -
-

- “{text}” -

- -
-
+
+

+ “{highlightBrand(text)}” +

+ +
); if (link) { @@ -61,13 +102,15 @@ export function QuotesContent() {

-
+
{QUOTES.map((quote) => ( ))} diff --git a/packages/app/src/components/quotes/quotes-data.ts b/packages/app/src/components/quotes/quotes-data.ts index 54a0ba84..4b228fa6 100644 --- a/packages/app/src/components/quotes/quotes-data.ts +++ b/packages/app/src/components/quotes/quotes-data.ts @@ -20,30 +20,35 @@ export const QUOTES: Quote[] = [ name: 'Dr. Lisa Su', title: 'Chair and CEO, AMD', company: 'AMD', + logo: 'amd.svg', }, { text: "Inference demand is growing exponentially, driven by long-context reasoning. NVIDIA Grace Blackwell NVL72 was invented for this new era of thinking AI. NVIDIA is meeting that demand through constant hardware and software innovation to enable what's next in AI. By benchmarking frequently, InferenceMAX\u2122 gives the industry a transparent view of LLM inference performance on real-world workloads. The results are clear: Grace Blackwell NVL72 with TRT-LLM and Dynamo delivers unmatched performance per dollar and per megawatt\u2014powering the most productive and cost-effective AI factories in the world.", name: 'Jensen Huang', title: 'Founder & CEO, NVIDIA', company: 'NVIDIA', + logo: 'nvidia.svg', }, { text: "Speed is the moat. InferenceMAX\u2122's nightly benchmarks match the speed of improvement of the AMD software stack. It's fantastic to see AMD's MI300, MI325, and MI355 GPUs performing so well across diverse workloads and interactivity levels.", name: 'Anush Elangovan', title: 'VP GPU Software, AMD', company: 'AMD', + logo: 'amd.svg', }, { text: 'InferenceMAX\u2122 highlights workloads that the ML community cares about. At NVIDIA, we welcome these comparisons because they underscore the advantage of our full-stack approach\u2014from GPUs hardware to NVLink networking to NVL72 Rack Scale to Dynamo disaggregated serving that consistently delivers industry-leading inference performance and ROI at scale.', name: 'Ian Buck', title: 'VP & GM, Hyperscale, NVIDIA & Inventor of CUDA', company: 'NVIDIA', + logo: 'nvidia.svg', }, { text: "InferenceMAX\u2122's nightly results highlight the rapid pace of progress in the AMD software stack. It's exciting to witness the birth of an open project that provides a tied feedback loop between what the software team works on here at AMD and how it affects specific ML use cases across our MI300, MI325, and MI355 GPUs. I'm looking forward to see what's next for InferenceMAX and to showcase what the AMD platform can do. AMD GPUs will continue to get faster every week.", name: 'Quentin Colombet', title: 'Senior Director, AMD, Ex-Brium CEO', company: 'AMD', + logo: 'amd.svg', }, { text: "Our mission at Azure is to give customers the most performant, efficient, and cost-effective cloud for AI. SemiAnalysis InferenceMAX\u2122 supports that mission by providing transparent, reproducible benchmarks that track inference performance across GPUs and software stacks under realistic workloads. This continuous data on throughput, efficiency, and cost per watt strengthens our ability to tune Azure's inference platform for scale, helping customers build with confidence on Microsoft Cloud.", From cd88a5c061ed5eab271bc5b278aef7b422b49835 Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 16:21:53 -0500 Subject: [PATCH 2/9] dedupe CompanyLogo and highlightBrand into shared quote-utils --- .../app/src/components/quote-carousel.tsx | 37 +------------------ .../app/src/components/quotes/quote-utils.tsx | 37 +++++++++++++++++++ .../src/components/quotes/quotes-content.tsx | 36 +----------------- 3 files changed, 40 insertions(+), 70 deletions(-) create mode 100644 packages/app/src/components/quotes/quote-utils.tsx diff --git a/packages/app/src/components/quote-carousel.tsx b/packages/app/src/components/quote-carousel.tsx index a393c56f..e8cbb843 100644 --- a/packages/app/src/components/quote-carousel.tsx +++ b/packages/app/src/components/quote-carousel.tsx @@ -3,6 +3,7 @@ import { useCallback, useEffect, useRef, useState } from 'react'; import { track } from '@/lib/analytics'; +import { CompanyLogo, highlightBrand } from '@/components/quotes/quote-utils'; export interface CarouselQuote { text: string; @@ -63,40 +64,6 @@ function buildCompanyQuotes(quotes: CarouselQuote[], order?: string[]): CompanyE return shuffleArray(entries); } -function CompanyLogo({ quote }: { quote: CarouselQuote }) { - const [failed, setFailed] = useState(false); - - if (!quote.logo || failed) { - return ( -
- {quote.company[0]} -
- ); - } - - return ( - {quote.company} setFailed(true)} - /> - ); -} - -function highlightBrand(text: string) { - const parts = text.split(/(InferenceMAX™?|InferenceX™?|InferenceMAX|InferenceX)/gi); - return parts.map((part, i) => - /^inference(max|x)/i.test(part) ? ( - - {part} - - ) : ( - part - ), - ); -} - function QuoteBlock({ quote }: { quote: CarouselQuote }) { return (
@@ -104,7 +71,7 @@ function QuoteBlock({ quote }: { quote: CarouselQuote }) { “{highlightBrand(quote.text)}”

- +
{quote.name} diff --git a/packages/app/src/components/quotes/quote-utils.tsx b/packages/app/src/components/quotes/quote-utils.tsx new file mode 100644 index 00000000..94798379 --- /dev/null +++ b/packages/app/src/components/quotes/quote-utils.tsx @@ -0,0 +1,37 @@ +'use client'; + +import { useState } from 'react'; + +export function CompanyLogo({ company, logo }: { company: string; logo?: string }) { + const [failed, setFailed] = useState(false); + + if (!logo || failed) { + return ( +
+ {company[0]} +
+ ); + } + + return ( + {company} setFailed(true)} + /> + ); +} + +export function highlightBrand(text: string) { + const parts = text.split(/(InferenceMAX™?|InferenceX™?|InferenceMAX|InferenceX)/gi); + return parts.map((part, i) => + /^inference(max|x)/i.test(part) ? ( + + {part} + + ) : ( + part + ), + ); +} diff --git a/packages/app/src/components/quotes/quotes-content.tsx b/packages/app/src/components/quotes/quotes-content.tsx index edafd0fe..ea1abe66 100644 --- a/packages/app/src/components/quotes/quotes-content.tsx +++ b/packages/app/src/components/quotes/quotes-content.tsx @@ -1,44 +1,10 @@ 'use client'; import { Card } from '@/components/ui/card'; -import { useState } from 'react'; +import { CompanyLogo, highlightBrand } from './quote-utils'; import { QUOTES } from './quotes-data'; -function highlightBrand(text: string) { - const parts = text.split(/(InferenceMAX™?|InferenceX™?|InferenceMAX|InferenceX)/gi); - return parts.map((part, i) => - /^inference(max|x)/i.test(part) ? ( - - {part} - - ) : ( - part - ), - ); -} - -function CompanyLogo({ company, logo }: { company: string; logo?: string }) { - const [failed, setFailed] = useState(false); - - if (!logo || failed) { - return ( -
- {company[0]} -
- ); - } - - return ( - {company} setFailed(true)} - /> - ); -} - function QuoteCard({ text, name, From 184cdb1f8959c22667d164e78d2a9ea04c4e98af Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 16:29:44 -0500 Subject: [PATCH 3/9] add Prime Intellect quote and logo --- packages/app/public/logos/prime-intellect.svg | 18 ++++++++++++++++++ .../app/src/components/quotes/quotes-data.ts | 7 +++++++ 2 files changed, 25 insertions(+) create mode 100644 packages/app/public/logos/prime-intellect.svg diff --git a/packages/app/public/logos/prime-intellect.svg b/packages/app/public/logos/prime-intellect.svg new file mode 100644 index 00000000..94f66bf5 --- /dev/null +++ b/packages/app/public/logos/prime-intellect.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/packages/app/src/components/quotes/quotes-data.ts b/packages/app/src/components/quotes/quotes-data.ts index 4b228fa6..dcfefcfd 100644 --- a/packages/app/src/components/quotes/quotes-data.ts +++ b/packages/app/src/components/quotes/quotes-data.ts @@ -156,4 +156,11 @@ export const QUOTES: Quote[] = [ company: 'Vultr', logo: 'vultr.svg', }, + { + text: "At Prime Intellect, we're pushing the frontier of AI post-training and open research. InferenceX\u2122 complements that work by providing open, reproducible benchmarks that track real-world inference performance across hardware and software stacks as they evolve. For researchers like us, having transparent, continuously updated data on throughput and efficiency means we can focus on building better models instead of second-guessing infrastructure. This is the kind of community-driven effort that accelerates progress for everyone.", + name: 'Jack Min Ong', + title: 'Researcher, Prime Intellect', + company: 'Prime Intellect', + logo: 'prime-intellect.svg', + }, ]; From 2d3e8b9f992ac4f06bf1479ebd04f922a53bf3f5 Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 16:33:39 -0500 Subject: [PATCH 4/9] use flex-wrap with justify-evenly for company names on narrow screens --- packages/app/src/components/quote-carousel.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app/src/components/quote-carousel.tsx b/packages/app/src/components/quote-carousel.tsx index e8cbb843..c0cd662d 100644 --- a/packages/app/src/components/quote-carousel.tsx +++ b/packages/app/src/components/quote-carousel.tsx @@ -172,8 +172,8 @@ export function QuoteCarousel({ ))}
- {/* Company logo strip — same shuffled order as cycling */} -
+ {/* Company logo strip */} +
{entries.map((e, i) => (
- {moreHref && ( +
+ + {moreHref && ( + +
+ )}
); } From 99796068e4d5ec14e810bb75fba219965545715a Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 16:43:53 -0500 Subject: [PATCH 6/9] fix carousel height measurement by placing hidden container inside visible one --- .../app/src/components/quote-carousel.tsx | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/packages/app/src/components/quote-carousel.tsx b/packages/app/src/components/quote-carousel.tsx index bb10c626..b217e81d 100644 --- a/packages/app/src/components/quote-carousel.tsx +++ b/packages/app/src/components/quote-carousel.tsx @@ -158,20 +158,6 @@ export function QuoteCarousel({ return (
- {/* Hidden measurement container — renders all quotes to find tallest */} -
- {entries.map((e) => ( -
- -
- ))} -
- {/* Company logo strip */}
{entries.map((e, i) => ( @@ -191,7 +177,20 @@ export function QuoteCarousel({
{/* Visible quote — fixed height from measurement */} -
+
+ {/* Hidden measurement — same width as this container */} +
+ {entries.map((e) => ( +
+ +
+ ))} +
From 7be5b32fafb88f7288cc79e8a474ca89f8e3afdf Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 16:44:24 -0500 Subject: [PATCH 7/9] reduce mobile gap between intro section and chart tabs --- packages/app/src/components/page-content.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/components/page-content.tsx b/packages/app/src/components/page-content.tsx index 25f5fbf2..78c6930c 100644 --- a/packages/app/src/components/page-content.tsx +++ b/packages/app/src/components/page-content.tsx @@ -252,7 +252,7 @@ export function PageContent({ initialTab = 'inference' }: { initialTab?: string
-
+

From 1627ba3c10c8cda2de82c69bc11082ca8669e6d7 Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 16:44:37 -0500 Subject: [PATCH 8/9] show tab dropdown up to lg breakpoint instead of sm --- packages/app/src/components/page-content.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app/src/components/page-content.tsx b/packages/app/src/components/page-content.tsx index 78c6930c..ed08971c 100644 --- a/packages/app/src/components/page-content.tsx +++ b/packages/app/src/components/page-content.tsx @@ -109,7 +109,7 @@ function ChartTabs({ initialTab }: { initialTab: string }) { return ( {/* Mobile: Dropdown */} -
+
@@ -149,7 +149,7 @@ function ChartTabs({ initialTab }: { initialTab: string }) {
{/* Desktop: Tabs */} - + Date: Fri, 20 Mar 2026 16:50:07 -0500 Subject: [PATCH 9/9] fix carousel height: use CSS grid overlay instead of JS measurement --- .../app/src/components/quote-carousel.tsx | 56 +++++-------------- 1 file changed, 13 insertions(+), 43 deletions(-) diff --git a/packages/app/src/components/quote-carousel.tsx b/packages/app/src/components/quote-carousel.tsx index b217e81d..7a1a0566 100644 --- a/packages/app/src/components/quote-carousel.tsx +++ b/packages/app/src/components/quote-carousel.tsx @@ -93,8 +93,6 @@ export function QuoteCarousel({ const [entries, setEntries] = useState([]); const [activeIndex, setActiveIndex] = useState(0); const [fading, setFading] = useState(false); - const [measuredHeight, setMeasuredHeight] = useState(0); - const measureRef = useRef(null); const timerRef = useRef | null>(null); // Build shuffled company order on mount (client only) @@ -102,25 +100,6 @@ export function QuoteCarousel({ setEntries(buildCompanyQuotes(quotes, order)); }, [quotes, order]); - // Measure tallest quote and update on resize - useEffect(() => { - const el = measureRef.current; - if (!el) return; - const measure = () => { - const children = el.children; - let max = 0; - for (let i = 0; i < children.length; i++) { - const h = (children[i] as HTMLElement).offsetHeight; - if (h > max) max = h; - } - setMeasuredHeight(max); - }; - measure(); - const observer = new ResizeObserver(measure); - observer.observe(el); - return () => observer.disconnect(); - }, [entries.length]); - const advance = useCallback(() => { setFading(true); setTimeout(() => { @@ -154,8 +133,6 @@ export function QuoteCarousel({ if (entries.length === 0) return null; - const current = entries[activeIndex]; - return (
{/* Company logo strip */} @@ -176,26 +153,19 @@ export function QuoteCarousel({ ))}
- {/* Visible quote — fixed height from measurement */} -
- {/* Hidden measurement — same width as this container */} -
- {entries.map((e) => ( -
- -
- ))} -
-
- -
+ {/* All quotes stacked in same grid cell — tallest sets height */} +
+ {entries.map((e, i) => ( +
+ +
+ ))}
{moreHref && (