Skip to content

Commit b6cd1ce

Browse files
authored
Enhance plausible tracking for registrations (#343)
1 parent 5f1c20e commit b6cd1ce

File tree

7 files changed

+39
-6
lines changed

7 files changed

+39
-6
lines changed

packages/nextjs/app/_components/RegisterUser.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,13 @@ export const RegisterUser = () => {
5858
)}
5959
<button
6060
className="flex items-center justify-center py-1.5 lg:py-2 px-3 lg:px-4 border-2 border-primary rounded-full bg-base-300 hover:bg-base-200 transition-colors cursor-pointer mt-4 text-sm w-full"
61-
onClick={() => handleRegister({ referrer: storedReferrer, originalUtmParams: parsedUtmParams })}
61+
onClick={() =>
62+
handleRegister({
63+
referrer: storedReferrer,
64+
originalUtmParams: parsedUtmParams,
65+
eventTrigger: "header_register_tooltip_button",
66+
})
67+
}
6268
disabled={isRegistering}
6369
data-testid="register-user-tooltip-button"
6470
>

packages/nextjs/app/api/users/register/route.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ type RegisterPayload = {
1111
signature: `0x${string}`;
1212
referrer: string | null;
1313
originalUtmParams?: Record<string, string>;
14+
eventPath?: string;
15+
eventTrigger?: string;
1416
};
1517

1618
export async function POST(req: Request) {
1719
try {
18-
const { address, signature, referrer, originalUtmParams } = (await req.json()) as RegisterPayload;
20+
const { address, signature, referrer, originalUtmParams, eventPath, eventTrigger } =
21+
(await req.json()) as RegisterPayload;
1922

2023
if (!address || !signature) {
2124
return NextResponse.json({ error: "Address and signature are required" }, { status: 400 });
@@ -53,8 +56,11 @@ export async function POST(req: Request) {
5356
originalUtmCampaign: originalUtmParams?.utm_campaign,
5457
originalUtmTerm: originalUtmParams?.utm_term,
5558
originalUtmContent: originalUtmParams?.utm_content,
59+
eventPath: eventPath ?? undefined,
60+
eventTrigger: eventTrigger ?? undefined,
5661
},
5762
req,
63+
eventPath ? `https://speedrunethereum.com${eventPath}` : undefined,
5864
);
5965
} catch (e) {
6066
console.error(`Error tracking plausible event ${PlausibleEvent.SIGNUP_SRE} for user ${address}`);

packages/nextjs/app/challenge/[challengeId]/_components/ConnectAndRegisterBanner.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export const ConnectAndRegisterBanner = () => {
5858
handleRegister({
5959
referrer: storedReferrer,
6060
originalUtmParams: parsedUtmParams,
61+
eventTrigger: "challenge_banner_register_button",
6162
})
6263
}
6364
disabled={isRegistering}

packages/nextjs/app/start/_components/ConnectAndRegisterSection.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ export const ConnectAndRegisterSection = () => {
2525
const handleRegisterClick = async () => {
2626
setIsLocalLoading(true);
2727
try {
28-
await handleRegister({ referrer: storedReferrer, originalUtmParams: parsedUtmParams });
28+
await handleRegister({
29+
referrer: storedReferrer,
30+
originalUtmParams: parsedUtmParams,
31+
eventTrigger: "start_register_button",
32+
});
2933
} catch (error) {
3034
console.error("Registration failed:", error);
3135
} finally {

packages/nextjs/hooks/useUserRegister.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,26 @@ export function useUserRegister() {
1414
mutationFn: async ({
1515
referrer,
1616
originalUtmParams,
17+
eventTrigger,
1718
}: {
1819
referrer: string | null;
1920
originalUtmParams?: Record<string, string>;
21+
eventTrigger?: string;
2022
}) => {
2123
if (!address) throw new Error("Wallet not connected");
2224

2325
const signature = await signWithNotification(EIP_712_TYPED_DATA__USER_REGISTER);
2426

25-
return registerUser({ address, signature, referrer, originalUtmParams });
27+
const eventPath = typeof window !== "undefined" ? window.location.pathname : undefined;
28+
29+
return registerUser({
30+
address,
31+
signature,
32+
referrer,
33+
originalUtmParams,
34+
eventPath,
35+
eventTrigger,
36+
});
2637
},
2738
onSuccess: user => {
2839
queryClient.setQueryData(["user", address], user);

packages/nextjs/services/api/users/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,22 @@ export async function registerUser({
2222
signature,
2323
referrer,
2424
originalUtmParams,
25+
eventPath,
26+
eventTrigger,
2527
}: {
2628
address: string;
2729
signature: string;
2830
referrer: string | null;
2931
originalUtmParams?: Record<string, string>;
32+
eventPath?: string;
33+
eventTrigger?: string;
3034
}) {
3135
const response = await fetch("/api/users/register", {
3236
method: "POST",
3337
headers: {
3438
"Content-Type": "application/json",
3539
},
36-
body: JSON.stringify({ address, signature, referrer, originalUtmParams }),
40+
body: JSON.stringify({ address, signature, referrer, originalUtmParams, eventPath, eventTrigger }),
3741
});
3842

3943
const data = await response.json();

packages/nextjs/services/plausible.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ export async function trackPlausibleEvent(
1010
eventName: PlausibleEvent,
1111
props?: Record<string, string | number | boolean | undefined>,
1212
request?: Request,
13+
eventUrl?: string,
1314
) {
1415
const payload = {
1516
domain: "speedrunethereum.com",
1617
name: eventName,
17-
url: `https://speedrunethereum.com`,
18+
url: eventUrl ?? `https://speedrunethereum.com`,
1819
props,
1920
};
2021

0 commit comments

Comments
 (0)