# Umami Analytics Examples This file contains practical examples of how to use the analytics system in various scenarios. ## Table of Contents 1. [Basic Event Tracking](#basic-event-tracking) 2. [E-commerce Tracking](#e-commerce-tracking) 3. [Form Tracking](#form-tracking) 4. [User Authentication](#user-authentication) 5. [Search & Filtering](#search--filtering) 6. [Content Tracking](#content-tracking) 7. [Error Tracking](#error-tracking) 8. [Performance Tracking](#performance-tracking) 9. [Custom Navigation](#custom-navigation) --- ## Basic Event Tracking ### Button Click Tracking ```tsx 'use client'; import { useAnalytics } from '@/components/analytics/useAnalytics'; import { AnalyticsEvents } from '@/components/analytics/analytics-events'; function CallToAction() { const { trackEvent } = useAnalytics(); const handleClick = () => { trackEvent(AnalyticsEvents.BUTTON_CLICK, { button_id: 'cta-primary', button_text: 'Get Started', page: 'homepage', section: 'hero', }); }; return ( ); } ``` ### Link Click Tracking ```tsx 'use client'; import { useAnalytics } from '@/components/analytics/useAnalytics'; import { AnalyticsEvents } from '@/components/analytics/analytics-events'; function NavigationLink({ href, children }) { const { trackEvent } = useAnalytics(); const handleClick = () => { trackEvent(AnalyticsEvents.LINK_CLICK, { link_url: href, link_text: children, link_type: 'navigation', }); }; return ( {children} ); } ``` --- ## E-commerce Tracking ### Product Page View ```tsx 'use client'; import { useEffect } from 'react'; import { useAnalytics } from '@/components/analytics/useAnalytics'; import { AnalyticsEvents } from '@/components/analytics/analytics-events'; interface Product { id: string; name: string; category: string; price: number; sku: string; } function ProductPage({ product }: { product: Product }) { const { trackEvent } = useAnalytics(); useEffect(() => { // Track product view when page loads trackEvent(AnalyticsEvents.PRODUCT_VIEW, { product_id: product.id, product_name: product.name, product_category: product.category, product_sku: product.sku, price: product.price, currency: 'EUR', }); }, [product]); return (

{product.name}

€{product.price}

); } ``` ### Add to Cart ```tsx 'use client'; import { useAnalytics } from '@/components/analytics/useAnalytics'; import { AnalyticsEvents } from '@/components/analytics/analytics-events'; function AddToCartButton({ product, quantity = 1 }) { const { trackEvent } = useAnalytics(); const handleAddToCart = () => { trackEvent(AnalyticsEvents.PRODUCT_ADD_TO_CART, { product_id: product.id, product_name: product.name, product_category: product.category, price: product.price, quantity: quantity, cart_total: 150.0, // Current cart total }); // Actual add to cart logic // addToCart(product, quantity); }; return ; } ``` ### Purchase Tracking ```tsx 'use client'; import { useAnalytics } from '@/components/analytics/useAnalytics'; import { AnalyticsEvents } from '@/components/analytics/analytics-events'; function CheckoutComplete({ order }) { const { trackEvent } = useAnalytics(); useEffect(() => { // Track purchase when checkout completes trackEvent(AnalyticsEvents.PRODUCT_PURCHASE, { transaction_id: order.id, transaction_total: order.total, transaction_currency: 'EUR', transaction_tax: order.tax, transaction_shipping: order.shipping, product_count: order.items.length, products: order.items.map((item) => ({ product_id: item.product.id, product_name: item.product.name, quantity: item.quantity, price: item.price, })), }); }, [order]); return
Order Complete!
; } ``` ### Wishlist Tracking ```tsx 'use client'; import { useAnalytics } from '@/components/analytics/useAnalytics'; import { AnalyticsEvents } from '@/components/analytics/analytics-events'; function WishlistButton({ product }) { const { trackEvent } = useAnalytics(); const [isInWishlist, setIsInWishlist] = useState(false); const toggleWishlist = () => { const newState = !isInWishlist; trackEvent( newState ? AnalyticsEvents.PRODUCT_WISHLIST_ADD : AnalyticsEvents.PRODUCT_WISHLIST_REMOVE, { product_id: product.id, product_name: product.name, product_category: product.category, }, ); setIsInWishlist(newState); // Update wishlist in backend }; return ; } ``` --- ## Form Tracking ### Contact Form ```tsx 'use client'; import { useState } from 'react'; import { useAnalytics } from '@/components/analytics/useAnalytics'; import { AnalyticsEvents } from '@/components/analytics/analytics-events'; function ContactForm() { const { trackEvent } = useAnalytics(); const [formData, setFormData] = useState({ name: '', email: '', message: '', }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); // Track form start trackEvent(AnalyticsEvents.FORM_START, { form_id: 'contact-form', form_name: 'Contact Us', }); // Track form submission trackEvent(AnalyticsEvents.FORM_SUBMIT, { form_id: 'contact-form', form_name: 'Contact Us', form_fields: { name: formData.name, email: formData.email, message_length: formData.message.length, }, }); // Submit form // submitContactForm(formData); }; const handleChange = (e: React.ChangeEvent) => { setFormData((prev) => ({ ...prev, [e.target.name]: e.target.value, })); }; return (