Skip to content

Commit 30b9361

Browse files
round 1 updates
updated competitor feature comparision, pairs with slide, customers slide, and order
1 parent 405132b commit 30b9361

File tree

12 files changed

+276
-8
lines changed

12 files changed

+276
-8
lines changed

contents/handbook/engineering/posthog-com/product-comparisons.mdx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,10 @@ export const llmAnalytics = {
449449
name: 'Helicone',
450450
key: 'helicone',
451451
},
452+
{
453+
name: 'Braintrust',
454+
key: 'braintrust',
455+
},
452456
{
453457
name: 'PostHog',
454458
key: 'posthog',

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@
270270
"*.{js,ts,tsx}": "eslint",
271271
"*.{md,mdx}": "markdownlint-cli2 --fix"
272272
},
273-
"packageManager": "pnpm@10.23.0+sha512.21c4e5698002ade97e4efe8b8b4a89a8de3c85a37919f957e7a0f30f38fbc5bbdd05980ffe29179b2fb6e6e691242e098d945d1601772cad0fef5fb6411e2a4b",
273+
"packageManager": "pnpm@10.26.2+sha512.0e308ff2005fc7410366f154f625f6631ab2b16b1d2e70238444dd6ae9d630a8482d92a451144debc492416896ed16f7b114a86ec68b8404b2443869e68ffda6",
274274
"pnpm": {
275275
"onlyBuiltDependencies": [
276276
"@parcel/watcher",

src/components/ProductComparisonTable/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { amplitude } from '../../hooks/competitorData/amplitude'
1313
import { appcues } from '../../hooks/competitorData/appcues'
1414
import { appsignal } from '../../hooks/competitorData/appsignal'
1515
import { baremetrics } from '../../hooks/competitorData/baremetrics'
16+
import { braintrust } from '../../hooks/competitorData/braintrust'
1617
import { bugsnag } from '../../hooks/competitorData/bugsnag'
1718
import { chartmogul } from '../../hooks/competitorData/chartmogul'
1819
import { chameleon } from '../../hooks/competitorData/chameleon'
@@ -584,6 +585,7 @@ export default function ProductComparisonTable({
584585
appcues,
585586
appsignal,
586587
baremetrics,
588+
braintrust,
587589
bugsnag,
588590
chartmogul,
589591
chameleon,

src/components/Products/Slides/CustomersSlide.tsx

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { SlideContainer } from './SlidesTemplate'
66
import ScrollArea from 'components/RadixUI/ScrollArea'
77
import OSButton from 'components/OSButton'
88
import { DebugContainerQuery } from 'components/DebugContainerQuery'
9+
import { useCustomers } from 'hooks/useCustomers'
910

1011
interface Customer {
1112
slug: string
@@ -32,6 +33,62 @@ interface CustomersSlideProps {
3233
}
3334

3435
export 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
)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
export const braintrust = {
2+
name: 'Braintrust',
3+
products: {
4+
llm_analytics: {
5+
available: true,
6+
features: {
7+
generation_tracking: true,
8+
latency_tracking: true,
9+
cost_tracking: true,
10+
trace_visualization: true,
11+
token_tracking: true,
12+
prompt_playground: true,
13+
prompt_evaluations: true,
14+
alerting: true,
15+
error_tracking: true,
16+
byok: true,
17+
system_prompts: true,
18+
clustering: false,
19+
trace_summarization: true,
20+
llm_translation: false,
21+
},
22+
},
23+
},
24+
}

src/hooks/competitorData/helicone.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ export const helicone = {
1212
prompt_playground: true,
1313
prompt_evaluations: true,
1414
alerting: true,
15+
error_tracking: true,
16+
system_prompts: true,
17+
clustering: false,
18+
trace_summarization: false,
19+
llm_translation: false,
1520
},
1621
},
1722
},

src/hooks/competitorData/langfuse.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ export const langfuse = {
1212
prompt_playground: true,
1313
prompt_evaluations: true,
1414
alerting: false,
15+
system_prompts: true,
16+
error_tracking: true,
17+
clustering: true,
18+
trace_summarization: true,
19+
llm_translation: false,
1520
},
1621
},
1722
},

src/hooks/competitorData/langsmith.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ export const langsmith = {
1212
prompt_playground: true,
1313
prompt_evaluations: true,
1414
alerting: true,
15+
error_tracking: true,
16+
clustering: false,
17+
system_prompts: true,
18+
trace_summarization: true,
19+
llm_translation: false,
1520
},
1621
},
1722
},

src/hooks/competitorData/posthog.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,10 +494,15 @@ export const posthog = {
494494
cost_tracking: true,
495495
generation_tracking: true,
496496
latency_tracking: true,
497-
prompt_evaluations: false,
497+
prompt_evaluations: true,
498498
prompt_playground: true,
499499
token_tracking: true,
500500
trace_visualization: true,
501+
error_tracking: true,
502+
clustering: true,
503+
system_prompts: true,
504+
trace_summarization: true,
505+
llm_translation: true,
501506
},
502507
},
503508
data_warehouse: {

src/hooks/featureDefinitions/llm_analytics.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export const llmAnalyticsFeatures = {
88
features: {
99
generation_tracking: {
1010
name: 'Generation tracking',
11-
description: 'Track the generation of your LLM-powered features',
11+
description: '',
1212
},
1313
latency_tracking: {
1414
name: 'Latency tracking',
@@ -28,15 +28,35 @@ export const llmAnalyticsFeatures = {
2828
},
2929
prompt_playground: {
3030
name: 'Prompt playground',
31-
description: '',
31+
description: 'interactive testing environment for prompts and models',
3232
},
3333
prompt_evaluations: {
3434
name: 'Prompt evaluations',
35-
description: '',
35+
description: 'online LLM-as-a-Judge evaluations for measuring AI output quality',
3636
},
3737
alerting: {
3838
name: 'Alerting',
3939
description: '',
4040
},
41+
error_tracking: {
42+
name: 'Error tracking',
43+
description: 'grouped error tracking for LLM applications',
44+
},
45+
system_prompts: {
46+
name: 'System prompts',
47+
description: 'create and manage system prompts from the PostHog UI',
48+
},
49+
clustering: {
50+
name: 'Clustering',
51+
description: 'automatic grouping of similar traces and outputs',
52+
},
53+
trace_summarization: {
54+
name: 'Trace summarization',
55+
description: 'AI-generated summaries quick understanding',
56+
},
57+
llm_translation: {
58+
name: 'LLM translation',
59+
description: 'translation of non-English LLM traces to English',
60+
},
4161
},
4262
}

0 commit comments

Comments
 (0)