# Umami Analytics Integration

This document describes the Umami analytics integration for the Fotbal Club application.

## Overview

Umami is an open-source, privacy-focused web analytics platform integrated into both the backend (Go) and frontend (React/TypeScript). The integration automatically tracks page views and allows custom event tracking throughout the application.

## Features

- ✅ **Automatic page view tracking** - Tracks all page visits automatically
- ✅ **Custom event tracking** - Track button clicks, form submissions, downloads, etc.
- ✅ **Privacy-first** - No cookies, GDPR compliant
- ✅ **Admin analytics dashboard** - View comprehensive statistics in the admin panel
- ✅ **Auto-initialization** - Automatically creates website tracking in Umami on production deployment
- ✅ **Real-time data** - Pull live data from Umami API

## Configuration

### Environment Variables

Add the following to your `.env` file:

```env
# Umami Analytics
UMAMI_URL=https://umami.tdvorak.dev
UMAMI_USERNAME=admin
UMAMI_PASSWORD=eevRQ6h3G@!c#y4A1T
UMAMI_WEBSITE_ID=  # Leave empty for auto-create, or set manually after creation
```

### Initial Setup

There are two ways to set up Umami tracking:

#### Option 1: Manual Setup

1. Log in to your Umami instance
2. Create a new website manually via the Umami UI
3. Copy the website ID
4. Set `UMAMI_WEBSITE_ID` in your `.env` file

#### Option 2: Automatic Setup (Recommended for Production)

The system can automatically create a website in Umami when deployed to a real domain:

1. Deploy your application to production
2. Log in to the admin panel
3. The system detects if running on a non-localhost domain
4. Call the initialization endpoint or use the settings page to trigger auto-setup
5. The website is created in Umami and the ID is stored

**API Endpoint for Auto-Initialization:**

```bash
POST /api/v1/admin/umami/initialize
Authorization: Bearer <admin-token>
Content-Type: application/json

{
  "name": "Fotbal Club",
  "domain": "fotbalclub.cz"
}
```

Response:
```json
{
  "message": "Umami initialized successfully",
  "website_id": "7f23c6b1-9b9d-45e3-8a2d-99cabc21e7c0",
  "script_url": "https://umami.tdvorak.dev/script.js"
}
```

## Architecture

### Backend (Go)

**Files:**
- `internal/config/config.go` - Umami configuration
- `internal/services/umami_service.go` - Umami API client
- `internal/controllers/umami_controller.go` - HTTP endpoints
- `internal/routes/routes.go` - Route registration

**API Endpoints:**

Public:
- `GET /api/v1/umami/config` - Get Umami configuration for frontend

Admin:
- `POST /api/v1/admin/umami/initialize` - Initialize Umami tracking
- `GET /api/v1/admin/umami/stats?days=30` - Get overview statistics
- `GET /api/v1/admin/umami/metrics/:type?days=30` - Get specific metrics

**Metric Types:**
- `url` - Page views by URL
- `referrer` - Traffic sources
- `browser` - Browser usage
- `os` - Operating system usage
- `device` - Device types (desktop/mobile/tablet)
- `country` - Visitor countries
- `event` - Custom events

### Frontend (React/TypeScript)

**Files:**
- `frontend/src/hooks/useUmami.ts` - React hook for Umami initialization
- `frontend/src/utils/umami.ts` - Event tracking utilities
- `frontend/src/pages/admin/AnalyticsAdminPage.tsx` - Analytics dashboard
- `frontend/src/App.tsx` - Umami hook integration

**Hook Usage:**

The Umami script is automatically loaded in `App.tsx`:

```tsx
import { useUmami } from './hooks/useUmami';

const App: React.FC = () => {
  useUmami(); // Initializes Umami tracking
  // ... rest of app
};
```

## Event Tracking

### Using Data Attributes (HTML)

Add `data-umami-event` attributes to any element:

```tsx
<button data-umami-event="Signup button">
  Sign up
</button>

// With additional data
<button 
  data-umami-event="Purchase"
  data-umami-event-product="Jersey"
  data-umami-event-price="500"
>
  Buy Jersey
</button>
```

### Using JavaScript/TypeScript

Import tracking utilities and call them:

```tsx
import { trackEvent, trackButtonClick, trackArticleView } from '../utils/umami';

// Generic event
trackEvent('Newsletter Subscribe', { source: 'footer' });

// Specific helpers
trackButtonClick('Download PDF', '/documents');
trackArticleView(article.id, article.title);
trackFormSubmit('Contact Form', true);
trackSocialShare('Facebook', url);
trackVideoPlay(video.id, video.title);
trackSearch(query, resultsCount);
trackDownload('brochure.pdf', 'pdf');
trackNewsletterSubscribe('homepage');
trackContactSubmit(true);
```

