@extends('layouts.public') @section('title', $seller->display_name) @section('meta_description', $seller->headline ?: __('Properties listed by :name', ['name' => $seller->display_name])) @push('head') @php // Built in PHP rather than with @json: Blade treats an @-prefixed key // inside a directive as a directive of its own, which silently mangles // the document. $schema = [ '@context' => 'https://schema.org', '@type' => 'RealEstateAgent', 'name' => $seller->display_name, 'url' => route('sellers.show', $seller->slug), 'description' => $seller->headline ?: null, 'image' => $seller->logo ? image_url($seller->logo) : null, 'telephone' => $seller->contactPhone() ?: null, 'email' => $seller->contactEmail() ?: null, 'address' => array_filter([ '@type' => 'PostalAddress', 'addressLocality' => $seller->city ?: null, 'addressRegion' => $seller->district ?: null, 'addressCountry' => 'NP', ]), // Only real, published reviews are declared. A rating nobody left is // a rating that gets a site penalised, and rightly. 'aggregateRating' => $seller->rating_count > 0 ? [ '@type' => 'AggregateRating', 'ratingValue' => (string) $seller->rating_average, 'reviewCount' => (string) $seller->rating_count, ] : null, ]; @endphp @endpush @section('content') {{-- The header answers the question a buyer is really asking: who is this, and has anyone checked them. --}}
@if ($seller->cover_image)
@endif
@if ($seller->logo) @else ! $seller->cover_image, ])>{{ $seller->displayInitials() }} @endif
{{ $seller->type->label() }} @if ($seller->isVerified()) {{ __('Verified') }} @endif @if ($seller->rating_count > 0) {{ number_format($seller->rating_average, 1) }} {{ trans_choice('/5 from one review|/5 from :count reviews', $seller->rating_count, ['count' => $seller->rating_count]) }} @endif

$seller->cover_image, 'text-text' => ! $seller->cover_image, ])>{{ $seller->display_name }}

@if ($seller->headline)

$seller->cover_image, 'text-text-secondary' => ! $seller->cover_image, ])>{{ $seller->headline }}

@endif
@if ($seller->bio)

{{ __('About') }}

{{ $seller->bio }}

@endif

{{ trans_choice('One property|:count properties', $listings->total(), ['count' => $listings->total()]) }}

@if ($listings->isEmpty()) @else
@foreach ($listings as $listing) @include('public.partials.listing-card', [ 'listing' => $listing, 'favouritedIds' => $favouritedIds, ]) @endforeach
{{ $listings->links() }}
@endif
{{-- Reviews sit below the listings: a buyer looks at what is for sale first and at who is selling it second. Only published reviews appear — the rest exist for moderation, not for reading. --}}

{{ __('Reviews') }}

@if ($seller->rating_count > 0)

{{ number_format($seller->rating_average, 1) }} {{ trans_choice('out of 5, from one review|out of 5, from :count reviews', $seller->rating_count, ['count' => $seller->rating_count]) }}

@endif
@if ($reviews->isEmpty()) @else
@foreach ($reviews as $review)

{{ str_repeat('★', $review->rating) }}{{ str_repeat('☆', 5 - $review->rating) }} @if ($review->title) {{ $review->title }} @endif

{{ $review->author?->name ?? __('A buyer') }} · {{ $review->created_at->format('j M Y') }} @if ($review->isVerifiedDealing()) · {{ __('Verified dealing') }} @endif

{{ $review->body }}

@if ($review->hasReply())

{{ __('Reply from :name', ['name' => $seller->display_name]) }}

{{ $review->reply }}

@endif
@endforeach
@endif
@endsection