From 7135982fe003038a91dc31ac64f93a23a98977e1 Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:08:20 -0500 Subject: [PATCH 1/7] add auto-rotating quote carousel with company logos below intro section --- packages/app/public/logos/coreweave.svg | 19 ++ packages/app/public/logos/crusoe.svg | 9 + packages/app/public/logos/gpu-mode.png | Bin 0 -> 2689 bytes packages/app/public/logos/microsoft.svg | 1 + packages/app/public/logos/nebius.svg | 4 + packages/app/public/logos/openai.svg | 1 + packages/app/public/logos/oracle.svg | 1 + packages/app/public/logos/pytorch.svg | 1 + packages/app/public/logos/supermicro.svg | 1 + packages/app/public/logos/tensorwave.svg | 13 ++ packages/app/public/logos/together-ai.svg | 1 + packages/app/public/logos/vllm.svg | 1 + packages/app/public/logos/vultr.svg | 1 + packages/app/src/components/page-content.tsx | 4 + .../app/src/components/quote-carousel.tsx | 208 ++++++++++++++++++ .../app/src/components/quotes/quotes-data.ts | 22 ++ 16 files changed, 287 insertions(+) create mode 100644 packages/app/public/logos/coreweave.svg create mode 100644 packages/app/public/logos/crusoe.svg create mode 100644 packages/app/public/logos/gpu-mode.png create mode 100644 packages/app/public/logos/microsoft.svg create mode 100644 packages/app/public/logos/nebius.svg create mode 100644 packages/app/public/logos/openai.svg create mode 100644 packages/app/public/logos/oracle.svg create mode 100644 packages/app/public/logos/pytorch.svg create mode 100644 packages/app/public/logos/supermicro.svg create mode 100644 packages/app/public/logos/tensorwave.svg create mode 100644 packages/app/public/logos/together-ai.svg create mode 100644 packages/app/public/logos/vllm.svg create mode 100644 packages/app/public/logos/vultr.svg create mode 100644 packages/app/src/components/quote-carousel.tsx diff --git a/packages/app/public/logos/coreweave.svg b/packages/app/public/logos/coreweave.svg new file mode 100644 index 00000000..f6f954f1 --- /dev/null +++ b/packages/app/public/logos/coreweave.svg @@ -0,0 +1,19 @@ + + + + + + + + + + \ No newline at end of file diff --git a/packages/app/public/logos/crusoe.svg b/packages/app/public/logos/crusoe.svg new file mode 100644 index 00000000..8fd91800 --- /dev/null +++ b/packages/app/public/logos/crusoe.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/app/public/logos/gpu-mode.png b/packages/app/public/logos/gpu-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..2457307a8bc0eaeca9572f1c62b4347d94f2000c GIT binary patch literal 2689 zcmd^>`9Bkm1IAZAK1nG)Xhjj_s4xt3G;+mUIb%5zA?GkzYadpLIf@wCkUL8wFfQ?%-F}hJz-VTstml!ZneUw_>2X^Z>5fuH0;knF z*4D@1qIkV-_mK6S?6IyW4?I={^?U4Y8l(<`!6eB5_ytZlUR1JuO1Z&LJ1YLaURuJT zPfro3xU9oG89bUDIV^?wwoL`_${9Z{YSfPy~ zYdKh6=hP{CA(MCPumiNJfay7s$#u4_qCV=MYMd%xjsPr}r8wjT#*l%dCQv0R8i(32 zCtQ-!Un^&fEEaiz%VLFZ&llFF@K4+v$g3O;MVI#1-CAmkcfo9>58Sod&fiKKQI64d z&2D!Zaiv>KJ{OlX$jr^n<;qEk61#*VX9N+O(sY!(#q2Fn68al2<}3NR8H$nyEQAdrjybI)}%cNdKy2fkS#w%=IL^8hhH4H_E zp4{11K8~v;FhZBkRn1=Rwl(?KG_lC&Mk{;WgG;hQZwyx>RttOds)!^FEwts`lMn4v zMawBGn>?Sq3}HsUpE2>4`dT+SoNeNZoBhVRKM9WHc*LSj&1+~|9+)@!+Dp8z>KJ`t z=|&C$(UrWR0Bp(yFN|*v)`UrFQv0g<*z@vc$zxXxBAgrF>ozLJj|Y0HfHbF~Tim8V z_|oHy=C%f)M~S6Sc~QnrGIYD~IW7p>c5uL@_y+#%OjJ8<%lneEr6JkW&|mw}x5=HF z(BMej1H7`R(Te>Z{O5K=>iLT2bM@Z9r!@JFg>D2w;%g)6`s+YCm7hOz zX*n}tI8buL+LxZ>tQ)m=5Cn4=s8sPpjev7z|EsI4ZMBleg}-;*7%0V=wZKGgkWz8< zFzg9RN-x|xZkY64xZJv6Z|lHu9GngDBM={R!oRTVZ5PB(`Oc5wT0Gz(aT5}}C_nZ> zDI%}EQJ-$pLc4mcy1T9Xy+WD@?p^DJ10$(Igh&_<7!<%K(R5`|p^0!n$ z$|WMryR+~23ox9*P473F^lXu4BR4zy?#j+YvWs2voSjQSSZi{j0*MQg3xOVFi~IC$ zp^v{l>(uOwTDY}ohH-dT@UH#3=F7D6xck0~$a3(*wBNIG?)ufYjqXRQzHLi~83JpT zwIF8m-U0l;Ok`V+#xz$f+sSvnBDrKdmT3?+IbslV>21#bdr$X@4XxOiGTo?ncDY8z zC+*v}1wl&vdr1H+Nr$Aj+?2hIliQY$g&-oSLaxYN z;wh1tQP#l7*+(5Lprd?x>a!C``T^;t*B*RbNrptqI%0pQbTQ2y5ZZg;zYcwn({e@Z zBP80G*gy543g+F4Gl3QR!q4N~8iGjB;FR2zXa2=pw*mpU?It zoLkSX2S3=b&S}-Nfejb!IUEx&uij;-t!QsfRg%X(;{#tL$W1cQ<->-aTBgT&MlIDp z(Rc7KbiPi)#HxDy-3700v^#%jOZ@Aq)WvmA>Hiz5;hhEmc)U!JlcTmZu|amiT)B literal 0 HcmV?d00001 diff --git a/packages/app/public/logos/microsoft.svg b/packages/app/public/logos/microsoft.svg new file mode 100644 index 00000000..86b5ac6c --- /dev/null +++ b/packages/app/public/logos/microsoft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/app/public/logos/nebius.svg b/packages/app/public/logos/nebius.svg new file mode 100644 index 00000000..12b3cdcb --- /dev/null +++ b/packages/app/public/logos/nebius.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/app/public/logos/openai.svg b/packages/app/public/logos/openai.svg new file mode 100644 index 00000000..2ebab679 --- /dev/null +++ b/packages/app/public/logos/openai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/app/public/logos/oracle.svg b/packages/app/public/logos/oracle.svg new file mode 100644 index 00000000..0981dfcf --- /dev/null +++ b/packages/app/public/logos/oracle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/app/public/logos/pytorch.svg b/packages/app/public/logos/pytorch.svg new file mode 100644 index 00000000..d3c1b4f8 --- /dev/null +++ b/packages/app/public/logos/pytorch.svg @@ -0,0 +1 @@ +PyTorch \ No newline at end of file diff --git a/packages/app/public/logos/supermicro.svg b/packages/app/public/logos/supermicro.svg new file mode 100644 index 00000000..e38fdb0f --- /dev/null +++ b/packages/app/public/logos/supermicro.svg @@ -0,0 +1 @@ +Supermicro \ No newline at end of file diff --git a/packages/app/public/logos/tensorwave.svg b/packages/app/public/logos/tensorwave.svg new file mode 100644 index 00000000..e6926f9e --- /dev/null +++ b/packages/app/public/logos/tensorwave.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/app/public/logos/together-ai.svg b/packages/app/public/logos/together-ai.svg new file mode 100644 index 00000000..c94f08d4 --- /dev/null +++ b/packages/app/public/logos/together-ai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/app/public/logos/vllm.svg b/packages/app/public/logos/vllm.svg new file mode 100644 index 00000000..6b9e5d1d --- /dev/null +++ b/packages/app/public/logos/vllm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/app/public/logos/vultr.svg b/packages/app/public/logos/vultr.svg new file mode 100644 index 00000000..f9059b31 --- /dev/null +++ b/packages/app/public/logos/vultr.svg @@ -0,0 +1 @@ +Vultr \ No newline at end of file diff --git a/packages/app/src/components/page-content.tsx b/packages/app/src/components/page-content.tsx index 5688bd60..99874353 100644 --- a/packages/app/src/components/page-content.tsx +++ b/packages/app/src/components/page-content.tsx @@ -27,6 +27,7 @@ import { SelectValue, } from '@/components/ui/select'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; +import { QuoteCarousel } from '@/components/quote-carousel'; import { UnofficialRunProvider } from '@/components/unofficial-run-provider'; import { getTabTitle, isValidTab } from '@/lib/tab-meta'; @@ -298,6 +299,9 @@ export function PageContent({ initialTab = 'inference' }: { initialTab?: string .

+
+ +
diff --git a/packages/app/src/components/quote-carousel.tsx b/packages/app/src/components/quote-carousel.tsx new file mode 100644 index 00000000..48e8a55a --- /dev/null +++ b/packages/app/src/components/quote-carousel.tsx @@ -0,0 +1,208 @@ +'use client'; + +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; + +import { track } from '@/lib/analytics'; + +import { type Quote, QUOTES } from './quotes/quotes-data'; + +const COMPANY_LOGO_FILE: Record = { + OpenAI: 'openai.svg', + Microsoft: 'microsoft.svg', + 'Together AI': 'together-ai.svg', + vLLM: 'vllm.svg', + 'GPU Mode': 'gpu-mode.png', + 'PyTorch Foundation': 'pytorch.svg', + Oracle: 'oracle.svg', + CoreWeave: 'coreweave.svg', + Nebius: 'nebius.svg', + Crusoe: 'crusoe.svg', + Supermicro: 'supermicro.svg', + TensorWave: 'tensorwave.svg', + Vultr: 'vultr.svg', +}; + +const EXCLUDED_COMPANIES = new Set(['NVIDIA', 'AMD']); +const ROTATE_INTERVAL_MS = 10_000; + +function shuffleArray(arr: T[]): T[] { + const shuffled = [...arr]; + for (let i = shuffled.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]; + } + return shuffled; +} + +/** Group quotes by company, pick one random quote per company, shuffle company order. */ +function buildCompanyQuotes(quotes: Quote[]): { company: string; quote: Quote }[] { + const byCompany = new Map(); + for (const q of quotes) { + const list = byCompany.get(q.company); + if (list) list.push(q); + else byCompany.set(q.company, [q]); + } + const entries = [...byCompany.entries()].map(([company, pool]) => ({ + company, + quote: pool[Math.floor(Math.random() * pool.length)], + })); + return shuffleArray(entries); +} + +function CompanyLogo({ company }: { company: string }) { + const [failed, setFailed] = useState(false); + const file = COMPANY_LOGO_FILE[company]; + + if (!file || failed) { + return ( +
+ {company[0]} +
+ ); + } + + return ( + {company} setFailed(true)} + /> + ); +} + +function QuoteBlock({ quote }: { quote: Quote }) { + return ( +
+

+ “{quote.text}” +

+
+ +
+
+ {quote.name} + {quote.title} +
+
+
+ ); +} + +export function QuoteCarousel() { + const filteredQuotes = useMemo( + () => QUOTES.filter((q) => !EXCLUDED_COMPANIES.has(q.company)), + [], + ); + + const [entries, setEntries] = useState<{ company: string; quote: Quote }[]>([]); + 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) + useEffect(() => { + setEntries(buildCompanyQuotes(filteredQuotes)); + }, [filteredQuotes]); + + // 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(() => { + setActiveIndex((prev) => (prev + 1) % (entries.length || 1)); + setFading(false); + }, 300); + }, [entries.length]); + + // Auto-rotate + useEffect(() => { + if (entries.length <= 1) return; + timerRef.current = setInterval(advance, ROTATE_INTERVAL_MS); + return () => { + if (timerRef.current) clearInterval(timerRef.current); + }; + }, [advance, entries.length]); + + const goTo = useCallback( + (index: number) => { + if (timerRef.current) clearInterval(timerRef.current); + setFading(true); + setTimeout(() => { + setActiveIndex(index); + setFading(false); + }, 300); + timerRef.current = setInterval(advance, ROTATE_INTERVAL_MS); + track('quote_carousel_navigated'); + }, + [advance], + ); + + if (entries.length === 0) return null; + + const current = entries[activeIndex]; + + return ( +
+ {/* Hidden measurement container — renders all quotes to find tallest */} +
+ {entries.map((e) => ( +
+ +
+ ))} +
+ + {/* Company logo strip — same shuffled order as cycling */} +
+ {entries.map((e, i) => ( + + ))} +
+ + {/* Visible quote — fixed height from measurement */} +
+
+ +
+
+
+ ); +} diff --git a/packages/app/src/components/quotes/quotes-data.ts b/packages/app/src/components/quotes/quotes-data.ts index 0ca4a3bb..fa701837 100644 --- a/packages/app/src/components/quotes/quotes-data.ts +++ b/packages/app/src/components/quotes/quotes-data.ts @@ -2,6 +2,7 @@ export interface Quote { text: string; name: string; title: string; + company: string; link?: string; } @@ -10,106 +11,127 @@ export const QUOTES: Quote[] = [ text: "As we build systems at unprecedented scale, it's critical for the ML community to have open, transparent benchmarks that reflect how inference really performs across hardware and software. InferenceMAX\u2122's head-to-head benchmarks cut through the noise and provide a living picture of token throughput, performance per dollar, and tokens per Megawatt. This kind of open source effort strengthens the entire ecosystem and helps everyone, from researchers to operators of frontier datacenters, make smarter decisions.", name: 'Peter Hoeschele', title: 'VP of Infrastructure and Industrial Compute, OpenAI Stargate', + company: 'OpenAI', }, { text: 'Open collaboration is driving the next era of AI innovation. The open-source InferenceMAX benchmark gives the community transparent, nightly results that inspire trust and accelerate progress. It highlights the competitive TCO performance of our AMD Instinct MI300, MI325X, and MI355X GPUs across diverse workloads, underscoring the strength of our platform and our commitment to giving developers real-time visibility into our software progress.', name: 'Dr. Lisa Su', title: 'Chair and CEO, AMD', + company: 'AMD', }, { 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', }, { 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', }, { 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', }, { 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', }, { 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.", name: 'Scott Guthrie', title: 'Executive Vice President, Microsoft Cloud & AI', + company: 'Microsoft', }, { text: 'At Microsoft, delivering the best inference performance and economics for our customers at scale requires a deep understanding of how AI models interact with real-world hardware and software. Open-source, reproducible benchmarks, like InferenceMAX\u2122, are essential for generating transparent insights into throughput, efficiency, and cost under realistic workloads. These continuous signals help guide our platform strategy, enabling us to optimize the entire stack from silicon, to systems, to software, so that every layer works together to unlock the full potential of our infrastructure.', name: 'Saurabh Dighe', title: 'Corporate Vice President, Azure Strategic Planning & Architecture', + company: 'Microsoft', }, { text: 'The gap between theoretical peak and real-world inference throughput is often determined by systems software: inference engine, distributed strategies, and low-level kernels. InferenceMAX\u2122 is valuable because it benchmarks the latest software showing how optimizations like FP4, MTP, speculative decode, and wide-EP actually play out across various hardware. Open, reproducible results like these help the whole community move faster.', name: 'Tri Dao', title: 'Chief Scientist of Together AI & Inventor of Flash Attention', + company: 'Together AI', }, { text: "The industry needs many public, reproducible benchmarks of inference performance. We're excited to collaborate with InferenceMAX\u2122 from the vLLM team. More diverse workloads and scenarios that everyone can trust and reference will help the ecosystem move forward. Fair, transparent measurements drive progress across every layer of the stack, from model architectures to inference engines to hardware.", name: 'Simon Mo', title: 'vLLM Project Co-Lead', + company: 'vLLM', }, { text: 'The benchmark is good sir', name: 'Michael Goin', title: 'vLLM Maintainer', + company: 'vLLM', }, { text: 'InferenceMAX\u2122 benchmark is pogchamp & W in chat', name: 'Kaichao You', title: 'vLLM Project Co-Lead', + company: 'vLLM', }, { text: 'Arguably the most important OSS benchmark suite out today InferenceX', name: 'Mark Saroufim', title: 'GPU Mode Founder & Meta PyTorch Engineer', + company: 'GPU Mode', link: 'https://discord.com/channels/1189498204333543425/1189640399476764692/1478445293614923856', }, { text: 'InferenceMAX\u2122 demonstrates how an open ecosystem can operate in practice. Many leading inference stacks such as vLLM, SGLang, and TensorRT-LLM are built on PyTorch, and benchmarks like this show how innovations across kernels, runtimes, and frameworks translate into measurable performance on a range of hardware platforms, including NVIDIA and AMD GPUs. By being open source and running nightly, InferenceMAX\u2122 offers a transparent, community-driven approach to tracking progress and providing PyTorch users with data-driven insights.', name: 'Matt White', title: 'Executive Director, PyTorch Foundation', + company: 'PyTorch Foundation', }, { text: 'Oracle Cloud Infrastructure is built to give frontier labs & enterprises flexibility and choice, with many GPU SKUs available for AI at scale. InferenceMAX strengthens that mission by delivering open source, reproducible benchmarks that reflect real-world performance, efficiency, and cost on the latest hardware and software. With this transparency, customers can confidently select the platforms that best align with their AI strategies.', name: 'Jay Jackson', title: 'Vice President, Oracle Cloud Infrastructure', + company: 'Oracle', }, { text: 'InferenceMAX\u2122 raises the bar by delivering open, transparent benchmarks that track how inference really performs across the latest GPUs and software stacks. For customers, having reproducible data that measures real world tokens per dollar & tokens per watt, turns abstract marketing numbers into actionable insight. At CoreWeave, we support this effort because it brings clarity to a fast-moving space and helps the entire ecosystem build with confidence.', name: 'Peter Salanki', title: 'CTO, CoreWeave', + company: 'CoreWeave', }, { text: "InferenceMAX\u2122 sets a new standard by providing open, transparent benchmarks that reveal how inference performs across today's leading GPUs and software stacks. With reproducible data measuring real-world tokens per dollar and tokens per watt, customers can move beyond marketing claims to actionable insights. For us at Nebius, as a full-stack AI cloud provider, this initiative helps us build our inference platform with confidence and ensure we are aligned with the ecosystem.", name: 'Roman Chernin', title: 'Co-Founder & Chief Business Officer, Nebius', + company: 'Nebius', }, { text: "At Crusoe, we believe being a great partner means empowering our customers with choice and clarity. That's why we're proud to support InferenceMAX\u2122, which provides the entire AI community with open-source, reproducible benchmarks for the latest hardware. By delivering transparent, real-world data on throughput, efficiency, and cost, InferenceMAX\u2122 cuts through the hype and helps our customers confidently select the very best platform for their unique workloads.", name: 'Chase Lochmiller', title: 'Co-Founder & CEO, Crusoe', + company: 'Crusoe', }, { text: 'Supermicro is excited about the launch of InferenceMAX\u2122, the SemiAnalysis benchmarking system that measures real-world throughput, performance per dollar, and energy efficiency. This open-source tool provides reproducible benchmarks running on the latest hardware and software enabling AI labs and enterprises to choose the best platforms at scale.', name: 'Charles Liang', title: 'Founder & CEO, Supermicro', + company: 'Supermicro', }, { text: "At TensorWave, we're building a next-generation cloud on AMD GPUs because we believe innovation thrives when customers have strong alternatives. InferenceMAX\u2122 reinforces that vision by providing open source, reproducible benchmarks that track throughput, efficiency, and cost across the latest hardware and software. By cutting through synthetic numbers and highlighting real-world inference performance, it helps customers see the full potential of AMD platforms for AI at scale.", name: 'Darrick Horton', title: 'CEO, TensorWave', + company: 'TensorWave', }, { text: 'Vultr is committed to providing an open ecosystem that gives developers freedom in how they build and scale AI \u2014 whether on NVIDIA or AMD GPUs. With InferenceMAX\u2122, customers gain open, reproducible benchmarks that deliver clear insights into throughput, efficiency, and cost across cutting-edge hardware and software. By showcasing real-world performance, we empower teams to confidently choose the right platform for their AI workloads.', name: 'Nathan Goulding', title: 'SVP of Engineering, Vultr', + company: 'Vultr', }, ]; From 82923159bd0dafc37e6d93913d5947da5faf179d Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:15:15 -0500 Subject: [PATCH 2/7] pin OpenAI quote first, shorten interval to 8s, exclude Supermicro and Vultr --- packages/app/src/components/quote-carousel.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/app/src/components/quote-carousel.tsx b/packages/app/src/components/quote-carousel.tsx index 48e8a55a..15c1028b 100644 --- a/packages/app/src/components/quote-carousel.tsx +++ b/packages/app/src/components/quote-carousel.tsx @@ -22,8 +22,8 @@ const COMPANY_LOGO_FILE: Record = { Vultr: 'vultr.svg', }; -const EXCLUDED_COMPANIES = new Set(['NVIDIA', 'AMD']); -const ROTATE_INTERVAL_MS = 10_000; +const EXCLUDED_COMPANIES = new Set(['NVIDIA', 'AMD', 'Supermicro', 'Vultr']); +const ROTATE_INTERVAL_MS = 8_000; function shuffleArray(arr: T[]): T[] { const shuffled = [...arr]; @@ -46,7 +46,9 @@ function buildCompanyQuotes(quotes: Quote[]): { company: string; quote: Quote }[ company, quote: pool[Math.floor(Math.random() * pool.length)], })); - return shuffleArray(entries); + const openai = entries.filter((e) => e.company === 'OpenAI'); + const rest = shuffleArray(entries.filter((e) => e.company !== 'OpenAI')); + return [...openai, ...rest]; } function CompanyLogo({ company }: { company: string }) { From cc70f2e9f38c9e6834f5f24feac9e61847e8d7a9 Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:19:25 -0500 Subject: [PATCH 3/7] show Tri Dao instead of Together AI in company name strip --- packages/app/src/components/quote-carousel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/components/quote-carousel.tsx b/packages/app/src/components/quote-carousel.tsx index 15c1028b..77970e8d 100644 --- a/packages/app/src/components/quote-carousel.tsx +++ b/packages/app/src/components/quote-carousel.tsx @@ -192,7 +192,7 @@ export function QuoteCarousel() { : 'opacity-40 text-muted-foreground hover:opacity-70' }`} > - {e.company} + {e.company === 'Together AI' ? 'Tri Dao' : e.company} ))} From 9eebca3a1848b97dea5e833142cb407d75c107c9 Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:24:28 -0500 Subject: [PATCH 4/7] make quote carousel generic: move logos to quote data, add overrides prop, filter at call site --- packages/app/src/components/page-content.tsx | 11 +- .../app/src/components/quote-carousel.tsx | 102 +++++++++--------- .../app/src/components/quotes/quotes-data.ts | 17 +++ 3 files changed, 81 insertions(+), 49 deletions(-) diff --git a/packages/app/src/components/page-content.tsx b/packages/app/src/components/page-content.tsx index 99874353..f3a01cb1 100644 --- a/packages/app/src/components/page-content.tsx +++ b/packages/app/src/components/page-content.tsx @@ -28,6 +28,7 @@ import { } from '@/components/ui/select'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { QuoteCarousel } from '@/components/quote-carousel'; +import { QUOTES } from '@/components/quotes/quotes-data'; import { UnofficialRunProvider } from '@/components/unofficial-run-provider'; import { getTabTitle, isValidTab } from '@/lib/tab-meta'; @@ -300,7 +301,15 @@ export function PageContent({ initialTab = 'inference' }: { initialTab?: string .

- + !['NVIDIA', 'AMD', 'Supermicro', 'Vultr'].includes(q.company), + )} + overrides={{ + order: ['OpenAI'], + labels: { 'Together AI': 'Tri Dao' }, + }} + />
diff --git a/packages/app/src/components/quote-carousel.tsx b/packages/app/src/components/quote-carousel.tsx index 77970e8d..9e1edd81 100644 --- a/packages/app/src/components/quote-carousel.tsx +++ b/packages/app/src/components/quote-carousel.tsx @@ -1,29 +1,29 @@ 'use client'; -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { track } from '@/lib/analytics'; -import { type Quote, QUOTES } from './quotes/quotes-data'; - -const COMPANY_LOGO_FILE: Record = { - OpenAI: 'openai.svg', - Microsoft: 'microsoft.svg', - 'Together AI': 'together-ai.svg', - vLLM: 'vllm.svg', - 'GPU Mode': 'gpu-mode.png', - 'PyTorch Foundation': 'pytorch.svg', - Oracle: 'oracle.svg', - CoreWeave: 'coreweave.svg', - Nebius: 'nebius.svg', - Crusoe: 'crusoe.svg', - Supermicro: 'supermicro.svg', - TensorWave: 'tensorwave.svg', - Vultr: 'vultr.svg', -}; - -const EXCLUDED_COMPANIES = new Set(['NVIDIA', 'AMD', 'Supermicro', 'Vultr']); -const ROTATE_INTERVAL_MS = 8_000; +export interface CarouselQuote { + text: string; + name: string; + title: string; + company: string; + logo?: string; + link?: string; +} + +export interface QuoteCarouselProps { + quotes: CarouselQuote[]; + overrides?: { + /** Companies pinned to the front in this order; rest are shuffled after */ + order?: string[]; + /** Override display names in the company strip */ + labels?: Record; + }; + /** Auto-rotate interval in ms (default 8000) */ + intervalMs?: number; +} function shuffleArray(arr: T[]): T[] { const shuffled = [...arr]; @@ -34,9 +34,13 @@ function shuffleArray(arr: T[]): T[] { return shuffled; } -/** Group quotes by company, pick one random quote per company, shuffle company order. */ -function buildCompanyQuotes(quotes: Quote[]): { company: string; quote: Quote }[] { - const byCompany = new Map(); +interface CompanyEntry { + company: string; + quote: CarouselQuote; +} + +function buildCompanyQuotes(quotes: CarouselQuote[], order?: string[]): CompanyEntry[] { + const byCompany = new Map(); for (const q of quotes) { const list = byCompany.get(q.company); if (list) list.push(q); @@ -46,41 +50,46 @@ function buildCompanyQuotes(quotes: Quote[]): { company: string; quote: Quote }[ company, quote: pool[Math.floor(Math.random() * pool.length)], })); - const openai = entries.filter((e) => e.company === 'OpenAI'); - const rest = shuffleArray(entries.filter((e) => e.company !== 'OpenAI')); - return [...openai, ...rest]; + if (order?.length) { + const orderSet = new Set(order); + const pinned = order + .map((c) => entries.find((e) => e.company === c)) + .filter((e): e is CompanyEntry => !!e); + const rest = shuffleArray(entries.filter((e) => !orderSet.has(e.company))); + return [...pinned, ...rest]; + } + return shuffleArray(entries); } -function CompanyLogo({ company }: { company: string }) { +function CompanyLogo({ quote }: { quote: CarouselQuote }) { const [failed, setFailed] = useState(false); - const file = COMPANY_LOGO_FILE[company]; - if (!file || failed) { + if (!quote.logo || failed) { return (
- {company[0]} + {quote.company[0]}
); } return ( {company} setFailed(true)} /> ); } -function QuoteBlock({ quote }: { quote: Quote }) { +function QuoteBlock({ quote }: { quote: CarouselQuote }) { return (

“{quote.text}”