Skip to content

Commit 62bd25e

Browse files
committed
refactor: replace PostHog with generic analytics tracking
1 parent e6b029f commit 62bd25e

21 files changed

+153
-239
lines changed

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@
8484
"match-sorter": "^8.2.0",
8585
"mermaid": "^11.14.0",
8686
"postgres": "^3.4.8",
87-
"posthog-node": "^5.28.10",
8887
"react": "19.2.3",
8988
"react-colorful": "^5.6.1",
9089
"react-dom": "19.2.3",

pnpm-lock.yaml

Lines changed: 0 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/ApplicationStarter.tsx

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import {
3838
} from '~/components/application-builder/shared'
3939
import { useApplicationBuilder } from '~/components/application-builder/useApplicationBuilder'
4040
import { Button, GitHub } from '~/ui'
41-
import { trackPostHogEvent } from '~/utils/posthog'
41+
import { trackEvent } from '~/utils/analytics'
4242

4343
export interface ApplicationStarterProps {
4444
alwaysShowPostAnalysisSection?: boolean
@@ -624,14 +624,11 @@ export function ApplicationStarter({
624624
size="sm"
625625
type="button"
626626
onClick={() => {
627-
trackPostHogEvent(
628-
'application_starter_action_clicked',
629-
{
630-
...analyticsProperties,
631-
action: 'lucky_mode',
632-
surface: 'application_starter',
633-
},
634-
)
627+
trackEvent('application_starter_action_clicked', {
628+
...analyticsProperties,
629+
action: 'lucky_mode',
630+
surface: 'application_starter',
631+
})
635632
enableLuckyActions()
636633
}}
637634
disabled={!canUseLuckyAction}
@@ -646,14 +643,11 @@ export function ApplicationStarter({
646643
size="sm"
647644
type="button"
648645
onClick={() => {
649-
trackPostHogEvent(
650-
'application_starter_action_clicked',
651-
{
652-
...analyticsProperties,
653-
action: 'confident_mode',
654-
surface: 'application_starter',
655-
},
656-
)
646+
trackEvent('application_starter_action_clicked', {
647+
...analyticsProperties,
648+
action: 'confident_mode',
649+
surface: 'application_starter',
650+
})
657651
setShowConfidentOptions(true)
658652
}}
659653
>

src/components/DocsLayout.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { FrameworkSelect, useCurrentFramework } from './FrameworkSelect'
2222
import { VersionSelect } from './VersionSelect'
2323
import { Card } from './Card'
2424
import { PartnersRail, RightRail } from './RightRail'
25-
import { trackPostHogEvent, useTrackedImpression } from '~/utils/posthog'
25+
import { trackEvent, useTrackedImpression } from '~/utils/analytics'
2626

2727
// Mobile partners strip - inline in the docs toggle bar
2828
function MobilePartnersStrip({
@@ -167,7 +167,7 @@ function MobilePartnerLink({
167167
return
168168
}
169169

170-
trackPostHogEvent('partner_click', {
170+
trackEvent('partner_click', {
171171
partner_id: partner.id,
172172
partner_name: partner.name,
173173
placement: 'docs_mobile_strip',
@@ -952,7 +952,7 @@ export function DocsLayout({
952952
rel="noopener noreferrer"
953953
className="absolute right-3 top-2 font-medium opacity-60 hover:opacity-100 text-xs hover:underline"
954954
onClick={() => {
955-
trackPostHogEvent('become_partner_clicked', {
955+
trackEvent('become_partner_clicked', {
956956
framework: currentFramework.framework,
957957
library_id: libraryId,
958958
placement: 'docs_right_rail',

src/components/PartnersGrid.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as React from 'react'
22
import { partners as allPartners, PartnerImage } from '~/utils/partners'
33
import { Card } from '~/components/Card'
4-
import { trackPostHogEvent, useTrackedImpression } from '~/utils/posthog'
4+
import { trackEvent, useTrackedImpression } from '~/utils/analytics'
55

66
type PartnerItem = (typeof allPartners)[number]
77

@@ -46,7 +46,7 @@ function PartnerGridItem({
4646
hover:bg-gray-50 dark:hover:bg-gray-900/50 transition-colors duration-150 ease-out"
4747
style={{ width, flexGrow: partner.score }}
4848
onClick={() => {
49-
trackPostHogEvent('partner_card_clicked', {
49+
trackEvent('partner_card_clicked', {
5050
partner_id: partner.id,
5151
partner_name: partner.name,
5252
destination_host: new URL(partner.href).host,

src/components/PartnershipCallout.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { getLibrary, LibraryId } from '~/libraries'
22
import { HeartHandshake } from 'lucide-react'
33
import { Card } from './Card'
4-
import { trackPostHogEvent } from '~/utils/posthog'
4+
import { trackEvent } from '~/utils/analytics'
55

66
interface PartnershipCalloutProps {
77
libraryId: LibraryId
@@ -29,7 +29,7 @@ export function PartnershipCallout({ libraryId }: PartnershipCalloutProps) {
2929
href={`mailto:partners@tanstack.com?subject=TanStack ${library.name} Partnership`}
3030
className="text-blue-500 uppercase font-black text-sm"
3131
onClick={() => {
32-
trackPostHogEvent('partner_inquiry_clicked', {
32+
trackEvent('partner_inquiry_clicked', {
3333
library_id: libraryId,
3434
placement: 'library_partnership_callout',
3535
})

src/components/RightRail.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as React from 'react'
22
import { Link } from '@tanstack/react-router'
33
import { twMerge } from 'tailwind-merge'
44
import { PartnerImage } from '~/utils/partners'
5-
import { trackPostHogEvent, useTrackedImpression } from '~/utils/posthog'
5+
import { trackEvent, useTrackedImpression } from '~/utils/analytics'
66

77
type RailPartner = {
88
id: string
@@ -119,7 +119,7 @@ function PartnersRailItem({
119119
flexShrink: 0,
120120
}}
121121
onClick={() => {
122-
trackPostHogEvent('partner_click', {
122+
trackEvent('partner_click', {
123123
partner_id: partner.id,
124124
partner_name: partner.name,
125125
placement: analyticsPlacement,

src/components/application-builder/useApplicationBuilder.tsx

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { useMutation } from '@tanstack/react-query'
33
import { useCurrentUser } from '~/hooks/useCurrentUser'
44
import { useLoginModal } from '~/contexts/LoginModalContext'
55
import { useToast } from '~/components/ToastProvider'
6-
import { trackPostHogEvent, useTrackedImpression } from '~/utils/posthog'
6+
import { trackEvent, useTrackedImpression } from '~/utils/analytics'
77
import {
88
extractMigrationRepositoryUrl,
99
type ApplicationStarterAnalysis,
@@ -301,7 +301,7 @@ export function useApplicationBuilder({
301301
next[libraryId] = true
302302
}
303303

304-
trackPostHogEvent('application_starter_library_toggled', {
304+
trackEvent('application_starter_library_toggled', {
305305
...analyticsProperties,
306306
library_id: libraryId,
307307
selected: !selected,
@@ -316,7 +316,7 @@ export function useApplicationBuilder({
316316
const togglePartner = React.useCallback(
317317
(partner: ApplicationStarterPartnerSuggestion, selected: boolean) => {
318318
invalidateResult()
319-
trackPostHogEvent('application_starter_integration_toggled', {
319+
trackEvent('application_starter_integration_toggled', {
320320
...analyticsProperties,
321321
integration: partner.id,
322322
selected: !selected,
@@ -338,7 +338,7 @@ export function useApplicationBuilder({
338338
const nextPackageManager =
339339
current === packageManager ? undefined : packageManager
340340

341-
trackPostHogEvent('application_starter_package_manager_toggled', {
341+
trackEvent('application_starter_package_manager_toggled', {
342342
...analyticsProperties,
343343
package_manager: packageManager,
344344
selected: nextPackageManager === packageManager,
@@ -357,7 +357,7 @@ export function useApplicationBuilder({
357357
setSelectedToolchain((current) => {
358358
const nextToolchain = current === toolchain ? undefined : toolchain
359359

360-
trackPostHogEvent('application_starter_toolchain_toggled', {
360+
trackEvent('application_starter_toolchain_toggled', {
361361
...analyticsProperties,
362362
selected: nextToolchain === toolchain,
363363
toolchain,
@@ -431,7 +431,7 @@ export function useApplicationBuilder({
431431
revealPromptCopyNotice()
432432
}
433433

434-
trackPostHogEvent('application_starter_value_copied', {
434+
trackEvent('application_starter_value_copied', {
435435
...analyticsProperties,
436436
copied_kind: kind,
437437
copy_trigger: options?.trigger ?? 'user',
@@ -491,7 +491,7 @@ export function useApplicationBuilder({
491491

492492
const applied = await builderIntegration.applyResult(nextResult)
493493

494-
trackPostHogEvent('application_starter_builder_result_applied', {
494+
trackEvent('application_starter_builder_result_applied', {
495495
...analyticsProperties,
496496
applied,
497497
recipe_target: nextResult.recipe.target,
@@ -530,7 +530,7 @@ export function useApplicationBuilder({
530530
return
531531
}
532532

533-
trackPostHogEvent('application_starter_analysis_failed', {
533+
trackEvent('application_starter_analysis_failed', {
534534
...analyticsProperties,
535535
error_message: error instanceof Error ? error.message : 'unknown_error',
536536
})
@@ -561,7 +561,7 @@ export function useApplicationBuilder({
561561
setIsLocked(false)
562562
setLockMessage(null)
563563

564-
trackPostHogEvent('application_starter_analyzed', {
564+
trackEvent('application_starter_analyzed', {
565565
...analyticsProperties,
566566
analysis_deployment: nextAnalysis.recipe.deployment,
567567
analysis_inferred_library_count: nextAnalysis.inferredLibraryIds.length,
@@ -593,7 +593,7 @@ export function useApplicationBuilder({
593593
</div>,
594594
)
595595

596-
trackPostHogEvent('application_starter_generation_failed', {
596+
trackEvent('application_starter_generation_failed', {
597597
...analyticsProperties,
598598
error_message: error instanceof Error ? error.message : 'unknown_error',
599599
login_required:
@@ -614,7 +614,7 @@ export function useApplicationBuilder({
614614
: 'Anonymous generations are limited. Sign in to unlock more.',
615615
)
616616

617-
trackPostHogEvent('application_starter_login_required', {
617+
trackEvent('application_starter_login_required', {
618618
...analyticsProperties,
619619
retry_after: error.retryAfter,
620620
})
@@ -714,7 +714,7 @@ export function useApplicationBuilder({
714714
}
715715
}
716716

717-
trackPostHogEvent('application_starter_generated', {
717+
trackEvent('application_starter_generated', {
718718
...analyticsProperties,
719719
final_deployment: nextResult.recipe.deployment,
720720
final_feature_count: finalFeatureIds.length,
@@ -735,7 +735,7 @@ export function useApplicationBuilder({
735735
})
736736

737737
for (const partnerId of finalPromptPartnerIds) {
738-
trackPostHogEvent('application_starter_final_partner_in_prompt', {
738+
trackEvent('application_starter_final_partner_in_prompt', {
739739
...analyticsProperties,
740740
generation_index: generationCountRef.current,
741741
inferred: inferredPartnerIds.includes(partnerId),
@@ -745,7 +745,7 @@ export function useApplicationBuilder({
745745
}
746746

747747
for (const featureId of finalPromptFeatureIds) {
748-
trackPostHogEvent('application_starter_final_addon_in_prompt', {
748+
trackEvent('application_starter_final_addon_in_prompt', {
749749
...analyticsProperties,
750750
addon_id: featureId,
751751
generation_index: generationCountRef.current,
@@ -841,10 +841,7 @@ export function useApplicationBuilder({
841841
const requestId = latestRequestIdRef.current + 1
842842
latestRequestIdRef.current = requestId
843843

844-
trackPostHogEvent(
845-
'application_starter_continue_clicked',
846-
analyticsProperties,
847-
)
844+
trackEvent('application_starter_continue_clicked', analyticsProperties)
848845

849846
try {
850847
const nextAnalysis = await analysisMutation.mutateAsync({
@@ -909,7 +906,7 @@ export function useApplicationBuilder({
909906
setMigrationRepositoryUrl('')
910907
}
911908

912-
trackPostHogEvent('application_starter_idea_selected', {
909+
trackEvent('application_starter_idea_selected', {
913910
...analyticsProperties,
914911
idea_label: suggestion.label,
915912
})
@@ -977,7 +974,7 @@ export function useApplicationBuilder({
977974

978975
const trackAction = React.useCallback(
979976
(action: string, provider?: StarterDeployProvider | null) => {
980-
trackPostHogEvent('application_starter_action_clicked', {
977+
trackEvent('application_starter_action_clicked', {
981978
...analyticsProperties,
982979
surface: 'application_starter',
983980
action,
@@ -1091,7 +1088,7 @@ export function useApplicationBuilder({
10911088
return
10921089
}
10931090

1094-
trackPostHogEvent('application_starter_action_clicked', {
1091+
trackEvent('application_starter_action_clicked', {
10951092
...analyticsProperties,
10961093
surface: 'application_starter',
10971094
action: 'netlify_start',
@@ -1151,10 +1148,7 @@ export function useApplicationBuilder({
11511148
return
11521149
}
11531150

1154-
trackPostHogEvent(
1155-
'application_starter_generate_clicked',
1156-
analyticsProperties,
1157-
)
1151+
trackEvent('application_starter_generate_clicked', analyticsProperties)
11581152
const nextResult = await submit(buildSubmittedInput())
11591153

11601154
if (!nextResult) {
@@ -1214,10 +1208,7 @@ export function useApplicationBuilder({
12141208

12151209
const openLogin = React.useCallback(
12161210
(onSuccess?: () => void) => {
1217-
trackPostHogEvent(
1218-
'application_starter_login_clicked',
1219-
analyticsProperties,
1220-
)
1211+
trackEvent('application_starter_login_clicked', analyticsProperties)
12211212
openLoginModal({
12221213
onSuccess: () => {
12231214
setIsLocked(false)

0 commit comments

Comments
 (0)