diff --git a/.github/workflows/sparrowadmin-staging.yml b/.github/workflows/sparrowadmin-staging.yml index 4672c16a..2bea6cd8 100644 --- a/.github/workflows/sparrowadmin-staging.yml +++ b/.github/workflows/sparrowadmin-staging.yml @@ -2,7 +2,7 @@ name: Sparrow-admin-Stg on: push: branches: - - release/2.36.0 + - release/2.38.0 workflow_dispatch: jobs: diff --git a/package-lock.json b/package-lock.json index d4e126e1..605e223c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sparrow-admin-app", - "version": "2.36.0", + "version": "2.38.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sparrow-admin-app", - "version": "2.36.0", + "version": "2.38.0", "dependencies": { "@tailwindcss/vite": "^4.1.4", "@tanstack/svelte-table": "^8.21.3", diff --git a/package.json b/package.json index c2947d95..8c4c343c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "sparrow-admin-app", "private": true, - "version": "2.36.0", + "version": "2.38.0", "type": "module", "scripts": { "dev": "vite --host", diff --git a/src/pages/Payment/PaymentInformation/PaymentMethodSelectionPage.svelte b/src/pages/Payment/PaymentInformation/PaymentMethodSelectionPage.svelte index ca0f454d..1917d269 100644 --- a/src/pages/Payment/PaymentInformation/PaymentMethodSelectionPage.svelte +++ b/src/pages/Payment/PaymentInformation/PaymentMethodSelectionPage.svelte @@ -119,6 +119,13 @@ onPaymentSuccess: (data) => { console.log('Payment success:', data); const { team } = data; + // PostHog event for subscription confirmation + captureEvent('subscription_confirmed', { + hubName: team?.name || '', + planName, + userCount, + nextBilling: team?.billing?.current_period_end, + }); setTimeout(() => { isProcessing = false; showProcessingModal = false; diff --git a/src/pages/TrialFlow/TrialFlow.svelte b/src/pages/TrialFlow/TrialFlow.svelte index 91e0a83e..97963e4a 100644 --- a/src/pages/TrialFlow/TrialFlow.svelte +++ b/src/pages/TrialFlow/TrialFlow.svelte @@ -13,6 +13,8 @@ import { API_BASE_URL } from '@/constants/environment'; import { notification } from '@/components/Toast'; import { navigate } from 'svelte-routing'; + import { captureEvent } from '@/utils/posthogConfig'; + let _viewModel = new TrialFlowViewModel(); let currentStep = 1; @@ -247,6 +249,13 @@ console.log('Payment success team:', team); let formatTeamData: { email: string; role: string }[] = []; let userCount = 1; + // PostHog event for subscription confirmation + captureEvent('subscription_confirmed', { + hubName: team?.name || '', + planName: 'Standard', + userCount: triggerPoint === 'finish' ? teamdata.length : 1, + nextBilling: team?.billing?.current_period_end, + }); setTimeout(async () => { if (triggerPoint === 'finish') { formatTeamData = teamdata diff --git a/src/pages/UserTrialFlow/UserTrialFlow.svelte b/src/pages/UserTrialFlow/UserTrialFlow.svelte index f851da8f..2ed39877 100644 --- a/src/pages/UserTrialFlow/UserTrialFlow.svelte +++ b/src/pages/UserTrialFlow/UserTrialFlow.svelte @@ -14,6 +14,8 @@ import { notification } from '@/components/Toast'; import DropdownNoSearch from '@/components/DropdownNoSearch/DropdownNoSearch.svelte'; import { navigate } from 'svelte-routing'; + import { captureEvent } from '@/utils/posthogConfig'; + let _viewModel = new TrialFlowViewModel(); let currentStep = 1; @@ -394,6 +396,13 @@ console.log('Payment success team:', team); let formatTeamData: { email: string; role: string }[] = []; let userCount = 1; + // PostHog event for subscription confirmation + captureEvent('subscription_confirmed', { + hubName: team?.name || '', + planName: planTier, + userCount: triggerPoint === 'finish' ? teamdata.length : 1, + nextBilling: team?.billing?.current_period_end, + }); if (invoice?.amount_paid === 0) { setTimeout(async () => { if (triggerPoint === 'finish') { diff --git a/src/utils/posthogConfig.ts b/src/utils/posthogConfig.ts index 0aaf7ee7..608d2e78 100644 --- a/src/utils/posthogConfig.ts +++ b/src/utils/posthogConfig.ts @@ -1,7 +1,7 @@ -import posthog from 'posthog-js' -import { POSTHOG_API_KEY } from '@/constants/environment' +import posthog from 'posthog-js'; +import { POSTHOG_API_KEY } from '@/constants/environment'; -let isInitialized = false +let isInitialized = false; export const initPostHog = () => { if (!isInitialized) { @@ -9,30 +9,39 @@ export const initPostHog = () => { api_host: 'https://us.i.posthog.com', person_profiles: 'always', - }) - isInitialized = true + capture_exceptions: true, + }); - return true - } + isInitialized = true; - return false -} + return true; + } + return false; +}; -export const captureEvent = ( - eventName: string, +export const captureEvent = (eventName: string, properties?: Record) => { + if (!isInitialized) { + initPostHog(); + } + posthog.capture(eventName, properties); +}; +export const captureException = ( + error: Error | unknown, properties?: Record, -) => { - posthog.capture(eventName, properties) -} +): void => { + if (!isInitialized) { + initPostHog(); + } + posthog.captureException(error, properties); +}; export const identifyUser = (email: string): void => { - if (!posthog) { - console.error('PostHog is not initialized'); - return; + if (!isInitialized) { + initPostHog(); } posthog.identify(email); }; -export const posthogClient = posthog \ No newline at end of file +export const posthogClient = posthog;