Files
klz-cables.com/components/analytics/SUMMARY.md
Marc Mintel 72711c74ba
Some checks failed
Build & Deploy KLZ Cables / deploy (push) Failing after 13m20s
umami
2026-01-24 22:03:06 +01:00

7.8 KiB

Umami Analytics Implementation Summary

Implementation Status: COMPLETE

Your project now has a modern, clean, and comprehensive Umami analytics implementation.

What Was Already Implemented

The project already had a solid foundation:

  1. UmamiScript.tsx - Next.js Script component for loading analytics
  2. AnalyticsProvider.tsx - Automatic pageview tracking on route changes
  3. UmamiAnalyticsService.ts - Service layer for event tracking
  4. Environment variables in docker-compose.yml

What Was Enhanced

1. Enhanced UmamiScript (components/analytics/UmamiScript.tsx)

  • Added TypeScript props interface for customization
  • Added JSDoc documentation with usage examples
  • Added error handling for script loading failures
  • Added development mode warnings
  • Improved type safety and comments

2. Enhanced AnalyticsProvider (components/analytics/AnalyticsProvider.tsx)

  • Added comprehensive JSDoc documentation
  • Added development mode logging
  • Improved code comments

3. New Custom Hook (components/analytics/useAnalytics.ts)

  • Type-safe useAnalytics hook for easy event tracking
  • trackEvent() method for custom events
  • trackPageview() method for manual pageview tracking
  • useCallback optimization for performance
  • Development mode logging

4. Event Definitions (components/analytics/analytics-events.ts)

  • Centralized event constants for consistency
  • Type-safe event names
  • Helper functions for common event properties
  • 30+ predefined events for various use cases

5. Comprehensive Documentation

  • README.md - Full documentation with setup, usage, and best practices
  • EXAMPLES.md - 20+ practical examples for different scenarios
  • QUICK_REFERENCE.md - Quick start guide and troubleshooting
  • SUMMARY.md - This file

File Structure

components/analytics/
├── UmamiScript.tsx          # Script loader component
├── AnalyticsProvider.tsx    # Route change tracker
├── useAnalytics.ts          # Custom hook for event tracking
├── analytics-events.ts      # Event definitions and helpers
├── README.md                # Full documentation
├── EXAMPLES.md              # Practical examples
├── QUICK_REFERENCE.md       # Quick start guide
└── SUMMARY.md               # This summary

Key Features

🚀 Modern Implementation

  • Uses Next.js Script component (not old-school <script> tags)
  • TypeScript for type safety
  • React hooks for clean API
  • Environment variable configuration

📊 Comprehensive Tracking

  • Automatic pageview tracking on route changes
  • Custom event tracking with properties
  • E-commerce events (products, cart, purchases)
  • User authentication events
  • Search and filter tracking
  • Error and performance tracking

🎯 Developer Experience

  • Type-safe event tracking
  • Centralized event definitions
  • Development mode logging
  • Comprehensive documentation
  • 20+ practical examples

🔒 Privacy & Performance

  • No PII tracking by default
  • Script loads after page is interactive
  • Minimal performance impact
  • Easy to disable in development

Environment Variables

The project is already configured in docker-compose.yml:

