Skip to content

Commit 9ba4fa2

Browse files
authored
Set analytics data on mezo campaign items (#3801)
Adds `src` query strings to identify banners clicked from Mezo, and sets analytics events to dispatch on banner click ## Testing - [ ] Check posthog events are being sent on banner/notification click Latest build: [extension-builds-3801](https://github.com/tahowallet/extension/suites/35630590546/artifacts/2745445456) (as of Thu, 13 Mar 2025 13:21:56 GMT).
2 parents 6502f82 + c2a3422 commit 9ba4fa2

File tree

3 files changed

+40
-7
lines changed

3 files changed

+40
-7
lines changed

background/lib/posthog.ts

+4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ export enum AnalyticsEvent {
1616
DAPP_CONNECTED = "Dapp Connected",
1717
VAULT_MIGRATION = "Migrate to newer vault version",
1818
VAULT_MIGRATION_FAILED = "Vault version migration failed",
19+
// Campaign events
20+
CAMPAIGN_MEZO_NFT_ELIGIBLE_BANNER = "in_wallet-claim_sats",
21+
CAMPAIGN_MEZO_NFT_BORROW_BANNER = "in_wallet-borrow_musd",
22+
CAMPAIGN_MEZO_NFT_CLAIM_NFT_BANNER = "in_wallet-visit_store",
1923
}
2024

2125
export enum OneTimeAnalyticsEvent {

background/services/campaign/index.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { CampaignDatabase, getOrCreateDB } from "./db"
1414
import MEZO_CAMPAIGN, { MezoClaimStatus } from "./matsnet-nft"
1515
import { isConfirmedEVMTransaction } from "../../networks"
1616
import { Campaigns } from "./types"
17+
import { AnalyticsEvent } from "../../lib/posthog"
1718

1819
dayjs.extend(isBetween)
1920

@@ -180,7 +181,12 @@ export default class CampaignService extends BaseService<Events> {
180181
),
181182
},
182183
callback: () => {
183-
browser.tabs.create({ url: "https://mezo.org/matsnet" })
184+
this.analyticsService.sendAnalyticsEvent(
185+
AnalyticsEvent.CAMPAIGN_MEZO_NFT_ELIGIBLE_BANNER,
186+
)
187+
browser.tabs.create({
188+
url: "https://mezo.org/matsnet/borrow?src=taho-claim-sats-banner",
189+
})
184190
this.preferenceService.markDismissableItemAsShown(
185191
MEZO_CAMPAIGN.notificationIds.eligible,
186192
)
@@ -203,7 +209,12 @@ export default class CampaignService extends BaseService<Events> {
203209
),
204210
},
205211
callback: () => {
206-
browser.tabs.create({ url: "https://mezo.org/matsnet/borrow" })
212+
this.analyticsService.sendAnalyticsEvent(
213+
AnalyticsEvent.CAMPAIGN_MEZO_NFT_BORROW_BANNER,
214+
)
215+
browser.tabs.create({
216+
url: "https://mezo.org/matsnet/borrow?src=taho-borrow-banner",
217+
})
207218
this.preferenceService.markDismissableItemAsShown(
208219
MEZO_CAMPAIGN.notificationIds.canBorrow,
209220
)
@@ -227,7 +238,12 @@ export default class CampaignService extends BaseService<Events> {
227238
),
228239
},
229240
callback: () => {
230-
browser.tabs.create({ url: "https://mezo.org/matsnet/borrow" })
241+
this.analyticsService.sendAnalyticsEvent(
242+
AnalyticsEvent.CAMPAIGN_MEZO_NFT_CLAIM_NFT_BANNER,
243+
)
244+
browser.tabs.create({
245+
url: "https://mezo.org/matsnet/store?src=taho-claim-nft-banner",
246+
})
231247
this.preferenceService.markDismissableItemAsShown(
232248
MEZO_CAMPAIGN.notificationIds.canClaimNFT,
233249
)

ui/components/Wallet/Banner/WalletCampaignBanner.tsx

+17-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ import MEZO_CAMPAIGN, {
66
MezoClaimStatus,
77
} from "@tallyho/tally-background/services/campaign/matsnet-nft"
88
import { assertUnreachable } from "@tallyho/tally-background/lib/utils/type-guards"
9-
import { markDismissableItemAsShown } from "@tallyho/tally-background/redux-slices/ui"
9+
import { AnalyticsEvent } from "@tallyho/tally-background/lib/posthog"
10+
import {
11+
markDismissableItemAsShown,
12+
sendEvent,
13+
} from "@tallyho/tally-background/redux-slices/ui"
1014

1115
import SharedButton from "../../Shared/SharedButton"
1216
import SharedIcon from "../../Shared/SharedIcon"
@@ -45,13 +49,22 @@ export default function MezoWalletCampaignBanner({
4549
browser.permissions.request({ permissions: ["notifications"] })
4650
switch (state) {
4751
case "eligible":
48-
browser.tabs.create({ url: "https://mezo.org/matsnet/borrow" })
52+
dispatch(sendEvent(AnalyticsEvent.CAMPAIGN_MEZO_NFT_ELIGIBLE_BANNER))
53+
browser.tabs.create({
54+
url: "https://mezo.org/matsnet/borrow?src=taho-claim-sats-banner",
55+
})
4956
break
5057
case "can-borrow":
51-
browser.tabs.create({ url: "https://mezo.org/matsnet/borrow" })
58+
dispatch(sendEvent(AnalyticsEvent.CAMPAIGN_MEZO_NFT_BORROW_BANNER))
59+
browser.tabs.create({
60+
url: "https://mezo.org/matsnet/borrow?src=taho-borrow-banner",
61+
})
5262
break
5363
case "can-claim-nft":
54-
browser.tabs.create({ url: "https://mezo.org/matsnet/store" })
64+
dispatch(sendEvent(AnalyticsEvent.CAMPAIGN_MEZO_NFT_CLAIM_NFT_BANNER))
65+
browser.tabs.create({
66+
url: "https://mezo.org/matsnet/store?src=taho-claim-nft-banner",
67+
})
5568
break
5669
default:
5770
assertUnreachable(state)

0 commit comments

Comments
 (0)