Skip to content

Commit 71ff099

Browse files
committed
Added PostHog events to dev onboarding
1 parent 7054115 commit 71ff099

File tree

8 files changed

+55
-58
lines changed

8 files changed

+55
-58
lines changed

apps/web/src/app/(onboarding)/onboarding/choice/page.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { ROUTES } from '$/services/routes'
1212
import { useHover } from '@latitude-data/web-ui/browser'
1313
import { cn } from '@latitude-data/web-ui/utils'
1414

15-
type OnboardingChoice = 'scratch' | 'existing' | null
15+
type OnboardingChoice = 'product_engineer' | 'developer' | null
1616

1717
function ChoiceCard({
1818
icon,
@@ -66,12 +66,12 @@ export default function OnboardingChoicePage() {
6666
})
6767

6868
const handleStartFromScratch = useCallback(() => {
69-
setOnboardingChoice('scratch')
69+
setOnboardingChoice('product_engineer')
7070
router.push(ROUTES.onboarding.promptEngineering.pasteYourPrompt)
7171
}, [setOnboardingChoice, router])
7272

7373
const handleExistingProject = useCallback(() => {
74-
setOnboardingChoice('existing')
74+
setOnboardingChoice('developer')
7575
router.push(ROUTES.onboarding.install)
7676
}, [setOnboardingChoice, router])
7777

apps/web/src/app/(onboarding)/onboarding/install/_components/InviteDeveloperModal.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import { Text } from '@latitude-data/web-ui/atoms/Text'
1515
import { TableSkeleton } from '@latitude-data/web-ui/molecules/TableSkeleton'
1616
import useUsers from '$/stores/users'
1717
import useCurrentWorkspace from '$/stores/currentWorkspace'
18+
import useLatitudeAction from '$/hooks/useLatitudeAction'
19+
import { publishEventAction } from '$/actions/events/publishEventAction'
1820
import { useCallback, useState } from 'react'
1921

2022
function NewUserRow({
@@ -75,10 +77,17 @@ export default function InviteDeveloperModal({
7577
}) {
7678
const { data: workspace } = useCurrentWorkspace()
7779
const { data: users, isLoading, invite } = useUsers()
80+
const { execute: publishEvent } = useLatitudeAction(publishEventAction)
7881

7982
const onInviteUser = useCallback(
80-
(name: string, email: string) => invite({ name, email }),
81-
[invite],
83+
(name: string, email: string) => {
84+
invite({ name, email })
85+
publishEvent({
86+
eventType: 'onboardingUserInvited',
87+
payload: { invitedEmail: email },
88+
})
89+
},
90+
[invite, publishEvent],
8291
)
8392

8493
return (

apps/web/src/app/(onboarding)/onboarding/install/_lib/OnboardingInstallProvider.tsx

Lines changed: 0 additions & 37 deletions
This file was deleted.

apps/web/src/app/(onboarding)/onboarding/install/frameworks.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ const completion = await client.chat.completions.create({ ... });
5151
},
5252
{
5353
name: 'Anthropic',
54-
icon: 'code',
54+
icon: 'anthropic',
5555
autoInstrumentation: {
5656
import: "import * as Anthropic from '@anthropic-ai/sdk'",
5757
line: 'anthropic: Anthropic, // This enables automatic tracing for the Anthropic SDK',
@@ -67,7 +67,7 @@ const response = await client.messages.create({ ... });
6767
},
6868
{
6969
name: 'Azure OpenAI',
70-
icon: 'code',
70+
icon: 'openai',
7171
autoInstrumentation: {
7272
import: "import OpenAI from 'openai'",
7373
line: 'openai: OpenAI, // This enables automatic tracing for the Azure OpenAI SDK',
@@ -99,7 +99,7 @@ const response = await client.generate({ ... });
9999
},
100100
{
101101
name: 'Amazon Bedrock',
102-
icon: 'code',
102+
icon: 'amazonBedrock',
103103
autoInstrumentation: {
104104
import: "import * as Bedrock from '@aws-sdk/client-bedrock-runtime'",
105105
line: 'bedrock: Bedrock, // This enables automatic tracing for the Amazon Bedrock SDK',
@@ -134,7 +134,7 @@ const response = await client.generate({ ... });
134134
},
135135
{
136136
name: 'Vertex AI',
137-
icon: 'code',
137+
icon: 'googleVertex',
138138
autoInstrumentation: {
139139
import: "import * as VertexAI from '@google-cloud/vertexai'",
140140
line: 'vertexai: VertexAI, // This enables automatic tracing for the Google Vertex AI SDK',
@@ -151,7 +151,7 @@ const result = await model.generateContent({ ... });
151151
},
152152
{
153153
name: 'Google AI Platform',
154-
icon: 'code',
154+
icon: 'googleVertex',
155155
autoInstrumentation: {
156156
import: "import * as AIPlatform from '@google-cloud/aiplatform'",
157157
line: 'aiplatform: AIPlatform, // This enables automatic tracing for the Google AI Platform SDK',
@@ -225,7 +225,7 @@ const { text } = await generateText({
225225
},
226226
{
227227
name: 'Gemini',
228-
icon: 'sparkles',
228+
icon: 'googleGemini',
229229
manualInstrumentation: {
230230
completion: {
231231
imports: ["import { GoogleGenAI } from '@google/genai'"],

apps/web/src/app/(onboarding)/onboarding/install/layout.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { ReactNode } from 'react'
44
import { getOnboardingResources } from '$/data-access/onboarding'
55
import { redirect } from 'next/navigation'
66
import { ROUTES } from '$/services/routes'
7-
import { OnboardingInstallProvider } from './_lib/OnboardingInstallProvider'
7+
import { ProjectProvider } from '$/app/providers/ProjectProvider'
88

99
export default async function OnboardingInstallLayout({
1010
children,
@@ -16,9 +16,5 @@ export default async function OnboardingInstallLayout({
1616
return redirect(ROUTES.onboarding.choice)
1717
}
1818

19-
return (
20-
<OnboardingInstallProvider project={project}>
21-
{children}
22-
</OnboardingInstallProvider>
23-
)
19+
return <ProjectProvider project={project}>{children}</ProjectProvider>
2420
}

apps/web/src/app/(onboarding)/onboarding/install/page.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
'use client'
22

3-
import { useState, useCallback } from 'react'
3+
import { useState, useCallback, useEffect } from 'react'
44
import { Button } from '@latitude-data/web-ui/atoms/Button'
55
import { Icon } from '@latitude-data/web-ui/atoms/Icons'
66
import { Text } from '@latitude-data/web-ui/atoms/Text'
77
import useLatitudeAction from '$/hooks/useLatitudeAction'
88
import { skipOnboardingAction } from '$/actions/onboarding/skip'
9+
import { publishEventAction } from '$/actions/events/publishEventAction'
910
import InviteDeveloperModal from './_components/InviteDeveloperModal'
1011
import {
1112
useLocalStorage,
1213
AppLocalStorage,
1314
} from '@latitude-data/web-ui/hooks/useLocalStorage'
1415
import useApiKeys from '$/stores/apiKeys'
15-
import { useOnboardingInstall } from './_lib/OnboardingInstallProvider'
1616
import { FrameworkDefinition, FRAMEWORKS } from './frameworks'
1717
import InstallationModal from './_components/InstallationModal'
1818
import { useHover } from '@latitude-data/web-ui/browser'
1919
import { cn } from '@latitude-data/web-ui/utils'
20+
import { useCurrentProject } from '$/app/providers/ProjectProvider'
2021

2122
function FrameworkCard({
2223
framework,
@@ -58,6 +59,7 @@ export default function OnboardingInstallPage() {
5859
const [inviteModalOpen, setInviteModalOpen] = useState(false)
5960
const { execute: skipOnboarding, isPending: isSkipping } =
6061
useLatitudeAction(skipOnboardingAction)
62+
const { execute: publishEvent } = useLatitudeAction(publishEventAction)
6163
const { setValue: setReplayOnboarding } = useLocalStorage<boolean>({
6264
key: AppLocalStorage.replayOnboarding,
6365
defaultValue: false,
@@ -66,8 +68,12 @@ export default function OnboardingInstallPage() {
6668
const [selectedFramework, setSelectedFramework] =
6769
useState<FrameworkDefinition | null>(null)
6870

71+
useEffect(() => {
72+
publishEvent({ eventType: 'installOnboardingPageVisited' })
73+
}, []) // eslint-disable-line react-hooks/exhaustive-deps
74+
6975
const { data: apiKeys } = useApiKeys()
70-
const { project } = useOnboardingInstall()
76+
const { project } = useCurrentProject()
7177

7278
const firstApiKey = apiKeys?.[0]
7379

@@ -102,14 +108,14 @@ export default function OnboardingInstallPage() {
102108
</div>
103109
<div className='flex items-center gap-3'>
104110
<Button
105-
variant='outline'
106111
fancy
107112
onClick={onOpenInviteModal}
108113
iconProps={{ name: 'userRoundPlus', placement: 'left' }}
109114
>
110115
Invite developers
111116
</Button>
112117
<Button
118+
variant='outline'
113119
fancy
114120
onClick={handleSkip}
115121
disabled={isSkipping}

packages/core/src/events/events.d.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -757,6 +757,23 @@ export type PasteYourPromptOnboardingCompleted = LatitudeEventGeneric<
757757
}
758758
>
759759

760+
export type InstallOnboardingPageVisited = LatitudeEventGeneric<
761+
'installOnboardingPageVisited',
762+
{
763+
workspaceId: number
764+
userEmail: string
765+
}
766+
>
767+
768+
export type OnboardingUserInvited = LatitudeEventGeneric<
769+
'onboardingUserInvited',
770+
{
771+
workspaceId: number
772+
userEmail: string
773+
invitedEmail: string
774+
}
775+
>
776+
760777
export type IssueCreatedEvent = LatitudeEventGeneric<
761778
'issueCreated',
762779
{
@@ -995,6 +1012,8 @@ export type LatitudeEvent =
9951012
| GenerateDatasetOnboardingPageVisited
9961013
| RunExperimentOnboardingPageVisited
9971014
| PasteYourPromptOnboardingCompleted
1015+
| InstallOnboardingPageVisited
1016+
| OnboardingUserInvited
9981017
| IssueCreatedEvent
9991018
| IssueUpdatedEvent
10001019
| IssueDeletedEvent
@@ -1083,6 +1102,8 @@ export interface IEventsHandlers {
10831102
generateDatasetOnboardingPageVisited: EventHandler<GenerateDatasetOnboardingPageVisited>[]
10841103
runExperimentOnboardingPageVisited: EventHandler<RunExperimentOnboardingPageVisited>[]
10851104
pasteYourPromptOnboardingCompleted: EventHandler<PasteYourPromptOnboardingCompleted>[]
1105+
installOnboardingPageVisited: EventHandler<InstallOnboardingPageVisited>[]
1106+
onboardingUserInvited: EventHandler<OnboardingUserInvited>[]
10861107
issueCreated: EventHandler<IssueCreatedEvent>[]
10871108
issueUpdated: EventHandler<IssueUpdatedEvent>[]
10881109
issueDeleted: EventHandler<IssueDeletedEvent>[]

packages/core/src/events/handlers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ export const EventHandlers: IEventsHandlers = {
110110
generateDatasetOnboardingPageVisited: [],
111111
runExperimentOnboardingPageVisited: [],
112112
pasteYourPromptOnboardingCompleted: [],
113+
installOnboardingPageVisited: [],
114+
onboardingUserInvited: [],
113115
issueCreated: [],
114116
issueUpdated: [],
115117
issueDeleted: [],

0 commit comments

Comments
 (0)