@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[] =
All Projects

Erikk

Editorial Brand Strategy & Portfolio Experience

Erikk - Editorial Brand Strategy & Portfolio Experience ERIKK UNLEASHING YOUR BRAND'S POTENTIAL 01 BRANDING 02 CAMPAIGNS 03 E-COMMERCE 04 DIGITAL MEDIA

Project Summary

Erikk was built as a digital platform for a fashion house and branding agency in Berlin. The project blends print-magazine aesthetics with modern web interactivity.

Challenge

Delivering a deep editorial fashion reading experience with asymmetric article layouts without sacrificing font readability consistency or information hierarchy.

Solution & Technical Architecture

Developing a fluid typography layout system based on modern CSS clamp(), an interactive chapter navigation system, and a multi-layered lookbook gallery.

Editorial lookbook with smooth parallax movement and adaptive lazy loading.
Structured Swiss typography with a precise modular scale ratio.
Flexible content structure that lets the internal team publish new collections instantly.
Technical SEO optimisation with complete semantic metadata and schema markup.

Interested in collaborating or discussing a new project?

Open to freelance work, software architecture consulting, and engineering positions.

Send Message