environment:
  - NEXT_PUBLIC_UMAMI_WEBSITE_ID=${NEXT_PUBLIC_UMAMI_WEBSITE_ID}
  - NEXT_PUBLIC_UMAMI_SCRIPT_URL=${NEXT_PUBLIC_UMAMI_SCRIPT_URL:-https://analytics.infra.mintel.me/script.js}

Required Setup

Add to your .env file:

NEXT_PUBLIC_UMAMI_WEBSITE_ID=59a7db94-0100-4c7e-98ef-99f45b17f9c3

Usage Examples

Basic Event Tracking

'use client';

import { useAnalytics } from '@/components/analytics/useAnalytics';
import { AnalyticsEvents } from '@/components/analytics/analytics-events';

function MyComponent() {
  const { trackEvent } = useAnalytics();

  const handleClick = () => {
    trackEvent(AnalyticsEvents.BUTTON_CLICK, {
      button_id: 'my-button',
      page: 'homepage',
    });
  };

  return <button onClick={handleClick}>Click Me</button>;
}

E-commerce Tracking

'use client';

import { useAnalytics } from '@/components/analytics/useAnalytics';
import { AnalyticsEvents } from '@/components/analytics/analytics-events';

function ProductCard({ product }) {
  const { trackEvent } = useAnalytics();

  const addToCart = () => {
    trackEvent(AnalyticsEvents.PRODUCT_ADD_TO_CART, {
      product_id: product.id,
      product_name: product.name,
      price: product.price,
    });
  };

  return <button onClick={addToCart}>Add to Cart</button>;
}

Custom Pageview Tracking

'use client';

import { useAnalytics } from '@/components/analytics/useAnalytics';

function CustomNavigation() {
  const { trackPageview } = useAnalytics();

  const navigate = () => {
    trackPageview('/custom-path');
    // Navigate...
  };

  return <button onClick={navigate}>Go to Page</button>;
}

Testing & Development

Development Mode

In development, you'll see console logs:

[Umami] Tracked event: button_click { button_id: 'my-button' }
[Umami] Tracked pageview: /products/123

Disable Analytics (Development)

# .env.local
# NEXT_PUBLIC_UMAMI_WEBSITE_ID=

Troubleshooting

Analytics Not Working?

  1. Check environment variables:

    echo $NEXT_PUBLIC_UMAMI_WEBSITE_ID
    
  2. Verify script is loading:

    • Open DevTools → Network tab
    • Look for script.js request
    • Check Console for errors
  3. Check Umami dashboard:

    • Log into Umami
    • Verify website ID matches
    • Check if data is being received

Common Issues

Issue Solution
No data in Umami Check website ID and script URL
Events not tracking Verify useAnalytics hook is used
Script not loading Check network connection, CORS
Wrong data Verify event properties are correct

Performance Tips

  1. Use useCallback - The hook is already optimized
  2. Debounce high-frequency events - See EXAMPLES.md
  3. Don't track every interaction - Focus on meaningful events
  4. Use environment variables - Disable in development

Privacy & Compliance

  • Don't track PII (personally identifiable information)
  • Don't track sensitive data (passwords, credit cards)
  • Follow GDPR and other privacy regulations
  • Use anonymized IDs where possible
  • Provide cookie consent if required

Next Steps

  1. Setup complete - All files are in place
  2. Documentation complete - README, EXAMPLES, QUICK_REFERENCE
  3. Code enhanced - Better TypeScript, error handling, docs
  4. 📝 Add to .env - Set NEXT_PUBLIC_UMAMI_WEBSITE_ID
  5. 🧪 Test in development - Verify events are tracked
  6. 🚀 Deploy - Analytics will work in production

Quick Start Checklist

  • Add NEXT_PUBLIC_UMAMI_WEBSITE_ID to .env file
  • Verify UmamiScript is in app/[locale]/layout.tsx
  • Verify AnalyticsProvider is in app/[locale]/layout.tsx
  • Test in development mode (check console logs)
  • Check Umami dashboard for data
  • Review EXAMPLES.md for specific use cases
  • Start tracking custom events with useAnalytics

Summary

Your Umami analytics implementation is now production-ready with:

  • Modern Next.js approach (Script component, not old-school tags)
  • Type-safe API (TypeScript throughout)
  • Comprehensive tracking (pageviews, events, e-commerce, errors)
  • Excellent documentation (README, examples, quick reference)
  • Developer-friendly (hooks, helpers, development mode)
  • Performance optimized (async loading, minimal impact)
  • Privacy conscious (no PII, easy to disable)

The implementation is clean, maintainable, and follows Next.js best practices. You can now track any user interaction or business event with just a few lines of code.