@php $pData = $portfolio->data ?? []; $profile = $pData['profile'] ?? []; $design = $pData['design'] ?? []; $visibility = $pData['visibility'] ?? []; $blocksEnabled = $pData['blocks'] ?? []; $profilePhoto = $profile['profile_photo'] ?? ($portfolio->user->avatar_url ?? ''); $skillsRaw = $pData['skills'] ?? []; $skillsFlat = []; foreach ($skillsRaw as $s) { $skillsFlat[] = is_array($s) ? ($s['name'] ?? ($s['text'] ?? '')) : $s; } @endphp

Edit Portfolio

@if(session('ok'))
{{ session('ok') }}
@endif @if(session('error'))
{{ session('error') }}
@endif
@csrf
@csrf
@if($canQr) Download QR @endif
@csrf @method('PUT')
Upload to replace the profile photo URL for this portfolio. @error('profile_photo_image')
{{ $message }}
@enderror
@if(!empty($profilePhoto))
Current profile photo
@endif
@foreach($portfolioBlocks as $block) @php $enabled = $blocksEnabled[$block] ?? true; @endphp
@endforeach
@if(!$canAttachResume) Resume attachment is plan-gated (`resume_attach` feature). @endif
@foreach(['download_enabled' => 'Download Resume', 'preview_enabled' => 'Resume Preview', 'timeline_enabled' => 'Timeline Block'] as $key => $label) @endforeach
You can upload multiple images and set position order below.
@php $galleryItems = $portfolio->data['gallery']['items'] ?? []; if (!is_array($galleryItems)) { $galleryItems = []; } @endphp @if(count($galleryItems))
Existing Uploaded Images
@foreach($galleryItems as $item) @php $path = $item['path'] ?? ''; $position = $item['position'] ?? 1; @endphp @if($path)
gallery image
@endif @endforeach
@endif
Block Editor (Drag & Drop + Content)
@if($portfolio->sections->count())
@csrf
Reorder Blocks
    @foreach($portfolio->sections as $section)
  • {{ ucfirst($section->block_type) }} Drag
  • @endforeach
Block Content
@foreach($portfolio->sections->sortBy('order') as $section) @php $content = $section->content ?? []; $items = isset($content['items']) && is_array($content['items']) ? $content['items'] : []; $itemsText = ''; if (in_array($section->block_type, ['experience','education'])) { $itemsText = implode("\n", array_map(function ($i) { if (!is_array($i)) return $i; return trim( ($i['title'] ?? '') . '|' . ($i['company'] ?? '') . '|' . ($i['start'] ?? '') . '|' . ($i['end'] ?? '') . '|' . ($i['description'] ?? '') , '|'); }, $items)); } elseif ($section->block_type === 'portfolio') { $itemsText = implode("\n", array_map(function ($i) { if (!is_array($i)) return $i; return trim( ($i['title'] ?? '') . '|' . ($i['description'] ?? '') . '|' . ($i['url'] ?? '') . '|' . ($i['image'] ?? '') , '|'); }, $items)); } elseif ($section->block_type === 'services') { $itemsText = implode("\n", array_map(function ($i) { if (!is_array($i)) return $i; return trim( ($i['title'] ?? '') . '|' . ($i['description'] ?? '') , '|'); }, $items)); } elseif ($section->block_type === 'testimonials') { $itemsText = implode("\n", array_map(function ($i) { if (!is_array($i)) return $i; return trim( ($i['name'] ?? '') . '|' . ($i['role'] ?? '') . '|' . ($i['rating'] ?? '') . '|' . ($i['text'] ?? '') , '|'); }, $items)); } else { $itemsText = implode("\n", array_map(fn($i) => is_array($i) ? ($i['text'] ?? json_encode($i)) : $i, $items)); } @endphp
{{ ucfirst($section->block_type) }}
@csrf
@if($section->block_type === 'hero')
@elseif($section->block_type === 'about')
@elseif(in_array($section->block_type, ['skills','experience','education','experience_timeline','education_history','portfolio','projects','case_studies','product_showcase','services','testimonials'])) @php $items = isset($content['items']) && is_array($content['items']) ? $content['items'] : []; @endphp
@forelse($items as $idx => $item) @php $item = is_array($item) ? $item : ['text' => $item]; @endphp
::
@if($section->block_type === 'skills')
@elseif(in_array($section->block_type, ['experience','education','experience_timeline','education_history']))
@elseif(in_array($section->block_type, ['portfolio','projects','case_studies','product_showcase']))
@elseif($section->block_type === 'services')
@elseif($section->block_type === 'testimonials')
@endif
@empty @endforelse
@elseif($section->block_type === 'contact')
@elseif($section->block_type === 'footer')
@else
No editor for this block type.
@endif
@endforeach
@else
No sections found for this portfolio.
@endif