diff --git a/src/assets/og/learning/ai-untuk-programming-dan-coding-cepat.jpg b/src/assets/og/learning/ai-untuk-programming-dan-coding-cepat.jpg new file mode 100644 index 0000000..7ff7763 Binary files /dev/null and b/src/assets/og/learning/ai-untuk-programming-dan-coding-cepat.jpg differ diff --git a/src/assets/og/learning/ai-yang-proaktif.jpg b/src/assets/og/learning/ai-yang-proaktif.jpg new file mode 100644 index 0000000..de6bbd5 Binary files /dev/null and b/src/assets/og/learning/ai-yang-proaktif.jpg differ diff --git a/src/assets/og/learning/buat-ai-sendiri-dengan-open-source.jpg b/src/assets/og/learning/buat-ai-sendiri-dengan-open-source.jpg new file mode 100644 index 0000000..82b6a86 Binary files /dev/null and b/src/assets/og/learning/buat-ai-sendiri-dengan-open-source.jpg differ diff --git a/src/assets/og/learning/menulis-jurnal-dibantu-ai.jpg b/src/assets/og/learning/menulis-jurnal-dibantu-ai.jpg new file mode 100644 index 0000000..4b0303d Binary files /dev/null and b/src/assets/og/learning/menulis-jurnal-dibantu-ai.jpg differ diff --git a/src/assets/og/learning/roadmap-ai-gotong-royong.jpg b/src/assets/og/learning/roadmap-ai-gotong-royong.jpg new file mode 100644 index 0000000..5d041b8 Binary files /dev/null and b/src/assets/og/learning/roadmap-ai-gotong-royong.jpg differ diff --git a/src/assets/og/learning/smart-digital-energy.jpg b/src/assets/og/learning/smart-digital-energy.jpg new file mode 100644 index 0000000..0c1f5c4 Binary files /dev/null and b/src/assets/og/learning/smart-digital-energy.jpg differ diff --git a/src/assets/onno-w-purbo.jpg b/src/assets/onno-w-purbo.jpg new file mode 100644 index 0000000..cd96000 Binary files /dev/null and b/src/assets/onno-w-purbo.jpg differ diff --git a/src/components/SiteHeader.astro b/src/components/SiteHeader.astro index a4e00cc..0cc743c 100644 --- a/src/components/SiteHeader.astro +++ b/src/components/SiteHeader.astro @@ -7,6 +7,7 @@ const navItems = [ ['Home', '/'], ['Falsafah', '/falsafah/'], ['Proyek', '/projects/'], + ['Belajar', '/belajar/'], ['Blog', '/blog/'], ['Forum', '/forum/'], ['Kontak', '/contact/'] @@ -14,8 +15,8 @@ const navItems = [ const mobileNavItems = [ ['Home', '/', 'ph-house'], - ['Falsafah', '/falsafah/', 'ph-book-open-text'], ['Proyek', '/projects/', 'ph-grid-four'], + ['Belajar', '/belajar/', 'ph-books'], ['Blog', '/blog/', 'ph-article'], ['Forum', '/forum/', 'ph-chats-circle'] ]; diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index fd2838e..512a0c7 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -91,6 +91,7 @@ const csp = [ "img-src 'self' data: https://raw.githubusercontent.com https://avatars.githubusercontent.com", "font-src 'self' data:", "connect-src 'self'", + "frame-src https://drive.google.com", "form-action 'self'", "frame-ancestors 'none'", "object-src 'none'" diff --git a/src/lib/learning.ts b/src/lib/learning.ts new file mode 100644 index 0000000..5774571 --- /dev/null +++ b/src/lib/learning.ts @@ -0,0 +1,86 @@ +import type { ImageMetadata } from 'astro'; +import aiYangProaktifOg from '../assets/og/learning/ai-yang-proaktif.jpg'; +import aiUntukProgrammingOg from '../assets/og/learning/ai-untuk-programming-dan-coding-cepat.jpg'; +import buatAiOg from '../assets/og/learning/buat-ai-sendiri-dengan-open-source.jpg'; +import menulisJurnalOg from '../assets/og/learning/menulis-jurnal-dibantu-ai.jpg'; +import roadmapAiOg from '../assets/og/learning/roadmap-ai-gotong-royong.jpg'; +import smartDigitalEnergyOg from '../assets/og/learning/smart-digital-energy.jpg'; + +export interface LearningResource { + slug: string; + title: string; + year: number; + topic: string; + description: string; + driveId: string; + ogImage: ImageMetadata; +} + +export const learningResources: LearningResource[] = [ + { + slug: 'buat-ai-sendiri-dengan-open-source', + title: 'Buat AI Sendiri dengan Open Source', + year: 2026, + topic: 'AI & Open Source', + description: 'Pengantar membangun kemampuan AI secara mandiri dengan teknologi terbuka.', + driveId: '1K7Cm_itM66Pc7QENrQAdv1C3zs6zwTJU', + ogImage: buatAiOg + }, + { + slug: 'ai-untuk-programming-dan-coding-cepat', + title: 'AI untuk Programming dan Coding Cepat', + year: 2026, + topic: 'Pemrograman', + description: 'Catatan praktis memakai AI untuk mempercepat kerja pemrograman.', + driveId: '1uHtRMjQ-sUcK6vhfUAaljpJjZw4edDCg', + ogImage: aiUntukProgrammingOg + }, + { + slug: 'ai-yang-proaktif', + title: 'AI yang Proaktif: Memahami Agentic AI dengan Contoh Sederhana', + year: 2025, + topic: 'Agentic AI', + description: 'Pengenalan agentic AI melalui contoh yang mudah diikuti.', + driveId: '1XyHLOwuX073coykmbv7B0R-qeOR7iM92', + ogImage: aiYangProaktifOg + }, + { + slug: 'menulis-jurnal-dibantu-ai', + title: 'Menulis Jurnal Dibantu AI: Data-First Anti-Halusinasi', + year: 2025, + topic: 'Literasi AI', + description: 'Panduan menggunakan AI secara berbasis data untuk penulisan jurnal.', + driveId: '1RkpZOjNcIcAyq4LYYKhw6kP3kJZcCtwW', + ogImage: menulisJurnalOg + }, + { + slug: 'roadmap-ai-gotong-royong', + title: 'Roadmap AI Gotong Royong bagi Bangsa Indonesia', + year: 2025, + topic: 'Transformasi Digital', + description: 'Pandangan tentang arah pengembangan AI yang kolaboratif di Indonesia.', + driveId: '1P30QgMJq6G3srKYbXYye2DJFciNE7D6p', + ogImage: roadmapAiOg + }, + { + slug: 'smart-digital-energy', + title: 'Smart Digital Energy: Inovasi Teknologi Open Source untuk Pencapaian Target Produksi Migas', + year: 2025, + topic: 'Energi', + description: 'Contoh pemanfaatan teknologi open source untuk sektor energi.', + driveId: '1swVUuIxriekfYxl4KXL5moLonArrH0n9', + ogImage: smartDigitalEnergyOg + } +]; + +export const author = 'Onno W. Purbo'; +export const authorProfileHref = '/belajar/onno-w-purbo/'; +export const authorWebsite = 'https://onnocenter.or.id/'; + +export function drivePreviewUrl(resource: LearningResource) { + return `https://drive.google.com/file/d/${resource.driveId}/preview`; +} + +export function driveDownloadUrl(resource: LearningResource) { + return `https://drive.usercontent.google.com/download?id=${resource.driveId}&export=download&confirm=t`; +} diff --git a/src/pages/belajar/[slug].astro b/src/pages/belajar/[slug].astro new file mode 100644 index 0000000..6485125 --- /dev/null +++ b/src/pages/belajar/[slug].astro @@ -0,0 +1,48 @@ +--- +import BaseLayout from '../../layouts/BaseLayout.astro'; +import BaseButton from '../../components/BaseButton.astro'; +import { author, authorProfileHref, driveDownloadUrl, drivePreviewUrl, learningResources, type LearningResource } from '../../lib/learning'; + +export function getStaticPaths() { + return learningResources.map((resource) => ({ params: { slug: resource.slug }, props: { resource } })); +} + +const { resource } = Astro.props as { resource: LearningResource }; +const jsonLd = { + '@context': 'https://schema.org', + '@type': 'Book', + name: resource.title, + author: { '@type': 'Person', name: author }, + datePublished: String(resource.year), + description: resource.description, + url: new URL(Astro.url.pathname, Astro.site || 'https://indopensource.org').toString() +}; +--- + + +
+
+
Ruang Belajar
+

{resource.topic} · {resource.year} · Karya {author}

+

{resource.title}

+

{resource.description}

+
+ Unduh PDF + Koleksi lainnya +
+
+
+ +
+
+ +
+
+
diff --git a/src/pages/belajar/index.astro b/src/pages/belajar/index.astro new file mode 100644 index 0000000..eeb35b1 --- /dev/null +++ b/src/pages/belajar/index.astro @@ -0,0 +1,63 @@ +--- +import { Image } from 'astro:assets'; +import BaseLayout from '../../layouts/BaseLayout.astro'; +import BaseButton from '../../components/BaseButton.astro'; +import PageHeader from '../../components/PageHeader.astro'; +import onnoPhoto from '../../assets/onno-w-purbo.jpg'; +import { author, authorProfileHref, learningResources } from '../../lib/learning'; + +const topics = [...new Set(learningResources.map((resource) => resource.topic))]; +--- + + + +

+ Koleksi awal karya {author}, tersedia untuk dibaca langsung dari IndopenSource atau diunduh dari sumbernya. +

+
+ {topics.map((topic) => {topic})} +
+
+ +
+
+
+ {learningResources.map((resource) => ( +
+
+ {resource.topic} + {resource.year} +
+

{resource.title}

+

{resource.description}

+

Karya {author}

+
+ Baca online +
+
+ ))} +
+
+
+ +
+ +
+
diff --git a/src/pages/belajar/onno-w-purbo.astro b/src/pages/belajar/onno-w-purbo.astro new file mode 100644 index 0000000..9f1ad4b --- /dev/null +++ b/src/pages/belajar/onno-w-purbo.astro @@ -0,0 +1,88 @@ +--- +import { Image } from 'astro:assets'; +import BaseLayout from '../../layouts/BaseLayout.astro'; +import BaseButton from '../../components/BaseButton.astro'; +import onnoPhoto from '../../assets/onno-w-purbo.jpg'; +import { author, authorWebsite, learningResources } from '../../lib/learning'; + +const itbProfile = 'https://alumni.itb.ac.id/onno-w-purbo/'; +const isocProfile = 'https://www.internetsociety.org/news/press-releases/2020/prestigious-jonathan-b-postel-service-award-presented-to-onno-w-purbo/'; +const jsonLd = { + '@context': 'https://schema.org', + '@type': 'Person', + name: author, + description: 'Pakar teknologi informasi, penulis, pendidik, dan advokat akses internet terbuka di Indonesia.', + image: new URL(onnoPhoto.src, Astro.site || 'https://indopensource.org').toString(), + alumniOf: { '@type': 'CollegeOrUniversity', name: 'Institut Teknologi Bandung' }, + award: 'Jonathan B. Postel Service Award (2020)', + sameAs: [authorWebsite, itbProfile, isocProfile] +}; +--- + + +
+
+
+
Penulis Ruang Belajar
+

{author}

+

Pakar teknologi informasi, penulis, pendidik, dan penggerak akses internet yang lebih terbuka dan terjangkau di Indonesia.

+
+ Baca koleksi karya + Onno Center + Profil ITB +
+
+
+ {`Foto +
Foto: Direktorat Kealumnian ITB
+
+
+
+ +
+
+
+ Jejak +

Membuka akses, membagikan pengetahuan.

+
+

Menurut profil alumni ITB, Onno W. Purbo menempuh Teknik Elektro di ITB, lalu meraih Ph.D. dari University of Waterloo pada bidang teknologi rangkaian terintegrasi untuk satelit.

+

Ia dikenal lewat perjuangannya untuk Linux dan open source, juga inovasi seperti Wajanbolic, RT/RW-Net, serta penerapan OpenBTS untuk memperluas akses internet yang terjangkau.

+

Internet Society mencatat perannya dalam koneksi internet pertama di ITB, jaringan pendidikan Indonesia, teknologi nirkabel dan VoIP, serta penerimaan Jonathan B. Postel Service Award pada 2020.

+
+
+ +
+
+ +
+
+
+
Koleksi

Karya yang tersedia

+ Lihat semua +
+
+ {learningResources.map((resource) => {resource.topic} · {resource.year}

{resource.title}

)} +
+
+
+
diff --git a/src/pages/index.astro b/src/pages/index.astro index 2c090b6..a1225d5 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -168,4 +168,15 @@ const heroPreload = await getImage({ + +
+
+
+
Ruang Belajar// karya Onno W. Purbo
+

Baca pengetahuan teknologi terbuka.

+

Koleksi awal karya Onno W. Purbo untuk dibaca langsung dan diunduh dari sumbernya.

+
+ Buka koleksi +
+