@php $meta = $themeMeta ?? []; $scheme = $meta['scheme'] ?? []; $fonts = $meta['fonts'] ?? []; $style = $meta['style'] ?? 'modern'; $visibility = $portfolio->data['visibility'] ?? []; @endphp @if(!empty($visibility['noindex'])) @endif @php $siteFavicon = \App\Models\Setting::getVersionedValue('site_favicon_url', ''); @endphp @if(!empty($siteFavicon)) @endif @php $data = $portfolio->data ?? []; $profile = $data['profile'] ?? []; $sections = $portfolio->sections?->where('is_visible', true)->sortBy('order') ?? collect(); $heroSection = $sections->firstWhere('block_type', 'hero')->content ?? []; $about = $sections->firstWhere('block_type', 'about')->content['bio'] ?? ($data['about']['bio'] ?? ''); $skills = $sections->firstWhere('block_type', 'skills')->content['items'] ?? ($data['skills'] ?? ($data['skills']['items'] ?? [])); $experience = $sections->firstWhere('block_type', 'experience')->content['items'] ?? []; $education = $sections->firstWhere('block_type', 'education')->content['items'] ?? []; $portfolioItems = $sections->firstWhere('block_type', 'portfolio')->content['items'] ?? ($data['projects'] ?? []); $serviceItems = $sections->firstWhere('block_type', 'services')->content['items'] ?? []; $testimonialItems = $sections->firstWhere('block_type', 'testimonials')->content['items'] ?? []; $contact = $sections->firstWhere('block_type', 'contact')->content ?? ($data['contact'] ?? []); $gallery = $data['gallery']['items'] ?? []; if (!is_array($gallery)) { $gallery = []; } usort($gallery, fn($a, $b) => ((int)($a['position'] ?? 1)) <=> ((int)($b['position'] ?? 1))); $normalizeUrl = function (?string $url): ?string { $url = trim((string) $url); if ($url === '') return null; if (preg_match('/^(https?:\/\/|mailto:|tel:)/i', $url)) return $url; if (str_starts_with($url, '//')) return 'https:' . $url; return 'https://' . ltrim($url, '/'); }; $publicUrl = route('public.portfolio', $portfolio->slug); $publicQrUrl = route('public.portfolio.qr', $portfolio->slug); $attachedResumeId = $data['resume']['attached_resume_id'] ?? null; $attachedResume = $attachedResumeId ? \App\Models\Resume::find($attachedResumeId) : null; $profilePhoto = trim((string) ($profile['profile_photo'] ?? '')); if ($profilePhoto === '' && !empty($portfolio->user?->avatar_url)) { $profilePhoto = (string) $portfolio->user->avatar_url; } @endphp
{{ $portfolio->title }}
@if($profilePhoto !== '') Profile photo @endif
Portfolio Profile

{{ $heroSection['name'] ?? ($profile['full_name'] ?? ($data['hero']['name'] ?? $portfolio->title)) }}

{{ $heroSection['headline'] ?? ($profile['title'] ?? ($data['hero']['headline'] ?? 'Professional portfolio and client-ready profile')) }}
Open QR See Projects @if($attachedResume && !empty($data['resume']['download_enabled'])) View Resume @endif
@if($about !== '')

About

A short professional overview and value proposition.

{{ $about }}

@endif @if(is_array($skills) && count($skills))

Skills

Core capabilities used in real projects and client delivery.
@foreach($skills as $skill) {{ is_array($skill) ? ($skill['name'] ?? ($skill['text'] ?? '')) : $skill }} @endforeach
@endif @if(is_array($experience) && count($experience))

Experience

Selected roles, impact, and responsibilities.
@foreach($experience as $item)
{{ is_array($item) ? ($item['title'] ?? 'Role') : $item }}
@if(is_array($item) && !empty($item['company']))
{{ $item['company'] }}
@endif @if(is_array($item) && (!empty($item['start']) || !empty($item['end'])))
{{ $item['start'] ?? '' }} - {{ $item['end'] ?? 'Present' }}
@endif @if(is_array($item) && !empty($item['description']))

{{ $item['description'] }}

@endif
@endforeach
@endif @if(is_array($education) && count($education))

Education

Academic background and training highlights.
@foreach($education as $item)
{{ is_array($item) ? ($item['title'] ?? 'Education') : $item }}
@if(is_array($item) && !empty($item['company']))
{{ $item['company'] }}
@endif @if(is_array($item) && (!empty($item['start']) || !empty($item['end'])))
{{ $item['start'] ?? '' }} - {{ $item['end'] ?? '' }}
@endif @if(is_array($item) && !empty($item['description']))

{{ $item['description'] }}

@endif
@endforeach
@endif

Portfolio

Project samples with outcomes, context, and links.
@forelse($portfolioItems as $item) @php $itemUrl = $normalizeUrl($item['project_url'] ?? ($item['url'] ?? null)); $githubUrl = $normalizeUrl($item['github_url'] ?? null); $demoUrl = $normalizeUrl($item['demo_url'] ?? null); @endphp
{{ $item['title'] ?? 'Project' }}
@if(!empty($item['description']))

{{ $item['description'] }}

@endif @if($itemUrl) Open Project @endif @if($githubUrl)
GitHub
@endif @if($demoUrl)
Live Demo
@endif
@empty
No projects added yet.
@endforelse
@if(count($gallery)) @endif @if(is_array($serviceItems) && count($serviceItems))

Services

Offerings available for clients and collaborators.
@foreach($serviceItems as $item) @php $serviceUrl = $normalizeUrl($item['cta_url'] ?? ($item['url'] ?? null)); @endphp
{{ $item['title'] ?? 'Service' }}
@if(!empty($item['description']))

{{ $item['description'] }}

@endif @if(!empty($item['price']))
Price: {{ $item['price'] }}
@endif @if($serviceUrl) Open Service @endif
@endforeach
@endif @if(is_array($testimonialItems) && count($testimonialItems))

Testimonials

Feedback from clients, teams, and partners.
@foreach($testimonialItems as $item)

"{{ $item['text'] ?? '' }}"

{{ $item['name'] ?? '' }} @if(!empty($item['role'])) - {{ $item['role'] }} @endif
@endforeach
@endif

Contact

Reach out for project collaboration, consulting, or full-time opportunities.
@if(!empty($profile['contact_email']) || !empty($contact['email'])) @php $email = $profile['contact_email'] ?? $contact['email']; @endphp
Email: {{ $email }}
@endif @if(!empty($profile['contact_phone']) || !empty($contact['phone'])) @php $phone = $profile['contact_phone'] ?? $contact['phone']; @endphp
Phone: {{ $phone }}
@endif @php $websiteUrl = $normalizeUrl($contact['website'] ?? null); @endphp @if($websiteUrl)
Website: {{ $contact['website'] }}
@endif