@extends('layouts.app') @section('title', ($profile?->nama ?? 'Portfolio') . ' — Chess Monochrome Portfolio') @php $profileName = $profile?->nama ?? 'Adi Yaksa Aufa Alfadil'; $nameWords = preg_split('/\s+/', trim($profileName)) ?: [$profileName]; $firstNameLine = count($nameWords) > 2 ? implode(' ', array_slice($nameWords, 0, 2)) : $profileName; $secondNameLine = count($nameWords) > 2 ? implode(' ', array_slice($nameWords, 2)) : ''; $resolveImage = static function (?string $path): ?string { if (blank($path)) { return null; } if (\Illuminate\Support\Str::startsWith($path, ['http://', 'https://', '/'])) { return $path; } $trimmed = ltrim($path, '/'); if (is_file(public_path($trimmed)) && filesize(public_path($trimmed)) > 0) { return asset($trimmed); } $inImages = public_path('images/' . $trimmed); if (is_file($inImages) && filesize($inImages) > 0) { return asset('images/' . $trimmed); } return null; }; $profilePhotoUrl = $resolveImage($profile?->foto_profil) ?? $resolveImage('images/profile.png'); $hasExternalCv = filled($profile?->cv_link) && $profile?->cv_link !== '#'; $primaryInstitution = $educations->first()?->nama_institusi ?? ''; $certificatesAndAwards = $certificateItems->concat($awardItems)->values(); @endphp @section('content')
@php $rawPlayerCode = (string) ($profile?->player_code ?? 'PLAYER_001'); $rawPosition = (string) ($profile?->posisi ?? ''); $rawSemester = (string) ($profile?->semester_label ?? ''); $heroPlayerCode = (filled($rawPosition) && str_contains(strtoupper($rawPosition), 'WEB') && str_contains(strtoupper($rawPlayerCode), 'WEB')) ? trim(\Illuminate\Support\Str::before($rawPlayerCode, '//')) : $rawPlayerCode; $heroPosition = $rawPosition; if (filled($rawSemester) && str_contains(strtoupper($rawSemester), 'SEMESTER') && preg_match('/\b(\d+(?:st|nd|rd|th)|first|second|third|fourth|fifth|sixth|seventh|eighth)\s+semester\b/i', $heroPosition)) { $heroPosition = trim(preg_replace('/\b(\d+(?:st|nd|rd|th)|first|second|third|fourth|fifth|sixth|seventh|eighth)\s+semester\b\s*[\/|•-]?\s*/i', '', $heroPosition)); } @endphp
{{ $heroPlayerCode }}

{{ $firstNameLine }} @if ($secondNameLine)
{{ $secondNameLine }} @endif

ID {{ $profile?->lokasi }}

@if (filled($heroPosition))

> {{ $heroPosition }}

@endif @if (filled($profile?->fokus_utama))

> {{ $profile->fokus_utama }}

@endif
@if ($hasExternalCv) Download CV @else @endif
@if ($profilePhotoUrl)
{{ $profileName }}
@else
@endif

Drag portrait to inspect 3D depth

Status

{{ $profile?->status_kerja ?? 'Open to Work' }}
@if (filled($profile?->ketersediaan))

{{ $profile->ketersediaan }}

@endif
{{ $profile?->semester_label ?? 'SEM 05' }} RANK
@if ($primaryInstitution)

{{ $primaryInstitution }}

@endif

Portfolio

Projects {{ str_pad((string) $portfolioCounts['project'], 2, '0', STR_PAD_LEFT) }}
Certs {{ str_pad((string) $portfolioCounts['certificate'], 2, '0', STR_PAD_LEFT) }}
Exp/Awards {{ str_pad((string) ($portfolioCounts['experience'] + $portfolioCounts['award']), 2, '0', STR_PAD_LEFT) }}
View Work @foreach ($socialMedias->take(3) as $soc) {{ strtoupper($soc->nama_platform) }} → @endforeach

