Skip to content

Commit 1401e3f

Browse files
committed
Refactor event tracking to use trackAdEvent function
- Replaced instances of trackEvent with trackAdEvent across multiple components to unify event tracking methodology. - Updated PricingCard, HomePage, ComparisonPage, CustomHeader, and PricingSection components to ensure consistent tracking for signup, demo, and login actions. - Removed the obsolete trackEvent file to streamline the codebase and enhance maintainability.
1 parent d32709b commit 1401e3f

File tree

7 files changed

+71
-30
lines changed

7 files changed

+71
-30
lines changed

client/src/app/subscribe/components/PricingCard.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@ import { cn } from "@/lib/utils";
55
import { toast } from "sonner";
66
import { BACKEND_URL } from "@/lib/const";
77
import { authClient } from "@/lib/auth";
8-
import { EVENT_TIERS, STANDARD_FEATURES, PRO_FEATURES, FREE_FEATURES, findPriceForTier, formatEventTier } from "./utils";
8+
import {
9+
EVENT_TIERS,
10+
STANDARD_FEATURES,
11+
PRO_FEATURES,
12+
FREE_FEATURES,
13+
findPriceForTier,
14+
formatEventTier,
15+
} from "./utils";
916
import { getStripePrices } from "../../../lib/stripe";
17+
import { trackAdEvent } from "../../../lib/trackAdevent";
1018

1119
export function PricingCard({ isLoggedIn }: { isLoggedIn: boolean }) {
1220
const stripePrices = getStripePrices();
@@ -66,6 +74,7 @@ export function PricingCard({ isLoggedIn }: { isLoggedIn: boolean }) {
6674
});
6775

6876
const data = await response.json();
77+
trackAdEvent("checkout", { tier: selectedTierPrice.name });
6978