### Available Helper Functions

All functions are in `frontend/src/utils/umami.ts`:

- `trackEvent(name, data?)` - Generic event tracking
- `trackButtonClick(button, location?)` - Track button clicks
- `trackFormSubmit(form, success?)` - Track form submissions
- `trackNavigation(destination, source?)` - Track page navigation
- `trackArticleView(id, title)` - Track article views
- `trackMatchView(id)` - Track match views
- `trackSearch(query, resultsCount?)` - Track search queries
- `trackVideoPlay(id, title?)` - Track video plays
- `trackNewsletterSubscribe(source?)` - Track newsletter signups
- `trackDownload(file, type?)` - Track file downloads
- `trackSocialShare(platform, url?)` - Track social shares
- `trackContactSubmit(success?)` - Track contact form submissions

## Admin Dashboard

Access the analytics dashboard at `/admin/analytika` (admin login required).

**Features:**
- Overview statistics (pageviews, visitors, visits, bounce rate, average time)
- Time range selection (today, 7 days, 30 days, 90 days, 1 year)
- Detailed metrics tabs:
  - Most visited pages
  - Traffic sources (referrers)
  - Browser usage
  - Operating systems
  - Visitor countries
  - Device types
  - Custom events

## Example Integration

### Footer Social Links (Already Integrated)

```tsx
// frontend/src/components/layout/Footer.tsx
import { trackSocialShare } from '../../utils/umami';

<IconButton
  href={facebookUrl}
  onClick={() => trackSocialShare('Facebook', facebookUrl)}
  // ... props
/>
```

### Newsletter Subscription

```tsx
import { trackNewsletterSubscribe } from '../utils/umami';

const handleSubscribe = async (email: string) => {
  try {
    await api.post('/newsletter/subscribe', { email });
    trackNewsletterSubscribe('footer-form');
    showSuccessToast();
  } catch (error) {
    // handle error
  }
};
```

### Article View Tracking

```tsx
import { trackArticleView } from '../utils/umami';

useEffect(() => {
  if (article) {
    trackArticleView(article.id, article.title);
  }
}, [article]);
```

## Privacy & GDPR Compliance

Umami is privacy-focused by default:

- ✅ No cookies used
- ✅ No personal data collected
- ✅ Anonymized IP addresses
- ✅ GDPR compliant out of the box
- ✅ Data stored on your own infrastructure

## Testing

### Local Development

On localhost, Umami tracking is loaded but may not send data depending on configuration. Use the browser console to verify:

```javascript
// Check if Umami is loaded
console.log(window.umami);

// Manually track an event
window.umami?.track('Test Event', { test: true });
```

### Production Verification

1. Deploy to production
2. Open browser DevTools > Network tab
3. Filter by "umami" or your Umami domain
4. Navigate the site and trigger events
5. Verify requests are being sent
6. Check the admin dashboard for data

## Troubleshooting

### Script Not Loading

- Verify `UMAMI_URL` is correct
- Check `UMAMI_WEBSITE_ID` is set
- Ensure Umami server is accessible from client browsers
- Check browser console for errors

### No Data in Dashboard

- Verify tracking script is loaded (check Network tab)
- Ensure events are being sent (check Network tab)
- Check Umami server logs
- Verify correct website ID is being used
- Allow a few minutes for data processing

### API Authentication Fails

- Verify `UMAMI_USERNAME` and `UMAMI_PASSWORD` are correct
- Check Umami server is accessible from backend
- Verify API endpoints are correct (may differ by Umami version)

## Security Notes

- Never commit real Umami credentials to version control
- Use environment variables for all sensitive data
- Restrict admin API access to authenticated users only
- Consider rate limiting on public tracking endpoints

## Future Enhancements

Potential improvements:

- **Real-time dashboard updates** - WebSocket/SSE for live stats
- **Custom dashboards** - Create custom views for specific metrics
- **Goal tracking** - Define and track conversion goals
- **A/B testing integration** - Compare variants
- **Alerting** - Notifications for traffic spikes or anomalies
- **Data export** - Export analytics data for external analysis
- **Heatmaps** - Visual representation of user interactions (requires additional tooling)

## Resources

- [Umami Official Docs](https://umami.is/docs)
- [Umami API Reference](https://umami.is/docs/api)
- [Umami GitHub](https://github.com/umami-software/umami)
