@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

Analytics Engine

Pemrosesan Event Throughput Tinggi & Dashboard Real-time

Analytics Engine - Pemrosesan Event Throughput Tinggi & Dashboard Real-time ANALYTICS ENGINE ENTERPRISE TELEMETRY & METRICS

Ringkasan Proyek

Platform pemrosesan data telemetri dan metrik keuangan berskala besar. Menerima aliran event transaksi secara masif dan menyajikan ringkasan visual real-time.

Tantangan

Sistem analitik berbasis batch processing lama mengalami keterlambatan hingga 4 jam dalam menyajikan data transaksi keuangan kritis kepada tim fraud dan operations.

Solusi & Arsitektur Teknis

Membangun pipeline event streaming menggunakan Go worker pools, Apache Kafka untuk ingestion queue, dan Redis time-series untuk agregasi data sebelum disimpan ke PostgreSQL.

Pipeline Ingestion Go dengan konkurensi goroutine tinggi memproses jutaan request stabil.
Dasbor telemetri interaktif dengan latency sub-detik untuk pemantauan live.
Sistem deteksi anomali otomatis yang mengirimkan peringatan instan saat terjadi lonjakan mencurigakan.
Arsitektur cloud terisolasi dengan auto-scaling berbasis beban lalu lintas.

Tertarik berkolaborasi atau mendiskusikan proyek baru?

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

Kirim Pesan