@php $locale = app()->getLocale(); $isId = $locale === 'id'; $ogLocale = $isId ? 'id_ID' : 'en_US'; $ogLocaleAlt = $isId ? 'en_US' : 'id_ID'; $baseUrl = rtrim(url('/'), '/'); $cleanUrl = rtrim(url()->current(), '/'); if ($cleanUrl === '') { $cleanUrl = $baseUrl; } if ($cleanUrl === $baseUrl) { $cleanUrl = $baseUrl . '/'; } $queryLang = request()->query('lang'); $canonicalUrl = in_array($queryLang, ['en', 'id'], true) ? $cleanUrl . '?lang=' . $queryLang : $cleanUrl; $hreflangEn = $cleanUrl . '?lang=en'; $hreflangId = $cleanUrl . '?lang=id'; $metaTitle = trim((string) ($seoTitle ?? $title ?? __('nav.title'))); $metaDesc = trim((string) ($seoDescription ?? __('nav.meta_desc'))); $metaKeywords = trim((string) ($seoKeywords ?? __('nav.meta_keywords'))); $metaType = (string) ($seoType ?? 'website'); $metaImage = (string) ($seoImage ?? asset('images/og-cover.png')); $metaImageAlt = trim((string) ($seoImageAlt ?? $metaTitle)); $robotsDirective = (string) ($seoRobots ?? 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1'); $navSetting = $navbar ?? \App\Models\Setting::get('navbar', []); $aboutSetting = $about ?? \App\Models\Setting::get('about', []); $ctaSetting = $cta ?? \App\Models\Setting::get('cta', []); $ctaEmail = (string) ($ctaSetting['email'] ?? 'cahya@example.com'); $sameAs = []; foreach (($navSetting['socials'] ?? []) as $social) { $sUrl = trim((string) ($social['url'] ?? '')); if ($sUrl !== '' && $sUrl !== '#' && ! str_starts_with($sUrl, 'mailto:')) { $sameAs[] = $sUrl; } } $sameAs = array_values(array_unique($sameAs)); $knowsAbout = []; foreach (($aboutSetting['stack']['chips'] ?? []) as $chip) { if (! empty($chip['name'])) { $knowsAbout[] = (string) $chip['name']; } } foreach (($aboutSetting['modal']['categories'] ?? []) as $category) { foreach (($category['items'] ?? []) as $item) { if (! empty($item['name'])) { $knowsAbout[] = (string) $item['name']; } } } if ($knowsAbout === []) { $knowsAbout = [ 'PHP', 'TypeScript', 'JavaScript', 'Python', 'Go (Golang)', 'Rust', 'Laravel', 'React', 'Next.js', 'Vue.js', 'Tailwind CSS', 'PostgreSQL', 'MySQL', 'Redis', 'Docker', 'Kubernetes', 'AWS', 'Google Cloud', 'Software Architecture', 'Full Stack Web Development', 'UI/UX Design Systems', ]; } $knowsAbout = array_values(array_unique($knowsAbout)); $occupations = []; foreach (($aboutSetting['exp']['items'] ?? []) as $expItem) { $roleName = \App\Models\Setting::text($expItem['role'] ?? null, ''); if ($roleName !== '') { $occupations[] = [ '@type' => 'Occupation', 'name' => $roleName, ]; } } $personName = (string) ($aboutSetting['name'] ?? 'Cahya Krisna'); $personDesc = \App\Models\Setting::text($aboutSetting['desc'] ?? null, __('home.about_desc')); $graph = [ [ '@type' => 'Person', '@id' => $baseUrl . '/#person', 'name' => $personName, 'alternateName' => ['Cahya', 'Cahya Krisna Software Engineer', 'Cahya Krisna Developer'], 'jobTitle' => 'Multi-Disciplinary Technologist & Senior Full Stack Software Engineer', 'description' => $personDesc, 'url' => $baseUrl . '/', 'image' => [ asset('images/og-cover.png'), asset('foto.jpeg'), asset('assets/cahya/cahya_char_full.png'), ], 'email' => 'mailto:' . $ctaEmail, 'nationality' => [ '@type' => 'Country', 'name' => 'Indonesia', ], 'knowsLanguage' => ['Indonesian', 'English'], 'knowsAbout' => $knowsAbout, 'hasOccupation' => $occupations, 'sameAs' => $sameAs, ], [ '@type' => 'WebSite', '@id' => $baseUrl . '/#website', 'url' => $baseUrl . '/', 'name' => 'Cahya Krisna - Portfolio & Selected Works', 'alternateName' => ['Portofolio Cahya Krisna', 'Cahya Krisna Official Website'], 'description' => $metaDesc, 'inLanguage' => ['en-US', 'id-ID'], 'author' => ['@id' => $baseUrl . '/#person'], 'publisher' => ['@id' => $baseUrl . '/#person'], ], ]; if (isset($project) && $project instanceof \App\Models\Project) { $projectUrl = route('project.show', $project->slug); $projectKeywords = array_values(array_unique(array_merge( $project->tech_stack ?? [], $project->badges ?? [], ['Cahya Krisna', $project->title] ))); $graph[] = [ '@type' => 'WebPage', '@id' => $projectUrl . '#webpage', 'url' => $projectUrl, 'name' => $metaTitle, 'description' => $metaDesc, 'isPartOf' => ['@id' => $baseUrl . '/#website'], 'about' => ['@id' => $baseUrl . '/#person'], 'inLanguage' => $isId ? 'id-ID' : 'en-US', 'datePublished' => optional($project->created_at)->toAtomString() ?? now()->toAtomString(), 'dateModified' => optional($project->updated_at)->toAtomString() ?? now()->toAtomString(), ]; $graph[] = [ '@type' => 'CreativeWork', '@id' => $projectUrl . '#creativework', 'mainEntityOfPage' => ['@id' => $projectUrl . '#webpage'], 'headline' => $project->title . ' - ' . ($project->subtitle ?? ''), 'name' => $project->title, 'alternativeHeadline' => (string) ($project->subtitle ?? ''), 'description' => (string) ($project->summary ?? $metaDesc), 'text' => trim(implode("\n\n", array_filter([ $project->summary, $project->challenge, $project->solution, ]))), 'url' => $projectUrl, 'image' => [ $project->cover_url ?: asset('images/og-cover.png'), route('seo.og.project', $project->slug), ], 'author' => ['@id' => $baseUrl . '/#person'], 'creator' => ['@id' => $baseUrl . '/#person'], 'publisher' => ['@id' => $baseUrl . '/#person'], 'keywords' => implode(', ', $projectKeywords), 'inLanguage' => $isId ? 'id-ID' : 'en-US', 'datePublished' => optional($project->created_at)->toAtomString() ?? now()->toAtomString(), 'dateModified' => optional($project->updated_at)->toAtomString() ?? now()->toAtomString(), ]; $graph[] =
Semua Proyek

Fokus

Portofolio Dark Mode Minimal untuk Developer

Fokus - Portofolio Dark Mode Minimal untuk Developer FOKUS MINIMALIST PORTFOLIO

Ringkasan Proyek

Fokus dirancang khusus sebagai antarmuka portofolio bagi software engineer dan spesialis backend. Memprioritaskan keterbacaan kode, statistik repositori, dan rekam jejak teknis tanpa dekorasi yang tidak perlu.

Tantangan

Menghilangkan kompleksitas visual yang sering mengaburkan substansi teknis portofolio engineering, sekaligus menjaga tampilan tetap berkelas dan profesional.

Solusi & Arsitektur Teknis

Menggunakan arsitektur monokromatik terkalibrasi OLED dengan kontras tinggi, typography mono terintegrasi, dan komponen UI yang berorientasi pada data.

Skema warna Dark OLED yang dirancang untuk kenyamanan mata saat membaca dokumentasi.
Komponen Code Snippet interaktif dengan salin instan dan sintaks terformat rapi.
Integrasi GitHub API untuk menampilkan statistik kontribusi dan bintang repositori live.
Ukuran bundel ultra-kecil untuk waktu muat halaman di bawah 300ms.

Tertarik berkolaborasi atau mendiskusikan proyek baru?

Terbuka untuk kerja sama freelance, konsultasi arsitektur perangkat lunak, maupun posisi engineering.

Kirim Pesan