7079
if (!response.ok) {
7180
throw new Error(data.error || "Failed to create checkout session.");

client/src/lib/trackAdEvent.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/* eslint-disable @typescript-eslint/no-explicit-any */
2+
declare global {
3+
interface Window {
4+
twq?: (action: string, eventId: string, data?: any) => void;
5+
fbq?: (action: string, eventName: string, data?: any) => void;
6+
}
7+
}
8+
9+
export function trackAdEvent(eventName: "signup" | "checkout" | "login", eventData?: Record<string, any>) {
10+
// Track X/Twitter lead event for signup-related buttons
11+
if (typeof window !== "undefined" && window.twq) {
12+
if (["signup"].some(event => eventName.toLowerCase().includes(event))) {
13+
window.twq("event", "tw-qj0po-qjdz6", {});
14+
}
15+
if (["demo"].some(event => eventName.toLowerCase().includes(event))) {
16+
window.twq("event", "tw-qj0po-qje0f", {});
17+
}
18+
if (["checkout"].some(event => eventName.toLowerCase().includes(event))) {
19+
window.twq("event", "tw-qj0po-qjju2", {});
20+
}
21+
}
22+
23+
// Track Facebook lead event
24+
if (typeof window !== "undefined" && window.fbq) {
25+
if (["signup"].some(event => eventName.toLowerCase().includes(event))) {
26+
window.fbq("track", "Lead", eventData);
27+
}
28+
if (["checkout"].some(event => eventName.toLowerCase().includes(event))) {
29+
window.fbq("track", "InitiateCheckout", eventData);
30+
}
31+
// Track custom events for other button clicks
32+
if (!["signup", "demo"].some(event => eventName.toLowerCase().includes(event))) {
33+
window.fbq("trackCustom", eventName, eventData);
34+
}
35+
}
36+
}

docs-v2/src/app/(home)/page.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Link from "next/link";
44
import { CheckCircle } from "lucide-react";
55
import { cn } from "@/lib/utils";
66
import { GitHubStarButton } from "@/components/GitHubStarButton";
7-
import { trackEvent } from "@/lib/trackEvent";
7+
import { trackAdEvent } from "@/lib/trackAdEvent";
88
import { EventTracking } from "@/components/Cards/EventTracking";
99
import { GoalConversion } from "@/components/Cards/GoalConversion";
1010
import { RealTimeAnalytics } from "@/components/Cards/RealTimeAnalytics";
@@ -114,15 +114,15 @@ export default function HomePage() {
114114
data-rybbit-prop-location="hero"
115115
>
116116
<button
117-
onClick={() => trackEvent("signup", { location: "hero", button_text: "Track your site" })}
117+
onClick={() => trackAdEvent("signup", { location: "hero", button_text: "Track your site" })}
118118
className="w-full sm:w-auto bg-emerald-600 hover:bg-emerald-500 text-white font-medium px-5 py-3 rounded-lg shadow-lg shadow-emerald-900/20 transform hover:-translate-y-0.5 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-emerald-500 focus:ring-opacity-50 cursor-pointer"
119119
>
120120
Track your site
121121
</button>
122122
</Link>
123123
<Link href="https://demo.rybbit.io/21" className="w-full sm:w-auto" data-rybbit-event="demo">
124124
<button
125-
onClick={() => trackEvent("demo", { location: "hero", button_text: "See live demo" })}
125+
onClick={() => trackAdEvent("demo", { location: "hero", button_text: "See live demo" })}
126126
className="w-full sm:w-auto bg-neutral-800 hover:bg-neutral-700 text-white font-medium px-5 py-3 rounded-lg border border-neutral-600 transform hover:-translate-y-0.5 transition-all duration-200 hover:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-neutral-400 focus:ring-opacity-50 cursor-pointer"
127127
>
128128
See live demo
@@ -480,7 +480,9 @@ export default function HomePage() {
480480
<div className="flex flex-col sm:flex-row items-center justify-center gap-4 md:gap-6 mb-6 md:mb-8 w-full sm:w-auto">
481481
<Link href="https://app.rybbit.io/signup" className="w-full sm:w-auto">
482482
<button
483-
onClick={() => trackEvent("signup", { location: "bottom_cta", button_text: "Track your site for free" })}
483+
onClick={() =>
484+
trackAdEvent("signup", { location: "bottom_cta", button_text: "Track your site for free" })
485+
}
484486
className="w-full sm:w-auto bg-emerald-600 hover:bg-emerald-500 text-white text-lg font-medium px-6 md:px-8 py-3 md:py-4 rounded-lg shadow-lg shadow-emerald-900/20 transform hover:-translate-y-0.5 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-emerald-500 focus:ring-opacity-50 cursor-pointer"
485487
>
486488
Track your site for free

docs-v2/src/app/compare/components/ComparisonPage.tsx

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { CheckCircle, CircleMinus, CircleX } from "lucide-react";
2-
import { trackEvent } from "../../../lib/trackEvent";
3-
import Link from "next/link";
4-
import Image from "next/image";
5-
import { cn } from "../../../lib/utils";
1+
import { CheckCircle, CircleMinus } from "lucide-react";
62
import { Tilt_Warp } from "next/font/google";
3+
import Image from "next/image";
4+
import Link from "next/link";
75
import React from "react";
6+
import { trackAdEvent } from "../../../lib/trackAdEvent";
7+
import { cn } from "../../../lib/utils";
88

99
const tilt_wrap = Tilt_Warp({
1010
subsets: ["latin"],
@@ -24,19 +24,11 @@ export interface ComparisonSection {
2424

2525
export interface ComparisonPageProps {
2626
competitorName: string;
27-
competitorLogo?: React.ReactNode;
2827
sections: ComparisonSection[];
29-
demoUrl?: string;
3028
comparisonContent?: React.ReactNode;
3129
}
3230

33-
export function ComparisonPage({
34-
competitorName,
35-
competitorLogo,
36-
sections,
37-
demoUrl = "https://demo.rybbit.io/21",
38-
comparisonContent,
39-
}: ComparisonPageProps) {
31+
export function ComparisonPage({ competitorName, sections, comparisonContent }: ComparisonPageProps) {
4032
const renderFeatureValue = (value: string | boolean) => {
4133
if (typeof value === "boolean") {
4234
return value ? (
@@ -83,15 +75,15 @@ export function ComparisonPage({
8375
data-rybbit-prop-location="hero"
8476
>
8577
<button
86-
onClick={() => trackEvent("signup", { location: "hero", button_text: "Track your site" })}
78+
onClick={() => trackAdEvent("signup", { location: "hero", button_text: "Track your site" })}
8779
className="w-full sm:w-auto bg-emerald-600 hover:bg-emerald-500 text-white font-medium px-5 py-3 rounded-lg shadow-lg shadow-emerald-900/20 transform hover:-translate-y-0.5 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-emerald-500 focus:ring-opacity-50 cursor-pointer"
8880
>
8981
Track your site
9082
</button>
9183
</Link>
9284
<Link href="https://demo.rybbit.io/21" className="w-full sm:w-auto" data-rybbit-event="demo">
9385
<button
94-
onClick={() => trackEvent("demo", { location: "hero", button_text: "See live demo" })}
86+
onClick={() => trackAdEvent("demo", { location: "hero", button_text: "See live demo" })}
9587
className="w-full sm:w-auto bg-neutral-800 hover:bg-neutral-700 text-white font-medium px-5 py-3 rounded-lg border border-neutral-600 transform hover:-translate-y-0.5 transition-all duration-200 hover:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-neutral-400 focus:ring-opacity-50 cursor-pointer"
9688
>
9789
See live demo
@@ -212,7 +204,9 @@ export function ComparisonPage({
212204
<div className="flex flex-col sm:flex-row items-center justify-center gap-4 md:gap-6 mb-6 md:mb-8 w-full sm:w-auto">
213205
<Link href="https://app.rybbit.io/signup" className="w-full sm:w-auto">
214206
<button
215-
onClick={() => trackEvent("signup", { location: "bottom_cta", button_text: "Track your site for free" })}
207+
onClick={() =>
208+
trackAdEvent("signup", { location: "bottom_cta", button_text: "Track your site for free" })
209+
}
216210
className="w-full sm:w-auto bg-emerald-600 hover:bg-emerald-500 text-white text-lg font-medium px-6 md:px-8 py-3 md:py-4 rounded-lg shadow-lg shadow-emerald-900/20 transform hover:-translate-y-0.5 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-emerald-500 focus:ring-opacity-50 cursor-pointer"
217211
>
218212
Track your site for free

docs-v2/src/components/CustomHeader.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Image from "next/image";
44
import Link from "next/link";
55
import { useState } from "react";
66
import { Menu, X } from "lucide-react";
7-
import { trackEvent } from "@/lib/trackEvent";
7+
import { trackAdEvent } from "@/lib/trackAdEvent";
88

99
export function CustomHeader() {
1010
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
@@ -73,7 +73,7 @@ export function CustomHeader() {
7373
{/* Login Button */}
7474
<a href="https://app.rybbit.io" target="_blank" rel="noopener noreferrer">
7575
<button
76-
onClick={() => trackEvent("login", { location: "header" })}
76+
onClick={() => trackAdEvent("login", { location: "header" })}
7777
className="bg-neutral-800 hover:bg-neutral-700 text-white text-sm font-medium px-3 py-1.5 rounded-md border border-neutral-600 transform hover:-translate-y-0.5 transition-all duration-200 hover:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-neutral-400 focus:ring-opacity-50"
7878
>
7979
Login
@@ -140,7 +140,7 @@ export function CustomHeader() {
140140
<div className="pt-2 border-t border-neutral-800">
141141
<a href="https://app.rybbit.io" target="_blank" rel="noopener noreferrer" className="block w-full">
142142
<button
143-
onClick={() => trackEvent("login", { location: "header" })}
143+
onClick={() => trackAdEvent("login", { location: "header" })}
144144
className="w-full bg-neutral-800 hover:bg-neutral-700 text-white text-sm font-medium px-3 py-2 rounded-md border border-neutral-600"
145145
>
146146
Login

docs-v2/src/components/PricingSection.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Check, X, CheckCircle } from "lucide-react";
55
import Link from "next/link";
66
import { useState } from "react";
77
import { cn } from "@/lib/utils";
8-
import { trackEvent } from "@/lib/trackEvent";
8+
import { trackAdEvent } from "@/lib/trackAdEvent";
99

1010
// Available event tiers for the slider
1111
const EVENT_TIERS = [100_000, 250_000, 500_000, 1_000_000, 2_000_000, 5_000_000, 10_000_000, "Custom"];
@@ -197,7 +197,7 @@ export function PricingSection() {
197197

198198
<Link href="https://app.rybbit.io/signup" className="w-full block">
199199
<button
200-
onClick={() => trackEvent("signup", { location: "pricing" })}
200+
onClick={() => trackAdEvent("signup", { location: "pricing" })}
201201
data-rybbit-event="signup"
202202
data-rybbit-prop-location="free"
203203
className="w-full bg-neutral-700 hover:bg-neutral-600 text-white font-medium px-5 py-3 rounded-lg border border-neutral-600 transform hover:-translate-y-0.5 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-neutral-400 focus:ring-opacity-50 cursor-pointer"
@@ -253,7 +253,7 @@ export function PricingSection() {
253253
) : (
254254
<Link href="https://app.rybbit.io/signup" className="w-full block">
255255
<button
256-
onClick={() => trackEvent("signup", { location: "pricing" })}
256+
onClick={() => trackAdEvent("signup", { location: "pricing" })}
257257
data-rybbit-event="signup"
258258
data-rybbit-prop-location="standard"
259259
className="w-full bg-emerald-600 hover:bg-emerald-500 text-white font-medium px-5 py-3 rounded-lg shadow-lg shadow-emerald-900/20 transform hover:-translate-y-0.5 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-emerald-500 focus:ring-opacity-50 cursor-pointer"
@@ -318,7 +318,7 @@ export function PricingSection() {
318318
) : (
319319
<Link href="https://app.rybbit.io/signup" className="w-full block">
320320
<button
321-
onClick={() => trackEvent("signup", { location: "pricing" })}
321+
onClick={() => trackAdEvent("signup", { location: "pricing" })}
322322
data-rybbit-event="signup"
323323
data-rybbit-prop-location="pro"
324324
className="w-full bg-emerald-600 hover:bg-emerald-500 text-white font-medium px-5 py-3 rounded-lg shadow-lg shadow-emerald-900/20 transform hover:-translate-y-0.5 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-emerald-500 focus:ring-opacity-50 cursor-pointer"

docs-v2/src/lib/trackEvent.ts renamed to docs-v2/src/lib/trackAdEvent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ declare global {
66
}
77
}
88

9-
export function trackEvent(eventName: "signup" | "demo" | "login", eventData?: Record<string, any>) {
9+
export function trackAdEvent(eventName: "signup" | "demo" | "login", eventData?: Record<string, any>) {
1010
// Track X/Twitter lead event for signup-related buttons
1111
if (typeof window !== "undefined" && window.twq) {
1212
if (["signup"].some(event => eventName.toLowerCase().includes(event))) {

0 commit comments

Comments
 (0)