Skip to content

Commit d32709b

Browse files
committed
Refactor button components for event tracking and integrate Facebook pixel
- Replaced TrackedButton components with standard button elements across various pages to streamline event tracking using a custom trackEvent function. - Integrated Facebook pixel tracking script into the layout component for enhanced analytics capabilities. - Updated event tracking for signup and demo actions to ensure accurate data collection.
1 parent ca26899 commit d32709b

File tree

7 files changed

+86
-98
lines changed

7 files changed

+86
-98
lines changed

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

Lines changed: 10 additions & 13 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 { TrackedButton } from "@/components/TrackedButton";
7+
import { trackEvent } from "@/lib/trackEvent";
88
import { EventTracking } from "@/components/Cards/EventTracking";
99
import { GoalConversion } from "@/components/Cards/GoalConversion";
1010
import { RealTimeAnalytics } from "@/components/Cards/RealTimeAnalytics";
@@ -113,22 +113,20 @@ export default function HomePage() {
113113
data-rybbit-event="signup"
114114
data-rybbit-prop-location="hero"
115115
>
116-
<TrackedButton
117-
eventName="signup_click"
118-
eventData={{ location: "hero", button_text: "Track your site" }}
116+
<button
117+
onClick={() => trackEvent("signup", { location: "hero", button_text: "Track your site" })}
119118
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"
120119
>
121120
Track your site
122-
</TrackedButton>
121+
</button>
123122
</Link>
124123
<Link href="https://demo.rybbit.io/21" className="w-full sm:w-auto" data-rybbit-event="demo">
125-
<TrackedButton
126-
eventName="demo_click"
127-
eventData={{ location: "hero", button_text: "See live demo" }}
124+
<button
125+
onClick={() => trackEvent("demo", { location: "hero", button_text: "See live demo" })}
128126
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"
129127
>
130128
See live demo
131-
</TrackedButton>
129+
</button>
132130
</Link>
133131
</div>
134132
<p className="text-neutral-400 text-xs md:text-sm flex items-center justify-center gap-2 mt-6">
@@ -481,13 +479,12 @@ export default function HomePage() {
481479

482480
<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">
483481
<Link href="https://app.rybbit.io/signup" className="w-full sm:w-auto">
484-
<TrackedButton
485-
eventName="signup_click"
486-
eventData={{ location: "bottom_cta", button_text: "Track your site for free" }}
482+
<button
483+
onClick={() => trackEvent("signup", { location: "bottom_cta", button_text: "Track your site for free" })}
487484
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"
488485
>
489486
Track your site for free
490-
</TrackedButton>
487+
</button>
491488
</Link>
492489
{/* <Link href="https://docs.tomato.gg" className="w-full sm:w-auto">
493490
<button className="w-full sm:w-auto bg-neutral-800 hover:bg-neutral-700 text-white font-medium px-6 md:px-8 py-3 md:py-4 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">

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

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { CheckCircle, CircleMinus, CircleX } from "lucide-react";
2-
import { TrackedButton } from "../../../components/TrackedButton";
2+
import { trackEvent } from "../../../lib/trackEvent";
33
import Link from "next/link";
44
import Image from "next/image";
55
import { cn } from "../../../lib/utils";
@@ -82,22 +82,20 @@ export function ComparisonPage({
8282
data-rybbit-event="signup"
8383
data-rybbit-prop-location="hero"
8484
>
85-
<TrackedButton
86-
eventName="signup_click"
87-
eventData={{ location: "hero", button_text: "Track your site" }}
85+
<button
86+
onClick={() => trackEvent("signup", { location: "hero", button_text: "Track your site" })}
8887
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"
8988
>
9089
Track your site
91-
</TrackedButton>
90+
</button>
9291
</Link>
9392
<Link href="https://demo.rybbit.io/21" className="w-full sm:w-auto" data-rybbit-event="demo">
94-
<TrackedButton
95-
eventName="demo_click"
96-
eventData={{ location: "hero", button_text: "See live demo" }}
93+
<button
94+
onClick={() => trackEvent("demo", { location: "hero", button_text: "See live demo" })}
9795
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"
9896
>
9997
See live demo
100-
</TrackedButton>
98+
</button>
10199
</Link>
102100
</div>
103101
<p className="text-neutral-400 text-xs md:text-sm flex items-center justify-center gap-2 mt-6">
@@ -213,13 +211,12 @@ export function ComparisonPage({
213211

214212
<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">
215213
<Link href="https://app.rybbit.io/signup" className="w-full sm:w-auto">
216-
<TrackedButton
217-
eventName="signup_click"
218-
eventData={{ location: "bottom_cta", button_text: "Track your site for free" }}
214+
<button
215+
onClick={() => trackEvent("signup", { location: "bottom_cta", button_text: "Track your site for free" })}
219216
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"
220217
>
221218
Track your site for free
222-
</TrackedButton>
219+
</button>
223220
</Link>
224221
</div>
225222

docs-v2/src/app/layout.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,22 @@ a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,
106106
twq('config','qj0po');`,
107107
}}
108108
/>
109+
<Script
110+
id="facebook-pixel"
111+
strategy="afterInteractive"
112+
dangerouslySetInnerHTML={{
113+
__html: `!function(f,b,e,v,n,t,s)
114+
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
115+
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
116+
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
117+
n.queue=[];t=b.createElement(e);t.async=!0;
118+
t.src=v;s=b.getElementsByTagName(e)[0];
119+
s.parentNode.insertBefore(t,s)}(window,document,'script',
120+
'https://connect.facebook.net/en_US/fbevents.js');
121+
fbq('init', '816836311029789');
122+
fbq('track', 'PageView');`,
123+
}}
124+
/>
109125
</head>
110126
<Script
111127
src="https://demo.rybbit.io/api/script.js"

docs-v2/src/components/CustomHeader.tsx

Lines changed: 7 additions & 9 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 { TrackedButton } from "./TrackedButton";
7+
import { trackEvent } from "@/lib/trackEvent";
88

99
export function CustomHeader() {
1010
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
@@ -72,13 +72,12 @@ export function CustomHeader() {
7272

7373
{/* Login Button */}
7474
<a href="https://app.rybbit.io" target="_blank" rel="noopener noreferrer">
75-
<TrackedButton
76-
eventName="login_click"
77-
eventData={{ location: "header" }}
75+
<button
76+
onClick={() => trackEvent("login", { location: "header" })}
7877
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"
7978
>
8079
Login
81-
</TrackedButton>
80+
</button>
8281
</a>
8382
</div>
8483

@@ -140,13 +139,12 @@ export function CustomHeader() {
140139
</a>
141140
<div className="pt-2 border-t border-neutral-800">
142141
<a href="https://app.rybbit.io" target="_blank" rel="noopener noreferrer" className="block w-full">
143-
<TrackedButton
144-
eventName="login_click"
145-
eventData={{ location: "header" }}
142+
<button
143+
onClick={() => trackEvent("login", { location: "header" })}
146144
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"
147145
>
148146
Login
149-
</TrackedButton>
147+
</button>
150148
</a>
151149
</div>
152150
</div>

docs-v2/src/components/PricingSection.tsx

Lines changed: 10 additions & 13 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 { TrackedButton } from "./TrackedButton";
8+
import { trackEvent } from "@/lib/trackEvent";
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"];
@@ -196,15 +196,14 @@ export function PricingSection() {
196196
</div>
197197

198198
<Link href="https://app.rybbit.io/signup" className="w-full block">
199-
<TrackedButton
200-
eventName="signup_click"
201-
eventData={{ location: "pricing" }}
199+
<button
200+
onClick={() => trackEvent("signup", { location: "pricing" })}
202201
data-rybbit-event="signup"
203202
data-rybbit-prop-location="free"
204203
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"
205204
>
206205
Start for free
207-
</TrackedButton>
206+
</button>
208207
</Link>
209208
<div className="space-y-3 mt-6 mb-3">
210209
{FREE_FEATURES.map((item, i) => (
@@ -253,15 +252,14 @@ export function PricingSection() {
253252
</Link>
254253
) : (
255254
<Link href="https://app.rybbit.io/signup" className="w-full block">
256-
<TrackedButton
257-
eventName="signup_click"
258-
eventData={{ location: "pricing" }}
255+
<button
256+
onClick={() => trackEvent("signup", { location: "pricing" })}
259257
data-rybbit-event="signup"
260258
data-rybbit-prop-location="standard"
261259
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"
262260
>
263261
Try for free
264-
</TrackedButton>
262+
</button>
265263
</Link>
266264
)}
267265

@@ -319,15 +317,14 @@ export function PricingSection() {
319317
</Link>
320318
) : (
321319
<Link href="https://app.rybbit.io/signup" className="w-full block">
322-
<TrackedButton
323-
eventName="signup_click"
324-
eventData={{ location: "pricing" }}
320+
<button
321+
onClick={() => trackEvent("signup", { location: "pricing" })}
325322
data-rybbit-event="signup"
326323
data-rybbit-prop-location="pro"
327324
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"
328325
>
329326
Try for free
330-
</TrackedButton>
327+
</button>
331328
</Link>
332329
)}
333330

docs-v2/src/components/TrackedButton.tsx

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

docs-v2/src/lib/trackEvent.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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 trackEvent(eventName: "signup" | "demo" | "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+
}
19+
20+
// Track Facebook lead event
21+
if (typeof window !== "undefined" && window.fbq) {
22+
if (["signup"].some(event => eventName.toLowerCase().includes(event))) {
23+
window.fbq("track", "Lead", eventData);
24+
}
25+
// if (["demo"].some(event => eventName.toLowerCase().includes(event))) {
26+
// window.fbq("track", "ViewContent", eventData);
27+
// }
28+
// Track custom events for other button clicks
29+
if (!["signup", "demo"].some(event => eventName.toLowerCase().includes(event))) {
30+
window.fbq("trackCustom", eventName, eventData);
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)