⚡ EGBE Analytics

Pageviews
last 24h
Visitors
unique sessions
Events
total tracked
Top Source

Top Pages

Referrers

Devices

UTM Campaigns

Add a Website

Tracking ID
Name
Domain
// Select a website to get your tracking snippet
'; const res = await fetch('/api/stats?website_id=' + id + '&period=' + currentPeriod); const data = await res.json(); document.getElementById('pageviews').textContent = data.pageviews || 0; document.getElementById('visitors').textContent = data.sessions || 0; const totalEvents = (data.events || []).reduce((s, e) => s + e.count, 0); document.getElementById('events-count').textContent = totalEvents; const topRef = (data.referrers || [])[0]; document.getElementById('top-source').textContent = topRef ? (new URL(topRef.referrer || 'https://x').hostname) : '—'; // Pages const pagesRes = await fetch('/api/pages?website_id=' + id + '&period=' + currentPeriod); const pagesData = await pagesRes.json(); const maxP = Math.max(...(pagesData.pages || [{count:1}]).map(p => p.count), 1); document.getElementById('pages-table').innerHTML = (pagesData.pages || []).slice(0, 8).map(p => { const pct = Math.round((p.count / maxP) * 100); const shortUrl = p.url.length > 50 ? p.url.substring(0, 50) + '...' : p.url; return '
'+shortUrl+''+p.count+'
'; }).join('') || '

No pageviews yet

'; // Referrers const maxR = Math.max(...(data.referrers || [{count:1}]).map(r => r.count), 1); document.getElementById('referrers-table').innerHTML = (data.referrers || []).slice(0, 8).map(r => { const pct = Math.round((r.count / maxR) * 100); const hostname = (() => { try { return new URL(r.referrer).hostname; } catch { return r.referrer; } })(); return '
'+hostname+''+r.count+'
'; }).join('') || '

No referrer data

'; // Devices document.getElementById('devices-table').innerHTML = (data.devices || []).map(d => { const total = (data.devices || []).reduce((s, x) => s + x.count, 0); const pct = Math.round((d.count / total) * 100); return '
'+d.device+''+d.count+' ('+pct+'%)
'; }).join('') || '

No device data

'; // UTMs document.getElementById('utms-table').innerHTML = (data.utms || []).slice(0, 8).map(u => { const label = [u.utm_source, u.utm_medium, u.utm_campaign].filter(Boolean).join(' / ') || '(none)'; return '
'+label+''+u.count+'
'; }).join('') || '

No UTM data

'; } async function addWebsite() { const id = document.getElementById('new-id').value.trim(); const name = document.getElementById('new-name').value.trim(); const domain = document.getElementById('new-domain').value.trim(); if (!id) return alert('Tracking ID is required'); await fetch('/api/websites', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id, name, domain }) }); document.getElementById('new-id').value = ''; document.getElementById('new-name').value = ''; document.getElementById('new-domain').value = ''; document.getElementById('website').innerHTML = ''; await loadWebsites(); document.getElementById('website').value = id; loadStats(); } loadWebsites();