Skip to content

Commit 70f88e4

Browse files
msukkariclaude
andcommitted
feat(web): add PostHog event for askgh repo index trigger
Fires `wa_askgh_repo_index_triggered` with owner, repo, and repoId when a user triggers a new repository to be indexed in the Ask GitHub flow (i.e., when `addGithubRepo` is called for a repo that doesn't yet exist). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 5a00847 commit 70f88e4

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

packages/web/src/app/[domain]/askgh/[owner]/[repo]/components/repoIndexedGuard.tsx

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,40 @@
11
'use client';
22

3+
import { captureEvent } from "@/hooks/useCaptureEvent";
34
import { ServiceError } from "@/lib/serviceError";
45
import { unwrapServiceError } from "@/lib/utils";
56
import { useQuery } from "@tanstack/react-query";
67
import { Loader2 } from "lucide-react";
78
import { usePrevious } from "@uidotdev/usehooks";
8-
import { useEffect } from "react";
9+
import { useEffect, useRef } from "react";
910
import { useBrowserNotification } from "@/hooks/useBrowserNotification";
1011
import { RepoInfo } from "../types";
1112

1213
const REINDEX_INTERVAL_MS = 2000;
1314

1415
interface Props {
1516
initialRepoInfo: RepoInfo;
17+
isNewlyTriggered: boolean;
18+
owner: string;
19+
repo: string;
1620
children: React.ReactNode;
1721
}
1822

19-
export function RepoIndexedGuard({ initialRepoInfo, children }: Props) {
23+
export function RepoIndexedGuard({ initialRepoInfo, isNewlyTriggered, owner, repo, children }: Props) {
2024
const { requestPermission, showNotification } = useBrowserNotification();
25+
const hasFiredEvent = useRef(false);
26+
27+
// Fire event when a new repo index is triggered
28+
useEffect(() => {
29+
if (isNewlyTriggered && !hasFiredEvent.current) {
30+
hasFiredEvent.current = true;
31+
captureEvent('wa_askgh_repo_index_triggered', {
32+
owner,
33+
repo,
34+
repoId: initialRepoInfo.id,
35+
});
36+
}
37+
}, [isNewlyTriggered, owner, repo, initialRepoInfo.id]);
2138

2239
const { data: repoInfo, isError } = useQuery({
2340
queryKey: ['repo-status', initialRepoInfo.id],

packages/web/src/app/[domain]/askgh/[owner]/[repo]/page.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default async function GitHubRepoPage(props: PageProps) {
2020
const { owner, repo } = params;
2121
const session = await auth();
2222

23-
const repoId = await (async () => {
23+
const { repoId, isNewlyTriggered } = await (async () => {
2424
// 1. Look up repo by owner/repo
2525
const displayName = `${owner}/${repo}`;
2626
const existingRepo = await prisma.repo.findFirst({
@@ -33,7 +33,7 @@ export default async function GitHubRepoPage(props: PageProps) {
3333
});
3434

3535
if (existingRepo) {
36-
return existingRepo.id;
36+
return { repoId: existingRepo.id, isNewlyTriggered: false };
3737
}
3838

3939
// 2. If it doesn't exist, attempt to create it
@@ -43,15 +43,15 @@ export default async function GitHubRepoPage(props: PageProps) {
4343
throw new ServiceErrorException(response);
4444
}
4545

46-
return response.repoId;
46+
return { repoId: response.repoId, isNewlyTriggered: true };
4747
})();
4848

4949
const repoInfo = await unwrapServiceError(getRepoInfo(repoId));
5050
const languageModels = await unwrapServiceError(getConfiguredLanguageModelsInfo());
5151
const providers = getIdentityProviderMetadata();
5252

5353
return (
54-
<RepoIndexedGuard initialRepoInfo={repoInfo}>
54+
<RepoIndexedGuard initialRepoInfo={repoInfo} isNewlyTriggered={isNewlyTriggered} owner={owner} repo={repo}>
5555
<CustomSlateEditor>
5656
<LandingPage
5757
languageModels={languageModels}

packages/web/src/lib/posthogEvents.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,11 @@ export type PosthogEventMap = {
232232
},
233233
//////////////////////////////////////////////////////////////////
234234
wa_askgh_login_wall_prompted: {},
235+
wa_askgh_repo_index_triggered: {
236+
owner: string,
237+
repo: string,
238+
repoId: number,
239+
},
235240
//////////////////////////////////////////////////////////////////
236241
wa_demo_docs_link_pressed: {},
237242
wa_demo_search_example_card_pressed: {

0 commit comments

Comments
 (0)