Proje dosyaları eklendi

This commit is contained in:
2026-08-29 15:53:53 +03:00
commit d3313400ca
440 changed files with 24827 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
<x-layouts.app :title="__('rankings.details').' — TrafficPumper'"><x-customer-shell><nav><ol class="breadcrumb"><li class="breadcrumb-item"><a href="{{route('rankings.index')}}">{{__('rankings.title')}}</a></li><li class="breadcrumb-item"><a href="{{route('rankings.keywords.show',$check->keyword)}}">{{$check->keyword->phrase}}</a></li><li class="breadcrumb-item active">{{__('rankings.details')}}</li></ol></nav><header class="tp-page-header"><div><p>{{$check->keyword->project->name}}</p><h1>{{__('rankings.details')}}</h1><span>{{$check->checked_at?->translatedFormat('d M Y H:i')}}</span></div></header><div class="tp-two-columns"><section class="tp-panel"><dl class="tp-detail-list"><div><dt>{{__('rankings.keyword')}}</dt><dd>{{$check->keyword->phrase}}</dd></div><div><dt>{{__('rankings.project')}}</dt><dd>{{$check->keyword->project->name}}</dd></div><div><dt>{{__('rankings.rank')}}</dt><dd>{{$rank?'#'.$rank:'100+'}}</dd></div><div><dt>{{__('rankings.status')}}</dt><dd>{{$check->status->label()}}</dd></div><div><dt>{{__('rankings.country')}}</dt><dd>{{$check->country_code}} / {{$check->language_code}} / {{$check->device->label()}}</dd></div><div><dt>{{__('rankings.found_url')}}</dt><dd>{{$check->results->firstWhere('is_project_domain',true)?->url??'—'}}</dd></div></dl></section><section class="tp-panel"><div class="tp-panel-heading"><h2>{{__('rankings.organic_results')}}</h2></div>@forelse($check->results as $result)<div class="tp-organic-result"><strong>#{{$result->position}} {{$result->title}}</strong><a href="{{$result->url}}" rel="noopener noreferrer">{{$result->display_url?:$result->url}}</a></div>@empty<x-empty-state :title="__('rankings.no_filter_data')" :description="__('rankings.no_checks')"/>@endforelse</section></div></x-customer-shell></x-layouts.app>
+8
View File
@@ -0,0 +1,8 @@
<x-layouts.app :title="__('rankings.title').' — TrafficPumper'"><x-customer-shell>
<header class="tp-page-header"><div><p>{{__('customer.rank_tracking')}}</p><h1>{{__('rankings.title')}}</h1><span>{{__('rankings.description')}}</span></div></header>
@if($errors->any())<div class="alert alert-danger">{{$errors->first()}}</div>@endif
<section class="tp-panel"><form method="GET" class="tp-ranking-filters"><select name="project" class="form-select"><option value="">{{__('rankings.all_projects')}}</option>@foreach($projects as $project)<option value="{{$project->ulid}}" @selected(request('project')===$project->ulid)>{{$project->name}}</option>@endforeach</select><select name="keywords[]" class="form-select"><option value="">{{__('rankings.all_keywords')}}</option>@foreach($keywords as $keyword)<option value="{{$keyword->ulid}}" @selected(in_array($keyword->ulid,request('keywords',[])))>{{$keyword->phrase}}</option>@endforeach</select><select name="range" class="form-select">@foreach(['7d'=>'last7','30d'=>'last30','90d'=>'last90','this_month'=>'this_month','last_month'=>'last_month','custom'=>'custom'] as $value=>$label)<option value="{{$value}}" @selected(request('range','30d')===$value)>{{__('rankings.'.$label)}}</option>@endforeach</select><input type="date" name="from" value="{{request('from')}}" class="form-control" aria-label="{{__('rankings.from')}}"><input type="date" name="to" value="{{request('to')}}" class="form-control" aria-label="{{__('rankings.to')}}"><select name="movement" class="form-select"><option value="">{{__('rankings.movement')}}</option>@foreach(['winner','loser','unchanged','new','unranked'] as $v)<option value="{{$v}}" @selected(request('movement')===$v)>{{__('rankings.'.$v)}}</option>@endforeach</select><button class="btn btn-primary">{{__('rankings.filters')}}</button><a class="btn btn-outline-secondary" href="{{route('rankings.index')}}">{{__('rankings.clear')}}</a></form></section>
<section class="tp-metric-grid tp-ranking-metrics"><x-metric-card :label="__('rankings.tracked')" :value="$summary['tracked']" icon=""/><x-metric-card :label="__('rankings.average')" :value="$summary['average']" icon=""/><x-metric-card :label="__('rankings.top3')" :value="$summary['top3']" icon=""/><x-metric-card :label="__('rankings.top10')" :value="$summary['top10']" icon=""/><x-metric-card :label="__('rankings.winners')" :value="$summary['winners']" icon=""/><x-metric-card :label="__('rankings.losers')" :value="$summary['losers']" icon=""/></section>
<div class="tp-ranking-grid"><section class="tp-panel"><div class="tp-panel-heading"><h2>{{__('rankings.performance')}}</h2></div>@if($chart->isEmpty())<x-empty-state :title="__('rankings.no_checks')" :description="__('rankings.no_filter_data')"/>@else<div class="tp-ranking-chart" data-ranking-chart='@json($chart)' role="img" aria-label="{{__('rankings.performance')}}"></div><p class="small text-body-secondary mb-0">{{__('rankings.outside_help')}}</p>@endif</section><section class="tp-panel"><div class="tp-panel-heading"><h2>{{__('rankings.distribution')}}</h2></div><div class="tp-distribution">@foreach($distribution as $key=>$count)<div><span>{{__('rankings.range.'.$key)}}</span><i style="--count:{{$count}}"></i><strong>{{$count}}</strong></div>@endforeach</div></section></div>
<section class="tp-panel"><div class="table-responsive"><table class="table tp-data-table"><thead><tr><th>{{__('rankings.date')}}</th><th>{{__('rankings.keyword')}}</th><th>{{__('rankings.project')}}</th><th>{{__('rankings.rank')}}</th><th>{{__('rankings.previous')}}</th><th>{{__('rankings.change')}}</th><th>{{__('rankings.engine')}}</th><th>{{__('rankings.country')}}</th><th>{{__('rankings.language')}}</th><th>{{__('rankings.device')}}</th><th>{{__('rankings.status')}}</th><th>{{__('rankings.action')}}</th></tr></thead><tbody>@forelse($rows as $row)<tr><td>{{$row['check']->checked_at->translatedFormat('d M Y H:i')}}</td><td><a href="{{route('rankings.keywords.show',$row['keyword'])}}">{{$row['keyword']->phrase}}</a></td><td>{{$row['project']->name}}</td><td>{{$row['rank']?'#'.$row['rank']:'100+'}}</td><td>{{$row['previous']?'#'.$row['previous']:'—'}}</td><td><span class="tp-movement tp-{{$row['movement']}}">{{__('rankings.'.$row['movement'])}} @if($row['change']!==null){{$row['change']>0?'+':''}}{{$row['change']}}@endif</span></td><td>{{$row['check']->search_engine->label()}}</td><td>{{$row['check']->country_code}}</td><td>{{$row['check']->language_code}}</td><td>{{$row['check']->device->label()}}</td><td>{{$row['check']->status->label()}}</td><td><a href="{{route('rankings.checks.show',$row['check'])}}">{{__('rankings.view')}}</a></td></tr>@empty<tr><td colspan="12"><x-empty-state :title="__('rankings.no_filter_data')" :description="__('rankings.no_checks')"/></td></tr>@endforelse</tbody></table></div>{{$rows->links()}}</section>
</x-customer-shell></x-layouts.app>
@@ -0,0 +1 @@
<x-layouts.app :title="$keyword->phrase.' — '.__('rankings.title')"><x-customer-shell><nav><ol class="breadcrumb"><li class="breadcrumb-item"><a href="{{route('rankings.index')}}">{{__('rankings.title')}}</a></li><li class="breadcrumb-item active">{{$keyword->phrase}}</li></ol></nav><header class="tp-page-header"><div><p>{{$keyword->project->name}} · {{$keyword->project->domain}}</p><h1>{{$keyword->phrase}}</h1><span>{{$keyword->search_engine->label()}} · {{$countries[$keyword->country_code]}} · {{$languages[$keyword->language_code]}} · {{$keyword->device->label()}}</span></div></header><section class="tp-metric-grid tp-ranking-metrics"><x-metric-card :label="__('rankings.current')" :value="$metrics['current']?'#'.$metrics['current']:'100+'" icon=""/><x-metric-card :label="__('rankings.previous')" :value="$metrics['previous']?'#'.$metrics['previous']:'—'" icon=""/><x-metric-card :label="__('rankings.best')" :value="$metrics['best']?'#'.$metrics['best']:'—'" icon=""/><x-metric-card :label="__('rankings.worst')" :value="$metrics['worst']?'#'.$metrics['worst']:'—'" icon=""/><x-metric-card :label="__('rankings.measurements')" :value="$metrics['count']" icon=""/><x-metric-card :label="__('rankings.top10_rate')" :value="$metrics['top10']!==null?$metrics['top10'].'%':null" icon=""/></section><section class="tp-panel"><div class="tp-panel-heading"><h2>{{__('rankings.keyword_history')}}</h2></div><div class="table-responsive"><table class="table tp-data-table"><thead><tr><th>{{__('rankings.date')}}</th><th>{{__('rankings.rank')}}</th><th>{{__('rankings.previous')}}</th><th>{{__('rankings.change')}}</th><th>{{__('rankings.status')}}</th><th>{{__('rankings.action')}}</th></tr></thead><tbody>@forelse($rows as $row)<tr><td>{{$row['check']->checked_at->translatedFormat('d M Y H:i')}}</td><td>{{$row['rank']?'#'.$row['rank']:'100+'}}</td><td>{{$row['previous']?'#'.$row['previous']:'—'}}</td><td>{{__('rankings.'.$row['movement'])}}</td><td>{{$row['check']->status->label()}}</td><td><a href="{{route('rankings.checks.show',$row['check'])}}">{{__('rankings.view')}}</a></td></tr>@empty<tr><td colspan="6">{{__('rankings.no_checks')}}</td></tr>@endforelse</tbody></table></div></section></x-customer-shell></x-layouts.app>