Skip to content

Commit 5492b47

Browse files
talissoncostaclaude
andcommitted
feat(onboarding): new-flow diagnostics events
Emit single_page-only diagnostics for the flow's internal drop-off: onboarding snippet copied (install / wire), AI-connect used, and the in-page flag toggle, each carrying org / project / environment IDs (no PII). Kept separate from the control comparison funnel since the control has no equivalent. Contributes to #7738 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 797d39e commit 5492b47

4 files changed

Lines changed: 62 additions & 4 deletions

File tree

frontend/common/constants.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,18 @@ const Constants = {
260260
'category': 'User',
261261
'event': `User oauth ${type}`,
262262
}),
263+
'ONBOARDING_AI_CONNECT': {
264+
'category': 'Onboarding',
265+
'event': 'Onboarding AI connect used',
266+
},
267+
'ONBOARDING_FLAG_TOGGLED': {
268+
'category': 'Onboarding',
269+
'event': 'Onboarding flag toggled',
270+
},
271+
'ONBOARDING_SNIPPET_COPIED': {
272+
'category': 'Onboarding',
273+
'event': 'Onboarding snippet copied',
274+
},
263275
'REFERRER_CONVERSION': (referrer: string) => ({
264276
'category': 'Referrer',
265277
'event': `${referrer} converted`,

frontend/web/components/pages/onboarding/OnboardingConnectPanel/ConnectWithAiPanel.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { useCopyFeedback } from 'components/pages/onboarding/hooks/useCopyFeedba
77
export type ConnectWithAiPanelProps = {
88
environmentKey: string
99
featureName: string
10+
onCopyPrompt?: () => void
1011
}
1112

1213
// "Connect with AI" tab: an agent-agnostic prompt the user pastes into their
@@ -18,6 +19,7 @@ export type ConnectWithAiPanelProps = {
1819
const ConnectWithAiPanel: FC<ConnectWithAiPanelProps> = ({
1920
environmentKey,
2021
featureName,
22+
onCopyPrompt,
2123
}) => {
2224
const { copied, copy } = useCopyFeedback()
2325

@@ -39,7 +41,14 @@ Detect my stack, install the SDK, and wire ${featureName} into one place. Then r
3941
<code className='onboarding-connect__prompt-text flex-fill'>
4042
{aiPrompt}
4143
</code>
42-
<Button theme='outline' size='small' onClick={() => copy(aiPrompt)}>
44+
<Button
45+
theme='outline'
46+
size='small'
47+
onClick={() => {
48+
copy(aiPrompt)
49+
onCopyPrompt?.()
50+
}}
51+
>
4352
<span
4453
className='d-inline-flex align-items-center gap-1'
4554
aria-live='polite'

frontend/web/components/pages/onboarding/OnboardingConnectPanel/OnboardingConnectPanel.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export type OnboardingConnectPanelProps = {
3030
featureName: string
3131
onCopyInstall?: () => void
3232
onCopyWire?: () => void
33+
onCopyPrompt?: () => void
3334
}
3435

3536
// Two ways to connect an app to the pre-created flag: paste an agent-agnostic
@@ -40,6 +41,7 @@ const OnboardingConnectPanel: FC<OnboardingConnectPanelProps> = ({
4041
environmentKey,
4142
featureName,
4243
onCopyInstall,
44+
onCopyPrompt,
4345
onCopyWire,
4446
}) => {
4547
const [tab, setTab] = useState<ConnectTab>('manual')
@@ -61,6 +63,7 @@ const OnboardingConnectPanel: FC<OnboardingConnectPanelProps> = ({
6163
<ConnectWithAiPanel
6264
environmentKey={environmentKey}
6365
featureName={featureName}
66+
onCopyPrompt={onCopyPrompt}
6467
/>
6568
</OnboardingTabPanel>
6669

frontend/web/components/pages/onboarding/OnboardingFlow/OnboardingFlow.tsx

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import { useOnboardingFlag } from 'components/pages/onboarding/hooks/useOnboardi
1616
import { useOnboardingConnection } from 'components/pages/onboarding/hooks/useOnboardingConnection'
1717
import { useUpdateOrganisationMutation } from 'common/services/useOrganisation'
1818
import { useUpdateProjectMutation } from 'common/services/useProject'
19+
import API from 'project/api'
20+
import Constants from 'common/constants'
1921
import './OnboardingFlow.scss'
2022

2123
// The single-page onboarding flow, rendered at /getting-started when
@@ -139,6 +141,37 @@ const OnboardingFlow: FC = () => {
139141
history.push(`${base}/features?feature=${flagId}&tab=${tab}`)
140142
}
141143

144+
const diagnosticIds = {
145+
environment_id: environment?.id,
146+
organisation_id: organisationId,
147+
project_id: projectId,
148+
}
149+
const trackSnippetCopied = (snippet: 'install' | 'wire') =>
150+
API.trackEvent({
151+
...Constants.events.ONBOARDING_SNIPPET_COPIED,
152+
extra: { ...diagnosticIds, snippet },
153+
})
154+
const handleCopyInstall = () => {
155+
trackSnippetCopied('install')
156+
setInstallCopied(true)
157+
}
158+
const handleCopyWire = () => {
159+
trackSnippetCopied('wire')
160+
setSnippetCopied(true)
161+
}
162+
const handleCopyPrompt = () =>
163+
API.trackEvent({
164+
...Constants.events.ONBOARDING_AI_CONNECT,
165+
extra: diagnosticIds,
166+
})
167+
const handleToggleFlag = (enabled: boolean) => {
168+
API.trackEvent({
169+
...Constants.events.ONBOARDING_FLAG_TOGGLED,
170+
extra: { ...diagnosticIds, enabled },
171+
})
172+
toggleFlag(enabled)
173+
}
174+
142175
if (status === 'creating') {
143176
return (
144177
<div className='onboarding-flow mx-auto text-center'>
@@ -177,8 +210,9 @@ const OnboardingFlow: FC = () => {
177210
<OnboardingConnectPanel
178211
environmentKey={environmentKey}
179212
featureName={featureName}
180-
onCopyInstall={() => setInstallCopied(true)}
181-
onCopyWire={() => setSnippetCopied(true)}
213+
onCopyInstall={handleCopyInstall}
214+
onCopyWire={handleCopyWire}
215+
onCopyPrompt={handleCopyPrompt}
182216
/>
183217
<OnboardingTerminal
184218
featureName={featureName}
@@ -196,7 +230,7 @@ const OnboardingFlow: FC = () => {
196230
tags: flagTags,
197231
},
198232
]}
199-
onToggle={(_flag, next) => toggleFlag(next)}
233+
onToggle={(_flag, next) => handleToggleFlag(next)}
200234
togglingFlag={isToggling ? featureName : null}
201235
togglesReady={flagStateReady}
202236
/>

0 commit comments

Comments
 (0)