@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

Erikk

Strategi Brand Editorial & Pengalaman Portofolio

Erikk - Strategi Brand Editorial & Pengalaman Portofolio ERIKK UNLEASHING YOUR BRAND'S POTENTIAL 01 BRANDING 02 CAMPAIGNS 03 E-COMMERCE 04 DIGITAL MEDIA

Ringkasan Proyek

Erikk dibangun sebagai platform digital untuk rumah mode dan agensi branding di Berlin. Proyek ini memadukan estetika majalah cetak dengan interaktivitas web modern.

Tantangan

Menghadirkan pengalaman membaca konten editorial mode yang mendalam dengan tata letak artikel asimetris tanpa mengorbankan konsistensi keterbacaan font dan hierarki informasi.

Solusi & Arsitektur Teknis

Mengembangkan sistem tata letak fluid typography berbasis clamp() CSS modern, sistem navigasi bab interaktif, dan galeri multi-layered lookbook.

Editorial Lookbook dengan pergerakan parallax halus dan lazy loading adaptif.
Tipografi Swiss terstruktur dengan rasio skala modular yang presisi.
Struktur konten fleksibel memudahkan tim internal merilis koleksi baru secara instan.
Optimasi SEO teknis dengan semantic metadata lengkap dan schema markup.

Tertarik berkolaborasi atau mendiskusikan proyek baru?

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

Kirim Pesan