GRANDMASTER STRATEGY // SKILLS

THE JOURNEY
SO FAR.

{{ $profile?->deskripsi }}

Technical Skills HOVER OR CLICK TO MOVE
@forelse ($technicalSkills as $idx => $skill) @empty

No skills seeded yet.

@endforelse
INTERACTIVE SKILL BOARD // 8x8 Click or drag any piece to any square you like
@php $files = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; $ranks = [8, 7, 6, 5, 4, 3, 2, 1]; @endphp
@foreach ($ranks as $rIndex => $rank) @foreach ($files as $fIndex => $file) @php $coord = $file . $rank; $isLightSquare = ($rIndex + $fIndex) % 2 === 0; @endphp @endforeach @endforeach
@foreach ($chessMoves as $idx => $move) @php $colIdx = array_search($move['square'][0] ?? 'e', $files, true); $rowIdx = 8 - (int) ($move['square'][1] ?? 1); $colIdx = $colIdx === false ? 4 : $colIdx; @endphp @endforeach
PIECE 01 {{ strtoupper((string) ($chessMoves->first()['piece'] ?? 'KING')) }} • SQUARE {{ strtoupper((string) ($chessMoves->first()['square'] ?? 'E1')) }}

{{ $chessMoves->first()['skill'] ?? 'Laravel' }}

{{ $chessMoves->first()['description'] ?? '' }}

Proficiency {{ $chessMoves->first()['proficiency'] ?? 90 }}%
Move Log:
Click or drag any piece to start recording moves...
@foreach ($pillarSkills as $pillar)
{{ $pillar->kode_notasi }}

{{ $pillar->nama_skill }}

{{ $pillar->deskripsi }}

@endforeach

CHRONICLE // EDUCATION & EXPERIENCE

FROM STUDENT
TO SHIPPING.

@forelse ($timelineItems as $index => $item) @php $isLeft = $index % 2 === 0; $hasDistinctNarrative = filled($item['narrative']) && trim((string) $item['narrative']) !== trim((string) $item['description']); @endphp
{{ $item['badge'] }} {{ $item['tahun'] }}

{{ $item['title'] }}

{{ $item['subtitle'] }}

@if (filled($item['description']))

{{ $item['description'] }}

@endif
{{ $item['meta'] }} {{ $item['year_marker'] }}
{{ $item['year_marker'] }}
@if ($hasDistinctNarrative)

{{ $item['narrative'] }}

@else

{{ $item['subtitle'] }} // {{ $item['meta'] }}

@endif
@empty
No timeline records found in database.
@endforelse

CURATED PORTFOLIO // INDEX

SELECTED
WORK.

{{ $portfolios->count() }} dynamic records across web systems, UI/UX certifications, and student competition recognitions — stored and served via MySQL.

3D MONUMENT // CHESS ORBIT READY
DRAG TO ROTATE

{{ $profile?->status_kerja }}

{{ $profile?->lokasi }}

{{ $profile?->email }}

Projects {{ str_pad((string) $portfolioCounts['project'], 2, '0', STR_PAD_LEFT) }}
Certificates {{ str_pad((string) $portfolioCounts['certificate'], 2, '0', STR_PAD_LEFT) }}
Awards {{ str_pad((string) $portfolioCounts['award'], 2, '0', STR_PAD_LEFT) }}
Skills {{ str_pad((string) $portfolioCounts['skill'], 2, '0', STR_PAD_LEFT) }}
@if ($featuredItems->isNotEmpty())
@foreach ($featuredItems as $feat) @php $featThumb = $resolveImage($feat->gambar); $featLink = filled($feat->link_detail) && $feat->link_detail !== '#' ? $feat->link_detail : ''; $featTags = is_array($feat->tech_stack) ? implode(',', $feat->tech_stack) : ''; @endphp @endforeach
@endif

SELECTED REPOSITORY // ARCHIVE

