@php $originLabels = [ 'direct' => 'Direto', 'organic' => 'Organico', 'social' => 'Social', 'campaign' => 'Campanha', 'referral' => 'Referral', ]; $originColors = [ 'direct' => 'bg-slate-500', 'organic' => 'bg-emerald-500', 'social' => 'bg-sky-500', 'campaign' => 'bg-amber-500', 'referral' => 'bg-violet-500', ]; $originHex = [ 'direct' => '#607168', 'organic' => '#2eaa74', 'social' => '#299bc2', 'campaign' => '#d99a28', 'referral' => '#8b67c7', ]; $dailyMax = max(1, $daily->map(fn ($day) => $day['direct'] + $day['organic'] + $day['social'] + $day['campaign'] + $day['referral'])->max() ?? 0); $labelEvery = max(1, (int) ceil(max(1, $daily->count()) / 14)); $peakDay = $daily->sortByDesc(fn ($day) => $day['direct'] + $day['organic'] + $day['social'] + $day['campaign'] + $day['referral'])->first(); $peakTotal = $peakDay ? ($peakDay['direct'] + $peakDay['organic'] + $peakDay['social'] + $peakDay['campaign'] + $peakDay['referral']) : 0; $mapCoverage = $pageviews > 0 ? round(($mapTrackedPageviews / $pageviews) * 100, 1) : 0; $topMapPoints = $mapPoints->take(6); $chartWidth = max(760, $daily->count() * 34); $chartTicks = collect([1, .75, .5, .25, 0]) ->map(fn (float|int $ratio): int => (int) round($dailyMax * $ratio)); $mapInitialViewBox = collect(['x', 'y', 'w', 'h']) ->map(fn (string $key): string => number_format((float) $mapInitialView[$key], 2, '.', '')) ->implode(' '); @endphp @include('filament.pages.partials.analytics-dashboard-styles') @once @endonce
Inteligencia de trafego

Entenda de onde os visitantes chegam, quais paginas acessam e como o trafego se distribui por localizacao e dispositivo.

Pageviews
{{ number_format($pageviews) }}
Paginas visualizadas no periodo selecionado
Unicas por dia
{{ number_format($uniques) }}
Primeiro acesso reconhecido de cada dia
Visitantes
{{ number_format($visitors) }}
Pessoas distintas reconhecidas pelo navegador
Taxa unica
{{ $uniqueRate }}%
Participacao de visitas unicas no volume total

Mapa de visitas

Distribuicao geografica do trafego com marcadores proporcionais ao volume de acessos.

Scroll para zoom · arraste para mover · duplo clique aproxima
{{ number_format($mapTrackedPageviews) }} pageviews com localizacao
{{ $mapCoverage }}% de cobertura
1.0×
@foreach ([86, 155, 224, 293, 362, 431] as $lineY) @endforeach @foreach ([100, 200, 300, 400, 500, 600, 700, 800, 900] as $lineX) @endforeach @include('filament.pages.partials.world-map-paths') @foreach ($mapPoints as $point) @php $ringRadius = round($point['radius'] * 2.1, 2); $haloRadius = round($point['radius'] * 1.08, 2); $dotRadius = round(max(3.25, min(9.5, $point['radius'] * 0.52)), 2); @endphp {{ $point['location'] }} - {{ number_format($point['visits']) }} visitas @endforeach
@if ($mapPoints->isEmpty())
Sem coordenadas ainda. As novas visitas ja serao mapeadas, e o deploy tenta preencher acessos antigos por IP.
@endif
Pontos
{{ number_format($mapPoints->count()) }}
Pageviews
{{ number_format($mapTrackedPageviews) }}
Cobertura
{{ $mapCoverage }}%
Locais com mais trafego
@forelse ($topMapPoints as $point)
{{ $point['location'] }}
{{ number_format($point['visitors']) }} visitantes
{{ number_format($point['visits']) }}
@empty
Sem locais com coordenadas no periodo.
@endforelse

Evolucao diaria por origem

Composicao do trafego a cada dia, separada pelo canal de aquisicao.

@if ($peakDay && $peakTotal > 0)
Pico do periodo {{ number_format($peakTotal) }} em {{ $peakDay['label'] }}
@else Sem atividade no periodo @endif
@foreach ($originLabels as $origin => $label) {{ $label }} @endforeach
@forelse ($daily as $day) @php $total = $day['direct'] + $day['organic'] + $day['social'] + $day['campaign'] + $day['referral']; $height = $total > 0 ? max(3, round($total / $dailyMax * 100, 2)) : 0; @endphp
{{ $day['label'] }} · {{ number_format($total) }} visitas @foreach ($originLabels as $origin => $label) {{ $label }}: {{ number_format($day[$origin]) }}@if (! $loop->last) · @endif @endforeach
@empty
Sem visitas no periodo.
@endforelse
@if ($daily->isNotEmpty()) @endif

Por origem

Participacao de cada canal no volume total.

@forelse ($origins as $origin) @php $pct = $pageviews > 0 ? round(((int) $origin->visits / $pageviews) * 100, 1) : 0; $originColor = $originHex[$origin->label] ?? '#819087'; @endphp
{{ $originLabels[$origin->label] ?? ucfirst($origin->label) }} {{ number_format((int) $origin->visits) }} · {{ $pct }}%
@empty
Sem dados.
@endforelse

Top paginas

Conteudos que mais concentraram visualizacoes.

@php $maxPages = max(1, (int) ($pages->max('visits') ?? 0)); @endphp
@forelse ($pages as $page) @php $width = max(2, round(((int) $page->visits / $maxPages) * 100)); @endphp
{{ $page->label }} {{ number_format((int) $page->visits) }}
@empty
Sem dados.
@endforelse
@foreach ([['Dispositivo', $devices], ['Sistema', $oses], ['Browser', $browsers]] as [$title, $items]) @php $maxItems = max(1, (int) ($items->max('visits') ?? 0)); @endphp

{{ $title }}

@forelse ($items as $item) @php $width = max(2, round(((int) $item->visits / $maxItems) * 100)); @endphp
{{ $item->label }} {{ number_format((int) $item->visits) }}
@empty
Sem dados.
@endforelse
@endforeach

Top cidades

@forelse ($cities as $city)
{{ $city->label }} {{ $city->region }} {{ number_format((int) $city->visits) }}
@empty
Sem dados.
@endforelse

Ultimos acessos

Registro recente de paginas, origem, contexto tecnico e identificacao do visitante.

{{ number_format($recentVisits->count()) }} registros
@forelse ($recentVisits as $visit) @empty @endforelse
Quando Pagina Origem Cliente / usuario Disp. Browser Status IP
{{ $visit->visited_at?->format('m/d H:i:s') }} {{ $visit->page }} {{ $originLabels[$visit->origin] ?? $visit->origin }} {{ $visit->customer?->company_name ?? $visit->user?->email ?? '-' }} {{ $visit->device }} {{ $visit->browser }} {{ $visit->status_code }} {{ $visit->ip ?: '-' }}
Sem acessos no periodo selecionado.