@@ -6,6 +6,7 @@ import { SlideContainer } from './SlidesTemplate'
66import ScrollArea from 'components/RadixUI/ScrollArea'
77import OSButton from 'components/OSButton'
88import { DebugContainerQuery } from 'components/DebugContainerQuery'
9+ import { useCustomers } from 'hooks/useCustomers'
910
1011interface Customer {
1112 slug : string
@@ -32,6 +33,62 @@ interface CustomersSlideProps {
3233}
3334
3435export default function CustomersSlide ( { productName, customers, customerData, hasCaseStudy } : CustomersSlideProps ) {
36+ const { customers : allCustomers } = useCustomers ( )
37+
38+ // Get 5 AI product engineer customers
39+ const aiEngineerSlugs = [ '11x' , 'grantable' , 'hostai' , 'juicebox' , 'zealot' ]
40+ const aiEngineers = aiEngineerSlugs . map ( ( slug ) => allCustomers [ slug ] ) . filter ( Boolean )
41+
42+ // Helper function to render a small customer logo
43+ const renderSmallLogo = ( customer : ( typeof allCustomers ) [ string ] ) => {
44+ if ( ! customer ) return null
45+
46+ // Handle legacy logo format (URLs) - check if property exists
47+ const customerWithLegacy = customer as typeof customer & { legacyLogo ?: string ; legacyLogoDark ?: string }
48+ if ( customerWithLegacy . legacyLogo ) {
49+ return (
50+ < >
51+ < img
52+ src = { customerWithLegacy . legacyLogo }
53+ alt = { customer . name }
54+ className = "h-8 w-auto object-contain dark:hidden"
55+ />
56+ < img
57+ src = { customerWithLegacy . legacyLogoDark || customerWithLegacy . legacyLogo }
58+ alt = { customer . name }
59+ className = "h-8 w-auto object-contain hidden dark:block"
60+ />
61+ </ >
62+ )
63+ }
64+
65+ // Check if logo is a React component (single SVG format)
66+ if ( customer . logo && typeof customer . logo === 'function' ) {
67+ const LogoComponent = customer . logo
68+ return < LogoComponent className = "h-8 w-auto fill-current object-contain" />
69+ }
70+
71+ // Otherwise, it's the existing light/dark object format
72+ if ( customer . logo && typeof customer . logo === 'object' && 'light' in customer . logo ) {
73+ return (
74+ < >
75+ < img
76+ src = { customer . logo . light }
77+ alt = { customer . name }
78+ className = "h-8 w-auto object-contain dark:hidden"
79+ />
80+ < img
81+ src = { customer . logo . dark }
82+ alt = { customer . name }
83+ className = "h-8 w-auto object-contain hidden dark:block"
84+ />
85+ </ >
86+ )
87+ }
88+
89+ return null
90+ }
91+
3592 // Create table structure for customers
3693 const customerTableColumns = [
3794 { name : '' , width : 'minmax(auto,80px)' , align : 'center' as const } ,
@@ -203,6 +260,20 @@ export default function CustomersSlide({ productName, customers, customerData, h
203260 </ div >
204261 )
205262 } ) }
263+
264+ { /* AI Product Engineers Section - Mobile - Only for LLM Analytics */ }
265+ { productName === 'LLM Analytics' && (
266+ < div className = "mt-8 text-center" >
267+ < p className = "text-lg text-secondary mb-4" > and AI product engineers at...</ p >
268+ < div className = "grid grid-cols-5 gap-4" >
269+ { aiEngineers . map ( ( customer ) => (
270+ < div key = { customer . slug } className = "flex items-center justify-center" >
271+ { renderSmallLogo ( customer ) }
272+ </ div >
273+ ) ) }
274+ </ div >
275+ </ div >
276+ ) }
206277 </ div >
207278
208279 < div className = "hidden @2xl:block" >
@@ -213,6 +284,20 @@ export default function CustomersSlide({ productName, customers, customerData, h
213284 width = "full"
214285 />
215286 </ div >
287+
288+ { /* AI Product Engineers Section - Only for LLM Analytics */ }
289+ { productName === 'LLM Analytics' && (
290+ < div className = "mt-8 text-center" >
291+ < p className = "text-lg text-secondary mb-4" > and AI product engineers at...</ p >
292+ < div className = "grid grid-cols-5 gap-4" >
293+ { aiEngineers . map ( ( customer ) => (
294+ < div key = { customer . slug } className = "flex items-center justify-center" >
295+ { renderSmallLogo ( customer ) }
296+ </ div >
297+ ) ) }
298+ </ div >
299+ </ div >
300+ ) }
216301 </ ScrollArea >
217302 </ SlideContainer >
218303 )
0 commit comments