RECENT
PROJECTS.

@forelse ($portfolios as $port) @php $thumbUrl = $resolveImage($port->gambar); $catKey = strtolower((string) $port->kategori); $hasDetailLink = filled($port->link_detail) && $port->link_detail !== '#'; $tagList = is_array($port->tech_stack) ? $port->tech_stack : []; @endphp
{{ str_pad((string) $loop->iteration, 2, '0', STR_PAD_LEFT) }}
{{ strtoupper($port->kategori) }} {{ $port->tahun }}
@if ($thumbUrl)
{{ $port->judul }}
@endif

{{ $port->judul }}

@if (filled($port->deskripsi))

{{ $port->deskripsi }}

@endif @if (! empty($tagList))
@foreach ($tagList as $tag) {{ $tag }} @endforeach
@endif
@if ($hasDetailLink) Live Site @else {{ $port->sub_judul ?? 'ARCHIVE' }} @endif
@empty
No portfolio records found in database.
@endforelse

VERIFIED CREDENTIALS & HONORS

THE
CERTIFICATES.

Professional certifications and competition awards validating technical rigor and interface craft.

@forelse ($certificatesAndAwards as $cert) @php $certThumb = $resolveImage($cert->gambar); $certLink = filled($cert->link_detail) && $cert->link_detail !== '#' ? $cert->link_detail : ''; $certTags = is_array($cert->tech_stack) ? $cert->tech_stack : []; @endphp
{{ $cert->tahun }} {{ strtoupper($cert->kategori) }}

{{ $cert->judul }}

@if (filled($cert->deskripsi))

{{ $cert->deskripsi }}

@endif
{{ strtoupper($cert->penyelenggara ?? $cert->kategori) }} @if (! empty($certTags)) {{ implode(' · ', array_slice($certTags, 0, 2)) }} @endif
@if ($certThumb) @endif
@empty
No certificates or awards seeded yet.
@endforelse

DIRECT CONTACT // NEXT MOVE

LET'S BUILD
SOMETHING.

Have a project or collaboration in mind? Send a message or sign the guestbook below.

@if (filled($profile?->email)) {{ $profile->email }} @endif
CHESS // DEV PASS
@if ($profilePhotoUrl) {{ $profileName }} @else @endif

{{ $profileName }}

{{ $profile?->posisi }}

{{ $profile?->status_kerja ?? 'OPEN' }} {{ $profile?->semester_label ?? 'SEM 05' }}

ID // {{ strtoupper($profile?->monogram ?? 'AYA') }}-2026-UMMI

Find Me

@forelse ($socialMedias as $soc)

{{ $soc->username ?: $soc->nama_platform }}

on {{ $soc->nama_platform }}

@empty

No social links configured.

@endforelse

Send a Message

Direct inquiry — messages are stored securely in the database.

@if (session('contact_success'))
{{ session('contact_success') }}
@endif @if ($errors->contact->any())
@foreach ($errors->contact->all() as $error)

• {{ $error }}

@endforeach
@endif
@csrf

Visitor Guestbook ({{ $comments->count() }})

Leave a note or feedback — persisted in MySQL.

@if (session('comment_success'))
{{ session('comment_success') }}
@endif @if ($errors->comment->any())
@foreach ($errors->comment->all() as $error)

• {{ $error }}

@endforeach
@endif
@csrf
@forelse ($comments as $comment) @php $commentAvatar = $resolveImage($comment->foto_profil); @endphp
@if ($commentAvatar) {{ $comment->nama }} @else
{{ strtoupper(substr($comment->nama, 0, 1)) }}
@endif

{{ $comment->nama }}

{{ $comment->created_at?->format('M d, Y') }}

{{ $comment->komentar }}

@empty

No comments yet. Make the opening move!

@endforelse
@include('partials.cv-modal') @include('partials.portfolio-modal') @endsection @push('scripts') @endpush