New vs returning

Based on active days in this window

{{ number_format($new_vs_returning['new'] ?? 0) }}

New

{{ number_format($new_vs_returning['returning'] ?? 0) }}

Returning

Visitor timeline

Daily unique visitors & sessions

Visitor ledger

Identity keyed by visitor ID, falling back to IP / session

@forelse($visitors_table ?? [] as $row) @empty @endforelse
Visitor IP Location Device Events Sessions First Last
{{ Str::limit($row->visitor_key, 18) }} @php $ip = (string) $row->ip_address; @endphp {{ strlen($ip) === 64 && !str_contains($ip, '.') ? Str::limit($ip, 12).'…' : ($ip ?: '—') }} {{ collect([$row->city, $row->country])->filter()->implode(', ') ?: '—' }} {{ $row->device_type ?: '—' }} / {{ $row->browser ?: '—' }} {{ number_format($row->events) }} {{ number_format($row->sessions) }} {{ $row->first_seen ? \Illuminate\Support\Carbon::parse($row->first_seen)->diffForHumans() : '—' }} {{ $row->last_seen ? \Illuminate\Support\Carbon::parse($row->last_seen)->diffForHumans() : '—' }}
No visitors in this period.