mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 10:42:57 +00:00
6.9 KiB
6.9 KiB
Rychlý start - Analytika v dashboardu
✅ Co je hotovo
Backend
- ✅ Analytické endpointy (
/admin/analytics/*) - ✅ Model
VisitorEvents novými poli - ✅ Migrace databáze (000009)
- ✅ Privacy-first tracking (hashované IP adresy)
- ✅ Rate limiting pro public endpoint
Frontend
- ✅ Admin dashboard zobrazuje analytiku
- ✅ Automatický tracking page views
- ✅ Tracking interakcí (clicks, formuláře)
- ✅ Dual tracking (Umami + vlastní backend)
- ✅ Tabulky top stránek a interakcí
🚀 Jak spustit
1. Migrace databáze
# V hlavní složce projektu
# Buď nastavit v .env:
RUN_MIGRATIONS=true
# Nebo spustit přímo
go run main.go
Migrace automaticky:
- Přidá sloupce
page_path,page_name,datado tabulkyvisitor_events - Vytvoří indexy pro rychlejší queries
- Zkopíruje existující data z
pagedopage_path
2. Spuštění backendu
go run main.go
Server běží na http://localhost:8080 (nebo váš konfigurovaný port).
3. Spuštění frontendu
cd frontend
npm start
Frontend běží na http://localhost:3000.
📊 Co uvidíte v dashboardu
Horní statistiky (6 karet)
- Uživatelé (admin) - celkový počet admin uživatelů
- Události - nadcházející události
- Články - celkem a publikované
- Zobrazení stránek - celkový počet page views + dnes
- Unikátní návštěvníci - celkem + tento týden
- Zobrazení (týden) - za posledních 7 dní
Analytické tabulky (2 karty)
Nejnavštěvovanější stránky
| Stránka | Zobrazení | Návštěvníci |
|---|---|---|
| / | 145 | 89 |
| /blog | 87 | 56 |
| /kontakt | 34 | 28 |
Nejčastější interakce (7 dní)
| Element | Stránka | Počet |
|---|---|---|
| Newsletter button | / | 45 |
| Contact form | /kontakt | 23 |
Widgety
- Návštěvnost (graf za 30 dní)
- Nadcházející zápasy
- Poslední články
- Aktuální scoreboard
🧪 Testování
Otevřete aplikaci
http://localhost:3000
Navigujte mezi stránkami
- Úvodní stránka
/ - Blog
/blog - Kontakt
/kontakt - O klubu
/o-klubu
Klikejte na tlačítka
- Newsletter subscribe
- Odkazy v menu
- Tlačítka v článcích
Zkontrolujte admin dashboard
http://localhost:3000/admin
Po přihlášení byste měli vidět:
- Počet zobrazení stránek se zvyšuje
- V tabulce "Nejnavštěvovanější stránky" se objevují stránky, které jste navštívili
- V tabulce "Nejčastější interakce" se objevují elementy, na které jste klikli
🔍 Kontrola databáze
-- Počet tracked eventů
SELECT event_type, COUNT(*) as count
FROM visitor_events
GROUP BY event_type;
-- Poslední page views
SELECT page_path, page_name, created_at
FROM visitor_events
WHERE event_type = 'page_view'
ORDER BY created_at DESC
LIMIT 10;
-- Top stránky
SELECT page_path, COUNT(*) as views, COUNT(DISTINCT ip_address) as visitors
FROM visitor_events
WHERE event_type = 'page_view'
GROUP BY page_path
ORDER BY views DESC
LIMIT 10;
-- Top interakce za posledních 7 dní
SELECT page, element, COUNT(*) as count
FROM visitor_events
WHERE event_type IN ('click', 'interaction')
AND created_at >= NOW() - INTERVAL '7 days'
GROUP BY page, element
ORDER BY count DESC
LIMIT 10;
📝 Příklady použití v kódu
Automatický tracking (už funguje)
Page views se trackují automaticky v App.tsx pomocí useUmami hooku.
Manuální tracking tlačítka
import { trackButtonClick } from '@/utils/umami';
function MyComponent() {
const handleNewsletterClick = () => {
trackButtonClick('Newsletter Subscribe Button');
// ... zbytek logiky
};
return (
<button onClick={handleNewsletterClick}>
Přihlásit se k odběru
</button>
);
}
Tracking formuláře
import { trackFormSubmit } from '@/utils/umami';
const handleSubmit = async (values) => {
try {
await api.post('/contact', values);
trackFormSubmit('Contact Form', true);
toast.success('Odesláno!');
} catch (error) {
trackFormSubmit('Contact Form', false);
toast.error('Chyba při odesílání');
}
};
Custom tracking
import { trackEvent } from '@/utils/umami';
// Track článku
trackEvent('Article View', {
article_id: article.id,
article_title: article.title,
category: article.category
});
// Track video play
trackEvent('Video Play', {
video_id: video.id,
video_title: video.title
});
// Track download
trackEvent('Download', {
file_name: 'rozpis-zapasu.pdf',
file_type: 'pdf'
});
🎯 Co dál?
Doporučené další kroky:
- Spusťte aplikaci a nechte ji běžet pár dní pro sběr dat
- Sledujte dashboard - všimněte si, které stránky jsou nejpopulárnější
- Přidejte tracking na důležitá tlačítka ve vaší aplikaci
- Analyzujte data - použijte insights k vylepšení UX
Volitelné rozšíření:
-
Grafy v detailní analytice (
/admin/analytika)- Časové grafy návštěvnosti
- Rozložení podle dne v týdnu
- Top articles s trendy
-
Export dat - přidat možnost exportu do CSV/Excel
-
Real-time dashboard - WebSocket pro live tracking
-
Heatmapy - vizuální zobrazení, kam uživatelé klikají
-
Conversion tracking - sledování konkrétních cílů (registrace, newsletter, atd.)
⚠️ Poznámky
- Tracking je neblokující - pokud selže, neovlivní to UX
- Privacy-first - IP adresy jsou hashovány, žádné cookies
- Rate limit - 120 requestů/minutu na tracking endpoint
- Performance - indexy zajišťují rychlé queries i s velkým objemem dat
- Dual tracking - data jdou do Umami i vlastní DB současně
🐛 Troubleshooting
Server se nespouští
# Zkontrolujte porty
netstat -ano | findstr :8080
# Zkontrolujte DB connection
psql -U postgres -d fotbal_club -c "SELECT version();"
Migrace selhaly
# Zkontrolujte DB připojení v .env
cat .env | grep DB_
# Spusťte migrace manuálně
cd database
migrate -path migrations -database "your_connection_string" up
Tracking nefunguje
- Otevřete Developer Tools (F12)
- Zkontrolujte Network tab - měl by být POST na
/api/v1/analytics/track - Zkontrolujte Console - měly by být debug zprávy
- Ověřte, že backend běží a odpovídá
Data se nezobrazují
- Zkontrolujte, že máte data v DB (SQL queries výše)
- Obnovte stránku dashboardu (F5)
- Zkontrolujte browser console pro chyby
- Ověřte, že jste přihlášení jako admin
📞 Podpora
Pokud narazíte na problémy:
- Zkontrolujte tento dokument
- Přečtěte si
ANALYTICS_INTEGRATION.mdpro detaily - Zkontrolujte DB logs a browser console
- Otevřete issue na GitHubu (pokud používáte)
Vše hotovo! 🎉 Analytika je připravena k použití.