From bf6d945c61e4cf4e6f365cb36a0a5db8fbd21258 Mon Sep 17 00:00:00 2001 From: m-tartari <37861893+m-tartari@users.noreply.github.com> Date: Wed, 28 May 2025 10:26:52 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(utils):=20add=20analytics=20ut?= =?UTF-8?q?il?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/utils/analytics/index.ts | 44 +++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/components/utils/analytics/index.ts diff --git a/src/components/utils/analytics/index.ts b/src/components/utils/analytics/index.ts new file mode 100644 index 0000000..1dee12c --- /dev/null +++ b/src/components/utils/analytics/index.ts @@ -0,0 +1,44 @@ +import Analytics from 'analytics' +import googleAnalytics from '@analytics/google-analytics' + +// Get measurement ID from environment variables +const GA_MEASUREMENT_ID = import.meta.env.VITE_GA_MEASUREMENT_ID || '' +export const COOKIE_CONSENT_KEY = 'm-tartari-cookie-consent' +export const ANALYTICS_PLUGINS = ['google-analytics'] + +// Log warning if measurement ID is not set +if (!GA_MEASUREMENT_ID) { + console.warn('Google Analytics Measurement ID is not set. Analytics will not track events.') +} + +const analyticsInstance = Analytics({ + app: 'm-tartari-portfolio', + plugins: [ + googleAnalytics({ + measurementIds: [GA_MEASUREMENT_ID], + // Start disabled for GDPR compliance + enabled: false, + }), + ], +}) + +// Initialize analytics +analyticsInstance.ready(() => { + if (process.env.NODE_ENV !== 'test') console.info('Analytics system initialized') +}) + +// Track page views +export const trackPageView = (path: string) => { + analyticsInstance.page({ + path, + title: document.title, + }) +} + +// Track custom events +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const trackEvent = (event: string, payload: Record = {}) => { + analyticsInstance.track(event, payload) +} + +export default analyticsInstance