diff --git a/public/blog-assets/2026/06/memperkenalkan-blog-indopensource.jpg b/public/blog-assets/2026/06/memperkenalkan-blog-indopensource.jpg new file mode 100644 index 0000000..31a8f7e Binary files /dev/null and b/public/blog-assets/2026/06/memperkenalkan-blog-indopensource.jpg differ diff --git a/public/blog-assets/2026/07/it-camp-2026.jpg b/public/blog-assets/2026/07/it-camp-2026.jpg new file mode 100644 index 0000000..a66f739 Binary files /dev/null and b/public/blog-assets/2026/07/it-camp-2026.jpg differ diff --git a/public/blog-assets/2026/07/model-ekonomi-pusat-yayasan-it.jpg b/public/blog-assets/2026/07/model-ekonomi-pusat-yayasan-it.jpg new file mode 100644 index 0000000..e7d99d2 Binary files /dev/null and b/public/blog-assets/2026/07/model-ekonomi-pusat-yayasan-it.jpg differ diff --git a/public/blog-assets/2026/07/onno-w-purbo.png b/public/blog-assets/2026/07/onno-w-purbo.png new file mode 100644 index 0000000..17a83f3 Binary files /dev/null and b/public/blog-assets/2026/07/onno-w-purbo.png differ diff --git a/public/blog-assets/2026/07/openclaw-jakarta-meetup-5-body.jpg b/public/blog-assets/2026/07/openclaw-jakarta-meetup-5-body.jpg new file mode 100644 index 0000000..84d10b9 Binary files /dev/null and b/public/blog-assets/2026/07/openclaw-jakarta-meetup-5-body.jpg differ diff --git a/public/blog-assets/2026/07/openclaw-jakarta-meetup-5-og.jpg b/public/blog-assets/2026/07/openclaw-jakarta-meetup-5-og.jpg new file mode 100644 index 0000000..435eb5b Binary files /dev/null and b/public/blog-assets/2026/07/openclaw-jakarta-meetup-5-og.jpg differ diff --git a/public/blog-assets/2026/07/wajanbolic-onno-w-purbo.png b/public/blog-assets/2026/07/wajanbolic-onno-w-purbo.png new file mode 100644 index 0000000..b1a808f Binary files /dev/null and b/public/blog-assets/2026/07/wajanbolic-onno-w-purbo.png differ diff --git a/scripts/sync-blog-posts.mjs b/scripts/sync-blog-posts.mjs index a01d6d4..239463f 100644 --- a/scripts/sync-blog-posts.mjs +++ b/scripts/sync-blog-posts.mjs @@ -2,6 +2,7 @@ import { mkdir, writeFile } from 'node:fs/promises'; const BLOG_REPO = 'IndopenSource/Blog-IndopenSource'; const OUT_FILE = new URL('../src/data/blog-posts.json', import.meta.url); +const BLOG_ASSET_DIR = new URL('../public/blog-assets/', import.meta.url); const token = process.env.GITHUB_TOKEN || process.env.GH_TOKEN; async function requestJson(url) { @@ -156,6 +157,38 @@ function resolveThumbnail(value, articlePath, branch) { return new URL(value, `https://raw.githubusercontent.com/${BLOG_REPO}/${branch}/${articleDirectory}/`).toString(); } +async function mirrorBlogAsset(value, articlePath, branch) { + const resolved = resolveThumbnail(value, articlePath, branch); + if (!resolved.startsWith(`https://raw.githubusercontent.com/${BLOG_REPO}/`)) return resolved; + + const assetName = new URL(resolved).pathname.split('/').pop()?.replace(/[^A-Za-z0-9._-]/g, ''); + if (!assetName) return resolved; + + const [year, month] = articlePath.split('/').slice(1, 3); + const assetDirectory = new URL(`${year}/${month}/`, BLOG_ASSET_DIR); + const response = await fetch(resolved); + if (!response.ok) { + console.warn(`Could not mirror blog asset ${resolved}: HTTP ${response.status}`); + return resolved; + } + + await mkdir(assetDirectory, { recursive: true }); + await writeFile(new URL(assetName, assetDirectory), Buffer.from(await response.arrayBuffer())); + return `/blog-assets/${year}/${month}/${assetName}`; +} + +async function mirrorContentAssets(content, articlePath, branch) { + const rawAssetUrls = [...new Set( + content.match(/https:\/\/raw\.githubusercontent\.com\/IndopenSource\/Blog-IndopenSource\/[^\s"'<>)]*/g) || [] + )]; + + for (const url of rawAssetUrls) { + content = content.replaceAll(url, await mirrorBlogAsset(url, articlePath, branch)); + } + + return content; +} + async function getCommitMeta(path) { const commits = await requestJson(`https://api.github.com/repos/${BLOG_REPO}/commits?path=${encodeURIComponent(path)}&per_page=100`); const firstCommit = commits.at(-1); @@ -269,6 +302,8 @@ for (const path of articleFiles) { ) ] : commitMeta.authors.length ? commitMeta.authors : [resolvedAuthor.author]; + const thumbnail = await mirrorBlogAsset(data.thumbnail || data.image || data.cover || '', path, defaultBranch); + const mirroredContent = await mirrorContentAssets(content, path, defaultBranch); posts.push({ slug: slugFromPath(path), @@ -282,8 +317,11 @@ for (const path of articleFiles) { status: data.status || 'draft', lang: data.lang === 'en' ? 'en' : 'id', translationKey: data.translationKey || '', - thumbnail: resolveThumbnail(data.thumbnail || data.image || data.cover || '', path, defaultBranch), - content, + thumbnail, + thumbnailWidth: Number(data.thumbnailWidth) || 0, + thumbnailHeight: Number(data.thumbnailHeight) || 0, + thumbnailType: data.thumbnailType || '', + content: mirroredContent, sourceUrl: file.html_url, // The visible "release" date is the editorial frontmatter `date` (the date // the author intended), falling back to the first commit only when absent. diff --git a/src/components/BlogArticlePage.astro b/src/components/BlogArticlePage.astro index 2537e4f..a22a763 100644 --- a/src/components/BlogArticlePage.astro +++ b/src/components/BlogArticlePage.astro @@ -32,6 +32,8 @@ const releaseDate = post.releasedAt : ''; const thumbnail = post.thumbnail || '/brand/indopensource-hero.jpg'; const thumbnailUrl = /^https?:\/\//.test(thumbnail) ? thumbnail : withBase(thumbnail); +const thumbnailWidth = post.thumbnailWidth || 1280; +const thumbnailHeight = post.thumbnailHeight || 720; const heroAlt = english ? `Article thumbnail: ${post.title}` : `Thumbnail artikel: ${post.title}`; const authorByline = post.authorFromFrontmatter ? english @@ -65,6 +67,9 @@ const jsonLd = { title={seoTitle} description={post.description} image={thumbnailUrl} + imageWidth={post.thumbnailWidth} + imageHeight={post.thumbnailHeight} + imageType={post.thumbnailType} type="article" robots={published ? undefined : 'noindex, nofollow, noarchive'} publishedAt={published ? post.releasedAt : undefined} @@ -99,7 +104,7 @@ const jsonLd = { ))}
- {heroAlt} + {heroAlt}
diff --git a/src/data/blog-posts.json b/src/data/blog-posts.json index ff4f86c..1ae87dc 100644 --- a/src/data/blog-posts.json +++ b/src/data/blog-posts.json @@ -16,13 +16,16 @@ "status": "published", "lang": "id", "translationKey": "openclaw-jakarta-meetup-5", - "thumbnail": "https://raw.githubusercontent.com/IndopenSource/Blog-IndopenSource/main/content/2026/07/assets/openclaw-jakarta-meetup-5-thumbnail.png", - "content": "OpenClaw Jakarta Meetup #5 berlangsung di Jakarta Selatan pada Kamis, 23 Juli 2026. Dengan dukungan DANA Indonesia sebagai penyedia tempat dan konsumsi, acara ini mempertemukan developer, engineer, serta pengguna OpenClaw dan *agentic AI* untuk melihat penerapan agen AI dalam kasus nyata.\n\nPara pembicara membawa pengalaman membangun produk: dari browser untuk agen AI, pencarian properti, sampai sistem penasihat keuangan. Namun, benang merah terkuat malam itu datang dari Hannes Rudolph, Community Manager OpenClaw: membangun agen yang dapat bekerja bukan berarti menyerahkan seluruh proses kepada AI.\n\n## AI untuk Pekerjaan yang Memang Membutuhkannya\n\nVince Iswara, CEO DANA Indonesia, membuka acara dengan mengingatkan bahwa penggunaan AI membutuhkan tanggung jawab. Komputasi AI tidak murah, sehingga teknologi ini sebaiknya dipakai untuk persoalan yang memang membutuhkan kemampuan tersebut, bukan tugas sederhana yang dapat diselesaikan dengan cara lebih ringan.\n\nPesan itu juga terlihat dalam sesi Raden Muhammad Hadi, Senior Data Scientist DANA Indonesia, tentang *Financial Advisory Agent Stack*. Sistem ini menggunakan sejumlah subagen dengan peran berbeda, seperti menyusun rencana eksekusi, eksekusi task, memberi konteks literasi finansial, dan meninjau hasil melalui berbagai jenis model.\n\nHadi membandingkan beberapa model agar pemilihan model sesuai dengan tugasnya. Mereka juga memakai pendekatan statistik seperti TBATS untuk kebutuhan peramalan. Presentasi ini menunjukkan bahwa sistem agentic di sektor finansial tidak cukup hanya mengandalkan satu model dan satu instruksi.\n\n## Hannes Rudolph: Mulai dari Loop Kecil\n\nDalam sesinya melalui Zoom Meeting, Hannes yang merupakan Community Manager Open Claw membuka sesi terbuka tanya jawab kepada audiens yang hadir, Menurut Hannes, Pendekatan yang lebih masuk akal dalam agentic adalah memulai dari *loop* kecil, memberi agen proses perencanaan dan pemeriksaan, lalu mempelajari hasil serta kesalahannya.\n\nEvaluasi model menjadi bagian penting dari proses tersebut. Setiap perubahan model perlu dibandingkan melalui *benchmark* agar peningkatan pada satu sisi tidak diam-diam merusak kemampuan lain. Untuk pekerjaan yang dibuat dengan pendekatan *vibe coding*, developer tetap perlu memahami proses dan memeriksa kode baris demi baris.\n\nPesannya sederhana: fokus pada hal yang ingin diselesaikan, bangun mekanisme pengecekan, dan jangan memperluas otomatisasi sebelum hasil pada lingkup kecil cukup baik.\n\n
\n \"Peserta\n
\n\n## Tiga Gambaran Agen AI di Dunia Nyata\n\nZen Aufa Bahalwan memperkenalkan Camoufox untuk menghadapi kendala browser seperti CAPTCHA, respons *forbidden*, dan sistem deteksi bot. Camoufox memberi agen kemampuan menjelajah web dengan pendekatan *anti-detect*. Penggunaannya tetap perlu ditempatkan dalam batas yang sah dan bertanggung jawab.\n\nOkza Pradhana, dari komunitas Data Engineering Indonesia, membawa PropGen, sebuah orkestrasi agen untuk membantu pekerjaan pencarian properti. Demo ini menggambarkan bagaimana agen dapat dipekerjakan untuk mengumpulkan dan mengolah informasi yang biasanya tersebar di banyak sumber.\n\nSementara itu, sistem penasihat keuangan personal yang dibuat Hadi menunjukkan kebutuhan yang berbeda: basis pengetahuan yang kuat, pemilihan model berdasarkan kemampuan, dan lapisan peninjauan sebelum hasil sampai kepada pengguna.\n\nKetiga sesi tersebut memperlihatkan bahwa nilai agen AI tidak terletak pada banyaknya model atau panjangnya *workflow*. Nilainya muncul ketika sistem mampu menyelesaikan pekerjaan, dapat diperiksa, dan ditempatkan dalam batas tanggung jawab yang jelas.\n\nOpenClaw Jakarta Meetup #5 akhirnya menjadi ruang untuk membandingkan apa yang sudah dibangun, apa yang masih bermasalah, dan apa yang perlu diperbaiki bersama. Dukungan DANA dan kehadiran tim komunitas OpenClaw mempertemukan perspektif perusahaan dengan semangat eksperimen *open source* dalam satu ruangan.", + "thumbnail": "/blog-assets/2026/07/openclaw-jakarta-meetup-5-og.jpg", + "thumbnailWidth": 1200, + "thumbnailHeight": 630, + "thumbnailType": "image/jpeg", + "content": "OpenClaw Jakarta Meetup #5 berlangsung di Jakarta Selatan pada Kamis, 23 Juli 2026. Dengan dukungan DANA Indonesia sebagai penyedia tempat dan konsumsi, acara ini mempertemukan developer, engineer, serta pengguna OpenClaw dan *agentic AI* untuk melihat penerapan agen AI dalam kasus nyata.\n\nPara pembicara membawa pengalaman membangun produk: dari browser untuk agen AI, pencarian properti, sampai sistem penasihat keuangan. Namun, benang merah terkuat malam itu datang dari Hannes Rudolph, Community Manager OpenClaw: membangun agen yang dapat bekerja bukan berarti menyerahkan seluruh proses kepada AI.\n\n## AI untuk Pekerjaan yang Memang Membutuhkannya\n\nVince Iswara, CEO DANA Indonesia, membuka acara dengan mengingatkan bahwa penggunaan AI membutuhkan tanggung jawab. Komputasi AI tidak murah, sehingga teknologi ini sebaiknya dipakai untuk persoalan yang memang membutuhkan kemampuan tersebut, bukan tugas sederhana yang dapat diselesaikan dengan cara lebih ringan.\n\nPesan itu juga terlihat dalam sesi Raden Muhammad Hadi, Senior Data Scientist DANA Indonesia, tentang *Financial Advisory Agent Stack*. Sistem ini menggunakan sejumlah subagen dengan peran berbeda, seperti menyusun rencana eksekusi, eksekusi task, memberi konteks literasi finansial, dan meninjau hasil melalui berbagai jenis model.\n\nHadi membandingkan beberapa model agar pemilihan model sesuai dengan tugasnya. Mereka juga memakai pendekatan statistik seperti TBATS untuk kebutuhan peramalan. Presentasi ini menunjukkan bahwa sistem agentic di sektor finansial tidak cukup hanya mengandalkan satu model dan satu instruksi.\n\n## Hannes Rudolph: Mulai dari Loop Kecil\n\nDalam sesinya melalui Zoom Meeting, Hannes yang merupakan Community Manager Open Claw membuka sesi terbuka tanya jawab kepada audiens yang hadir, Menurut Hannes, Pendekatan yang lebih masuk akal dalam agentic adalah memulai dari *loop* kecil, memberi agen proses perencanaan dan pemeriksaan, lalu mempelajari hasil serta kesalahannya.\n\nEvaluasi model menjadi bagian penting dari proses tersebut. Setiap perubahan model perlu dibandingkan melalui *benchmark* agar peningkatan pada satu sisi tidak diam-diam merusak kemampuan lain. Untuk pekerjaan yang dibuat dengan pendekatan *vibe coding*, developer tetap perlu memahami proses dan memeriksa kode baris demi baris.\n\nPesannya sederhana: fokus pada hal yang ingin diselesaikan, bangun mekanisme pengecekan, dan jangan memperluas otomatisasi sebelum hasil pada lingkup kecil cukup baik.\n\n
\n \"Peserta\n
\n\n## Tiga Gambaran Agen AI di Dunia Nyata\n\nZen Aufa Bahalwan memperkenalkan Camoufox untuk menghadapi kendala browser seperti CAPTCHA, respons *forbidden*, dan sistem deteksi bot. Camoufox memberi agen kemampuan menjelajah web dengan pendekatan *anti-detect*. Penggunaannya tetap perlu ditempatkan dalam batas yang sah dan bertanggung jawab.\n\nOkza Pradhana, dari komunitas Data Engineering Indonesia, membawa PropGen, sebuah orkestrasi agen untuk membantu pekerjaan pencarian properti. Demo ini menggambarkan bagaimana agen dapat dipekerjakan untuk mengumpulkan dan mengolah informasi yang biasanya tersebar di banyak sumber.\n\nSementara itu, sistem penasihat keuangan personal yang dibuat Hadi menunjukkan kebutuhan yang berbeda: basis pengetahuan yang kuat, pemilihan model berdasarkan kemampuan, dan lapisan peninjauan sebelum hasil sampai kepada pengguna.\n\nKetiga sesi tersebut memperlihatkan bahwa nilai agen AI tidak terletak pada banyaknya model atau panjangnya *workflow*. Nilainya muncul ketika sistem mampu menyelesaikan pekerjaan, dapat diperiksa, dan ditempatkan dalam batas tanggung jawab yang jelas.\n\nOpenClaw Jakarta Meetup #5 akhirnya menjadi ruang untuk membandingkan apa yang sudah dibangun, apa yang masih bermasalah, dan apa yang perlu diperbaiki bersama. Dukungan DANA dan kehadiran tim komunitas OpenClaw mempertemukan perspektif perusahaan dengan semangat eksperimen *open source* dalam satu ruangan.", "sourceUrl": "https://github.com/IndopenSource/Blog-IndopenSource/blob/main/content/2026/07/openclaw-jakarta-meetup-5-dari-demo-ke-agen-ai-dunia-nyata.md", "releasedAt": "2026-07-23", - "lastModifiedAt": "2026-07-23T17:03:35Z", - "latestCommitSha": "d79b9ed94661b9995996c56e4f17c785915fc425", - "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/d79b9ed94661b9995996c56e4f17c785915fc425", + "lastModifiedAt": "2026-07-23T17:35:58Z", + "latestCommitSha": "6bb5b1724d6db7a4986c6fe0671db9db1ee9468b", + "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/6bb5b1724d6db7a4986c6fe0671db9db1ee9468b", "author": { "name": "wauputr4", "avatarUrl": "https://avatars.githubusercontent.com/u/103489788?v=4", @@ -56,13 +59,16 @@ "status": "published", "lang": "en", "translationKey": "openclaw-jakarta-meetup-5", - "thumbnail": "https://raw.githubusercontent.com/IndopenSource/Blog-IndopenSource/main/content/2026/07/assets/openclaw-jakarta-meetup-5-thumbnail.png", - "content": "OpenClaw Jakarta Meetup #5 took place in South Jakarta on Thursday, July 23, 2026. Supported by DANA Indonesia, which provided the venue and refreshments, the event brought together developers, engineers, and users of OpenClaw and *agentic AI* to explore how AI agents are being applied to real-world problems.\n\nThe speakers shared first-hand experience building products, from browsers for AI agents and property search to financial advisory systems. The strongest thread of the evening, however, came from Hannes Rudolph, OpenClaw Community Manager: building an agent that can perform useful work does not mean handing the entire process over to AI.\n\n## Use AI Where It Is Actually Needed\n\nVince Iswara, CEO of DANA Indonesia, opened the event with a reminder that AI must be used responsibly. AI compute is not cheap, so it should be reserved for problems that genuinely benefit from it rather than simple tasks that can be solved more efficiently.\n\nThat message also appeared in a session by Raden Muhammad Hadi, Senior Data Scientist at DANA Indonesia, on a *Financial Advisory Agent Stack*. The system uses several subagents with distinct responsibilities, including planning the execution, carrying out tasks, providing financial literacy context, and reviewing results with different model types.\n\nHadi compared several models to match each task with the right capability. The system also uses statistical methods such as TBATS for forecasting. The presentation demonstrated why an agentic system in finance cannot rely on a single model and a single instruction.\n\n## Hannes Rudolph: Start with Small Loops\n\nJoining through Zoom, Hannes opened his session to questions from the audience. He argued that a more practical approach to agentic systems is to start with small loops, give the agent planning and checking steps, and then study its results and mistakes.\n\nModel evaluation is an important part of that process. Each model change should be benchmarked so that an improvement in one area does not quietly damage another capability. Even when using a *vibe coding* approach, developers still need to understand the process and inspect the code line by line.\n\nHis message was straightforward: focus on the outcome, build checks into the process, and do not expand the automation before it performs well within a smaller scope.\n\n
\n \"Attendees\n
\n\n## Three Real-World Views of AI Agents\n\nZen Aufa Bahalwan introduced Camoufox as a way to handle browser obstacles such as CAPTCHAs, *forbidden* responses, and bot-detection systems. Camoufox gives agents an *anti-detect* browsing capability. Its use still needs to remain within lawful and responsible boundaries.\n\nOkza Pradhana, from the Data Engineering Indonesia community, presented PropGen, an agent orchestration system for property search. The demo showed how an agent can collect and process information that would otherwise be spread across many sources.\n\nHadi's personal financial advisory system illustrated a different set of requirements: a strong knowledge base, model selection based on capability, and a review layer before results reach the user.\n\nThe three sessions showed that the value of an AI agent is not measured by the number of models it uses or the length of its *workflow*. Its value appears when the system can complete real work, be inspected, and operate within clear boundaries of responsibility.\n\nOpenClaw Jakarta Meetup #5 ultimately became a place to compare what has been built, what remains difficult, and what the community can improve together. DANA's support and the presence of the OpenClaw community brought an enterprise perspective and the experimental spirit of *open source* into the same room.", + "thumbnail": "/blog-assets/2026/07/openclaw-jakarta-meetup-5-og.jpg", + "thumbnailWidth": 1200, + "thumbnailHeight": 630, + "thumbnailType": "image/jpeg", + "content": "OpenClaw Jakarta Meetup #5 took place in South Jakarta on Thursday, July 23, 2026. Supported by DANA Indonesia, which provided the venue and refreshments, the event brought together developers, engineers, and users of OpenClaw and *agentic AI* to explore how AI agents are being applied to real-world problems.\n\nThe speakers shared first-hand experience building products, from browsers for AI agents and property search to financial advisory systems. The strongest thread of the evening, however, came from Hannes Rudolph, OpenClaw Community Manager: building an agent that can perform useful work does not mean handing the entire process over to AI.\n\n## Use AI Where It Is Actually Needed\n\nVince Iswara, CEO of DANA Indonesia, opened the event with a reminder that AI must be used responsibly. AI compute is not cheap, so it should be reserved for problems that genuinely benefit from it rather than simple tasks that can be solved more efficiently.\n\nThat message also appeared in a session by Raden Muhammad Hadi, Senior Data Scientist at DANA Indonesia, on a *Financial Advisory Agent Stack*. The system uses several subagents with distinct responsibilities, including planning the execution, carrying out tasks, providing financial literacy context, and reviewing results with different model types.\n\nHadi compared several models to match each task with the right capability. The system also uses statistical methods such as TBATS for forecasting. The presentation demonstrated why an agentic system in finance cannot rely on a single model and a single instruction.\n\n## Hannes Rudolph: Start with Small Loops\n\nJoining through Zoom, Hannes opened his session to questions from the audience. He argued that a more practical approach to agentic systems is to start with small loops, give the agent planning and checking steps, and then study its results and mistakes.\n\nModel evaluation is an important part of that process. Each model change should be benchmarked so that an improvement in one area does not quietly damage another capability. Even when using a *vibe coding* approach, developers still need to understand the process and inspect the code line by line.\n\nHis message was straightforward: focus on the outcome, build checks into the process, and do not expand the automation before it performs well within a smaller scope.\n\n
\n \"Attendees\n
\n\n## Three Real-World Views of AI Agents\n\nZen Aufa Bahalwan introduced Camoufox as a way to handle browser obstacles such as CAPTCHAs, *forbidden* responses, and bot-detection systems. Camoufox gives agents an *anti-detect* browsing capability. Its use still needs to remain within lawful and responsible boundaries.\n\nOkza Pradhana, from the Data Engineering Indonesia community, presented PropGen, an agent orchestration system for property search. The demo showed how an agent can collect and process information that would otherwise be spread across many sources.\n\nHadi's personal financial advisory system illustrated a different set of requirements: a strong knowledge base, model selection based on capability, and a review layer before results reach the user.\n\nThe three sessions showed that the value of an AI agent is not measured by the number of models it uses or the length of its *workflow*. Its value appears when the system can complete real work, be inspected, and operate within clear boundaries of responsibility.\n\nOpenClaw Jakarta Meetup #5 ultimately became a place to compare what has been built, what remains difficult, and what the community can improve together. DANA's support and the presence of the OpenClaw community brought an enterprise perspective and the experimental spirit of *open source* into the same room.", "sourceUrl": "https://github.com/IndopenSource/Blog-IndopenSource/blob/main/content/2026/07/openclaw-jakarta-meetup-5-from-demos-to-real-world-ai-agents.md", "releasedAt": "2026-07-23", - "lastModifiedAt": "2026-07-23T17:03:35Z", - "latestCommitSha": "d79b9ed94661b9995996c56e4f17c785915fc425", - "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/d79b9ed94661b9995996c56e4f17c785915fc425", + "lastModifiedAt": "2026-07-23T17:35:58Z", + "latestCommitSha": "6bb5b1724d6db7a4986c6fe0671db9db1ee9468b", + "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/6bb5b1724d6db7a4986c6fe0671db9db1ee9468b", "author": { "name": "wauputr4", "avatarUrl": "https://avatars.githubusercontent.com/u/103489788?v=4", @@ -96,13 +102,16 @@ "status": "draft", "lang": "id", "translationKey": "", - "thumbnail": "https://raw.githubusercontent.com/IndopenSource/Blog-IndopenSource/main/content/2026/07/assets/onno-w-purbo.png", - "content": "Thumbnail artikel ini telah disesuaikan ukurannya dengan bantuan AI.\n\nJika kita berbicara tentang perkembangan dunia Teknologi Informasi (TI) dan internet di Indonesia, rasanya mustahil untuk tidak menyebut nama Prof. Dr. Eng. Ir. Onno Widodo Purbo, M.Eng., Ph.D. Sosok pria kelahiran Bandung, 17 Agustus 1962 ini dikenal luas sebagai \"Bapak Internet Indonesia\" sekaligus pejuang tangguh gerakan *Open Source* di Tanah Air. Di balik penampilannya yang ceplas-ceplos dan sangat sederhana kerap hanya mengenakan kaos, celana pendek, dan hobi bepergian dengan sepeda tersimpan visi besar yang telah mendobrak batasan akses informasi bagi jutaan rakyat Indonesia.\n\nArtikel ini akan mengupas tuntas perjalanan hidup, pemikiran, kiprah, serta deretan karya Onno W. Purbo yang menjadikannya salah satu tokoh teknologi paling dihormati, tidak hanya di Indonesia, tetapi juga di mata dunia.\n\n## Titik Awal: Ketertarikan pada Lampu Kelap-Kelip dan Pesawat Terbang\n\nLahir dari pasangan Prof. Ir. Hasan Poerbo, seorang guru besar arsitektur dan lingkungan hidup di Institut Teknologi Bandung (ITB), dan Partini, Onno tumbuh di lingkungan yang kental dengan nilai-nilai intelektual dan keberpihakan pada rakyat kecil. Ketertarikannya pada dunia teknik sudah terlihat sejak ia duduk di bangku kelas 3 SMP. Saat itu, ia membuat sebuah prakarya lampu *flip-flop* (lampu yang menyala kelap-kelip secara bergantian) dan menghabiskan semalaman penuh hanya untuk menatap dan memikirkan bagaimana lampu tersebut bisa bekerja sedemikian rupa.\n\nMemasuki masa SMA, minat Onno semakin bercabang. Terinspirasi dari ayahnya yang pernah berkarier di TNI dan tren B.J. Habibie pada masa itu, Onno sempat mendalami *aeromodeling* dengan membuat pesawat layang (*glider*) sepanjang 1,5 meter hasil rancangannya sendiri. Namun, pada saat yang bersamaan, ia juga keranjingan mendengarkan siaran radio gelombang pendek (SW) dan belajar membuat pemancar radio sendiri dari tabung-tabung bekas.\n\nBerkat dorongan sang ayah yang melihat masa depan cerah di bidang elektronika, Onno akhirnya memilih masuk ke jurusan Teknik Elektro ITB pada tahun 1981. Di kampus inilah, Onno semakin aktif dalam Organisasi Amatir Radio Indonesia (ORARI) dan mulai bereksperimen menghubungkan komputer dengan pemancar radio, sebuah cikal bakal dari teknologi internet tanpa kabel yang kelak ia kembangkan. Ia lulus sebagai wisudawan terbaik pada tahun 1987.\n\n## Membangun Jaringan Internet dari Jarak Jauh\n\nSetelah lulus dari ITB, Onno mendapatkan beasiswa untuk melanjutkan studi S2 di McMaster University, Kanada, di bidang Semikonduktor Laser (lulus 1989), dan kemudian S3 di Universitas Waterloo, Kanada, di bidang Teknologi Rangkaian Terintegrasi untuk Satelit (lulus 1993).\n\nTinggal di luar negeri memunculkan satu masalah klasik: mahalnya biaya komunikasi ke Indonesia. Tidak kehabisan akal, Onno menggunakan jaringan Bitnet di kampus-kampus Amerika Utara dan mengombinasikannya dengan frekuensi radio amatir. Dengan meminta izin kepada pemerintah Kanada untuk memancar menggunakan lisensi amatir radionya, Onno berhasil mengirimkan data suara yang diubah menjadi teks (melalui *soundcard* komputer) melintasi samudra hingga diterima oleh rekan-rekannya sesama anggota ORARI di Indonesia. Ini adalah salah satu bentuk koneksi internet paling awal di Indonesia, yang membuktikan bahwa jaringan informasi tidak melulu harus bergantung pada kabel telepon yang sangat mahal.\n\n## RT/RW-Net, Wajanbolic, dan Pertempuran Melawan Regulasi\n\nKembali ke Indonesia, Onno mengajar sebagai dosen di ITB dan memelopori koneksi internet pertama di kampus tersebut. Namun, ia menyadari bahwa tarif internet *dial-up* melalui kabel telepon (seperti yang disediakan Telkom saat itu) sangatlah tidak masuk akal bagi rakyat biasa. Biaya pulsa telepon yang menyala 24 jam bisa mencapai jutaan rupiah per bulan dengan kecepatan yang sangat lambat.\n\nUntuk memecahkan masalah ini, Onno menginisiasi teknologi RT/RW-Net, yakni sebuah jaringan komputer swadaya masyarakat yang mendistribusikan koneksi internet murah di tingkat rukun tetangga. Untuk menangkap sinyal nirkabel (Wi-Fi), Onno mempopulerkan penemuan luar biasa yang sangat merakyat: **Wajanbolic**. Ini adalah antena penguat sinyal Wi-Fi frekuensi 2,4 GHz yang dirakit secara murah meriah menggunakan wajan penggorengan, pipa paralon, aluminium foil, dan USB WLAN adapter.\n\n![Onno W. Purbo memperlihatkan Wajanbolic](https://raw.githubusercontent.com/IndopenSource/Blog-IndopenSource/main/content/2026/07/assets/wajanbolic-onno-w-purbo.png)\n\n*Sumber gambar: Detik.net.id.*\n\nKarya-karya ini adalah bentuk perlawanan Onno terhadap \"buta internet\". Namun, jalan yang ditempuh tidak mulus. Penggunaan frekuensi radio 2,4 GHz pada saat itu dianggap ilegal tanpa izin resmi, sehingga alat-alat jaringan kampus dan masyarakat sering kali disita oleh aparat pemerintah (Kominfo). Alih-alih melawan dengan kekerasan, Onno mengubah strateginya: ia menulis buku dan menyebarkan panduan cara merakit internet murah ke seluruh penjuru negeri. Lewat gerakan \"pemberontakan\" damai dan desakan tanpa henti, pada tahun 2005 pemerintah akhirnya membebaskan frekuensi 2,4 GHz dari Biaya Hak Penggunaan, sebuah kemenangan besar bagi demokratisasi internet di Indonesia.\n\n## Meninggalkan Menara Gading demi Filosofi \"Copyleft\"\n\nSalah satu kisah paling monumental dalam hidup Onno terjadi pada Februari 2000. Saat itu, ITB mengadakan seminar mengenai Hak Cipta dan Hak Paten yang diisi oleh para profesor. Mendengar paparan bahwa hasil penelitian harus dipatenkan demi keuntungan finansial dan prestise, nurani Onno memberontak.\n\nDalam pandangannya, ilmu pengetahuan seharusnya dibagikan secara gratis agar seluruh bangsa bisa merasakan manfaatnya. Mematenkan ilmu hanya akan memperlebar jurang kebodohan di Indonesia. Terusik oleh pemikiran tersebut, Onno tidak bisa tidur selama tiga hari dua malam. Pada hari ketiga, ia mengambil keputusan paling nekat dalam hidupnya: ia menulis surat pengunduran diri sebagai Pegawai Negeri Sipil (PNS) dan dosen ITB. Ia bahkan mengembalikan gaji terakhirnya kepada rektorat.\n\nOnno memilih jalan hidup berdasarkan prinsip **\"Copyleft\"** (sumber terbuka/ *Open Source*), kebalikan dari *Copyright*. Ia meyakini bahwa Tuhan yang memiliki segala ilmu saja tidak pernah mematenkan ilmu-Nya, lalu mengapa manusia harus membatasinya?. Ia sering mengutip pesan dari mantan dosennya di ITB, Pak Soegiardjo Soegidjoko: *\"Kalkulator yang di ATAS tidak pernah salah hitung\"*. Kepercayaan bahwa rezeki tidak akan tertukar inilah yang membuatnya tak gentar hidup tanpa gaji tetap selama belasan tahun usai keluar dari ITB.\n\n## Kiprah Bapak Open Source Indonesia dan Karya-karyanya\n\nSetelah keluar dari jalur akademis formal, kiprah Onno W. Purbo di dunia *Open Source Software* (OSS) dan teknologi informasi semakin menggila. Berikut adalah berbagai sumbangsih nyatanya:\n\n- **Membuat Distro Linux Mandiri**: Onno terlibat dalam pembuatan berbagai distribusi (distro) Linux lokal yang disesuaikan untuk kebutuhan masyarakat, seperti Distro SchoolOnffLine, SMEOnffLine, ORARINux, dan SekolahNux.\n- **Penulis Buku Produktif**: Onno telah menulis lebih dari 50 judul buku. Karyanya mencakup panduan TCP/IP, keamanan jaringan, teknik RT/RW-Net, hingga pembuatan jaringan seluler 5G sendiri. Hebatnya, ia juga merilis buku-buku pelajaran Teknologi Informasi dan Komunikasi (TIK) untuk SMA/MA yang materinya sepenuhnya berbasis *Open Source Software* (seperti Linux dan OpenOffice), yang didistribusikan secara gratis sebagai Buku Sekolah Elektronik (BSE) oleh pemerintah.\n- **VoIP Rakyat & OpenBTS**: Selain internet, Onno juga merintis \"VoIP Rakyat\", sentral telepon gratis berbasis protokol internet (SIP) agar masyarakat bisa bertelepon tanpa biaya pulsa konvensional. Ia juga giat menyebarkan teknologi OpenBTS, sebuah *Base Transceiver Station* mini berbasis *open source* yang memungkinkan masyarakat di daerah terpencil membangun jaringan seluler GSM sendiri.\n- **E-Learning dan Open Course**: Hasrat Onno untuk mencerdaskan orang banyak (bukan hanya satu atau dua kelas) diwujudkan dengan membangun *E-Learning Rakyat*. Di platform ini, puluhan ribu siswa bisa belajar gratis. Saat ini, sebagai Rektor Institut Teknologi Tangerang Selatan (ITTS), ia memelopori sistem kuliah IT gratis yang bisa diakses siapa saja melalui `opencourse.itts.ac.id`, dengan memberikan e-sertifikat bagi mereka yang mendapatkan nilai di atas 90.\n- **Advokasi Keamanan Siber**: Onno kerap menjadi narasumber penting terkait keamanan data. Ia mengedukasi masyarakat dan pemerintah mengenai mitigasi kebocoran data, audit *Data Privacy* sesuai UU PDP, dan pemanfaatan sistem keamanan berbasis *Open Source* yang efisien.\n\n## Pengakuan Dunia: Jonathan B. Postel Service Award\n\nPerjuangan Onno W. Purbo yang konsisten memberdayakan masyarakat melalui internet murah mengundang decak kagum dunia internasional. Ia sering diundang menjadi pembicara kunci dalam forum-forum global, seperti *World Summit on the Information Society* (WSIS) di Swiss dan *Internet Engineering Task Force* (IETF), karena rekam jejak Indonesia yang secara swadaya membangun lebih dari 60.000 titik RT/RW-Net yang digerakkan oleh rakyat biasa.\n\nPuncaknya, pada 11 November 2020, Internet Society (ISOC) memberikan penghargaan prestisius **Jonathan B. Postel Service Award** kepada Onno. Penghargaan yang setara dengan \"Hadiah Nobel\" di dunia internet ini diberikan khusus untuk para inovator visioner yang berdedikasi memperluas akses internet di seluruh dunia. Onno terpilih karena peran kuncinya dalam demokratisasi akses internet dan kepeloporannya memanfaatkan teknologi berbiaya rendah di pedesaan.\n\n## Penutup: Menjadi Manusia yang Bermanfaat\n\nKetika banyak orang mendesak agar dirinya diangkat menjadi Menteri Komunikasi dan Informatika, Onno selalu menjawab dengan halus dan jenaka. Baginya, jabatan menteri yang hanya berumur lima tahun bukanlah sebuah tolok ukur kesuksesan.\n\nTujuan hidup Onno W. Purbo sangatlah sederhana dan filosofis: ia ingin menjadi manusia yang bermanfaat bagi orang lain. Menurut kutipannya yang diambil dari hadist Rasulullah SAWW, *\"Sebaik-baik manusia adalah yang bermanfaat bagi manusia lainnya\"* kutipan itu yang menjadi prinsip bagi Prof Onno. Melalui buku-buku yang digratiskannya, video-video *tutorial* di YouTube, ribuan artikel, dan jaringan-jaringan komunitas *Open Source* yang ia rintis, Onno telah menunaikan tujuannya. Ia membuktikan bahwa kedaulatan digital dan kemajuan sebuah bangsa tidak harus selalu dimotori oleh pemerintah atau konglomerat, melainkan bisa dibangun dari bawahdari tangan-tangan rakyat biasa yang mau belajar dan berbagi.\n\n## Referensi\n\n### Artikel Berita dan Biografi (Web)\n\n- **Biografiku.com**: \"Biografi Onno W Purbo\" - [https://www.biografiku.com/biografi-onno-w-purbo/](https://www.biografiku.com/biografi-onno-w-purbo/).\n- **Wikipedia bahasa Indonesia**: \"Onno W. Purbo\" - [https://id.wikipedia.org/wiki/Onno_W._Purbo](https://id.wikipedia.org/wiki/Onno_W._Purbo).\n- **CNN Indonesia**: \"Onno, Wajan, dan Kisah 'Perang' Melawan Buta Internet RI\" - [https://www.cnnindonesia.com/teknologi/20221202161533-192-882019/onno-wajan-dan-kisah-perang-melawan-buta-internet-ri](https://www.cnnindonesia.com/teknologi/20221202161533-192-882019/onno-wajan-dan-kisah-perang-melawan-buta-internet-ri).\n- **Liputan6.com**: \"Onno W. Purbo, Pejuang IT Indonesia yang Hobi Bersepeda\" - [http://www.liputan6.com/tekno/read/667563/onno-w-purbo-pejuang-it-indonesia-yang-hobi-bersepeda](http://www.liputan6.com/tekno/read/667563/onno-w-purbo-pejuang-it-indonesia-yang-hobi-bersepeda).\n- **detikInet**: \"Bangga! Onno W Purbo Dapat Penghargaan Dunia Bidang Internet\" - [https://inet.detik.com/cyberlife/d-5260444/bangga-onno-w-purbo-dapat-penghargaan-dunia-bidang-internet](https://inet.detik.com/cyberlife/d-5260444/bangga-onno-w-purbo-dapat-penghargaan-dunia-bidang-internet).\n- **Kumparan**: \"Onno W. Purbo Raih Penghargaan Internet Dunia Jonathan B. Postel Service Award\" - [Tautan Kumparan](https://kumparan.com/kumparantech/response/onno-w-purbo-raih-penghargaan-internet-dunia-jonathan-b-postel-service-award-1uZYLtCUsPq).\n- **OnnoWiki**: \"Onno W. Purbo\" - [http://www.onnocenter.or.id/wiki/index.php/Onno_W._Purbo](http://www.onnocenter.or.id/wiki/index.php/Onno_W._Purbo).\n- **eLearning Rakyat**: Portal kursus online gratis yang dibangun oleh Onno W. Purbo - [https://lms.onnocenter.or.id/moodle/](https://lms.onnocenter.or.id/moodle/).\n- Dokumen / Buku TIK berbasis *Open Source* yang ditulis Onno W. Purbo, seperti Buku Sekolah Elektronik (BSE) dan pedoman keamanan siber.\n- Video \"ONNO W PURBO dan SEJARAH INTERNET INDONESIA\" & \"Sisi Lain ONNO W PURBO: Jadi Rektor ITTS!\" di kanal **GIZMOLOGI**.\n- Video \"Bincang Bareng Onno W. Purbo Seputar Dunia IT di Indonesia\" di kanal **Indonesia Belajar**.\n- Video \"Onno W Purbo Tadinya Berpikir Ikuti Jejak BJ Habibie\" di kanal **voidotid**.", + "thumbnail": "/blog-assets/2026/07/onno-w-purbo.png", + "thumbnailWidth": 1338, + "thumbnailHeight": 748, + "thumbnailType": "image/png", + "content": "Thumbnail artikel ini telah disesuaikan ukurannya dengan bantuan AI.\n\nJika kita berbicara tentang perkembangan dunia Teknologi Informasi (TI) dan internet di Indonesia, rasanya mustahil untuk tidak menyebut nama Prof. Dr. Eng. Ir. Onno Widodo Purbo, M.Eng., Ph.D. Sosok pria kelahiran Bandung, 17 Agustus 1962 ini dikenal luas sebagai \"Bapak Internet Indonesia\" sekaligus pejuang tangguh gerakan *Open Source* di Tanah Air. Di balik penampilannya yang ceplas-ceplos dan sangat sederhana kerap hanya mengenakan kaos, celana pendek, dan hobi bepergian dengan sepeda tersimpan visi besar yang telah mendobrak batasan akses informasi bagi jutaan rakyat Indonesia.\n\nArtikel ini akan mengupas tuntas perjalanan hidup, pemikiran, kiprah, serta deretan karya Onno W. Purbo yang menjadikannya salah satu tokoh teknologi paling dihormati, tidak hanya di Indonesia, tetapi juga di mata dunia.\n\n## Titik Awal: Ketertarikan pada Lampu Kelap-Kelip dan Pesawat Terbang\n\nLahir dari pasangan Prof. Ir. Hasan Poerbo, seorang guru besar arsitektur dan lingkungan hidup di Institut Teknologi Bandung (ITB), dan Partini, Onno tumbuh di lingkungan yang kental dengan nilai-nilai intelektual dan keberpihakan pada rakyat kecil. Ketertarikannya pada dunia teknik sudah terlihat sejak ia duduk di bangku kelas 3 SMP. Saat itu, ia membuat sebuah prakarya lampu *flip-flop* (lampu yang menyala kelap-kelip secara bergantian) dan menghabiskan semalaman penuh hanya untuk menatap dan memikirkan bagaimana lampu tersebut bisa bekerja sedemikian rupa.\n\nMemasuki masa SMA, minat Onno semakin bercabang. Terinspirasi dari ayahnya yang pernah berkarier di TNI dan tren B.J. Habibie pada masa itu, Onno sempat mendalami *aeromodeling* dengan membuat pesawat layang (*glider*) sepanjang 1,5 meter hasil rancangannya sendiri. Namun, pada saat yang bersamaan, ia juga keranjingan mendengarkan siaran radio gelombang pendek (SW) dan belajar membuat pemancar radio sendiri dari tabung-tabung bekas.\n\nBerkat dorongan sang ayah yang melihat masa depan cerah di bidang elektronika, Onno akhirnya memilih masuk ke jurusan Teknik Elektro ITB pada tahun 1981. Di kampus inilah, Onno semakin aktif dalam Organisasi Amatir Radio Indonesia (ORARI) dan mulai bereksperimen menghubungkan komputer dengan pemancar radio, sebuah cikal bakal dari teknologi internet tanpa kabel yang kelak ia kembangkan. Ia lulus sebagai wisudawan terbaik pada tahun 1987.\n\n## Membangun Jaringan Internet dari Jarak Jauh\n\nSetelah lulus dari ITB, Onno mendapatkan beasiswa untuk melanjutkan studi S2 di McMaster University, Kanada, di bidang Semikonduktor Laser (lulus 1989), dan kemudian S3 di Universitas Waterloo, Kanada, di bidang Teknologi Rangkaian Terintegrasi untuk Satelit (lulus 1993).\n\nTinggal di luar negeri memunculkan satu masalah klasik: mahalnya biaya komunikasi ke Indonesia. Tidak kehabisan akal, Onno menggunakan jaringan Bitnet di kampus-kampus Amerika Utara dan mengombinasikannya dengan frekuensi radio amatir. Dengan meminta izin kepada pemerintah Kanada untuk memancar menggunakan lisensi amatir radionya, Onno berhasil mengirimkan data suara yang diubah menjadi teks (melalui *soundcard* komputer) melintasi samudra hingga diterima oleh rekan-rekannya sesama anggota ORARI di Indonesia. Ini adalah salah satu bentuk koneksi internet paling awal di Indonesia, yang membuktikan bahwa jaringan informasi tidak melulu harus bergantung pada kabel telepon yang sangat mahal.\n\n## RT/RW-Net, Wajanbolic, dan Pertempuran Melawan Regulasi\n\nKembali ke Indonesia, Onno mengajar sebagai dosen di ITB dan memelopori koneksi internet pertama di kampus tersebut. Namun, ia menyadari bahwa tarif internet *dial-up* melalui kabel telepon (seperti yang disediakan Telkom saat itu) sangatlah tidak masuk akal bagi rakyat biasa. Biaya pulsa telepon yang menyala 24 jam bisa mencapai jutaan rupiah per bulan dengan kecepatan yang sangat lambat.\n\nUntuk memecahkan masalah ini, Onno menginisiasi teknologi RT/RW-Net, yakni sebuah jaringan komputer swadaya masyarakat yang mendistribusikan koneksi internet murah di tingkat rukun tetangga. Untuk menangkap sinyal nirkabel (Wi-Fi), Onno mempopulerkan penemuan luar biasa yang sangat merakyat: **Wajanbolic**. Ini adalah antena penguat sinyal Wi-Fi frekuensi 2,4 GHz yang dirakit secara murah meriah menggunakan wajan penggorengan, pipa paralon, aluminium foil, dan USB WLAN adapter.\n\n![Onno W. Purbo memperlihatkan Wajanbolic](/blog-assets/2026/07/wajanbolic-onno-w-purbo.png)\n\n*Sumber gambar: Detik.net.id.*\n\nKarya-karya ini adalah bentuk perlawanan Onno terhadap \"buta internet\". Namun, jalan yang ditempuh tidak mulus. Penggunaan frekuensi radio 2,4 GHz pada saat itu dianggap ilegal tanpa izin resmi, sehingga alat-alat jaringan kampus dan masyarakat sering kali disita oleh aparat pemerintah (Kominfo). Alih-alih melawan dengan kekerasan, Onno mengubah strateginya: ia menulis buku dan menyebarkan panduan cara merakit internet murah ke seluruh penjuru negeri. Lewat gerakan \"pemberontakan\" damai dan desakan tanpa henti, pada tahun 2005 pemerintah akhirnya membebaskan frekuensi 2,4 GHz dari Biaya Hak Penggunaan, sebuah kemenangan besar bagi demokratisasi internet di Indonesia.\n\n## Meninggalkan Menara Gading demi Filosofi \"Copyleft\"\n\nSalah satu kisah paling monumental dalam hidup Onno terjadi pada Februari 2000. Saat itu, ITB mengadakan seminar mengenai Hak Cipta dan Hak Paten yang diisi oleh para profesor. Mendengar paparan bahwa hasil penelitian harus dipatenkan demi keuntungan finansial dan prestise, nurani Onno memberontak.\n\nDalam pandangannya, ilmu pengetahuan seharusnya dibagikan secara gratis agar seluruh bangsa bisa merasakan manfaatnya. Mematenkan ilmu hanya akan memperlebar jurang kebodohan di Indonesia. Terusik oleh pemikiran tersebut, Onno tidak bisa tidur selama tiga hari dua malam. Pada hari ketiga, ia mengambil keputusan paling nekat dalam hidupnya: ia menulis surat pengunduran diri sebagai Pegawai Negeri Sipil (PNS) dan dosen ITB. Ia bahkan mengembalikan gaji terakhirnya kepada rektorat.\n\nOnno memilih jalan hidup berdasarkan prinsip **\"Copyleft\"** (sumber terbuka/ *Open Source*), kebalikan dari *Copyright*. Ia meyakini bahwa Tuhan yang memiliki segala ilmu saja tidak pernah mematenkan ilmu-Nya, lalu mengapa manusia harus membatasinya?. Ia sering mengutip pesan dari mantan dosennya di ITB, Pak Soegiardjo Soegidjoko: *\"Kalkulator yang di ATAS tidak pernah salah hitung\"*. Kepercayaan bahwa rezeki tidak akan tertukar inilah yang membuatnya tak gentar hidup tanpa gaji tetap selama belasan tahun usai keluar dari ITB.\n\n## Kiprah Bapak Open Source Indonesia dan Karya-karyanya\n\nSetelah keluar dari jalur akademis formal, kiprah Onno W. Purbo di dunia *Open Source Software* (OSS) dan teknologi informasi semakin menggila. Berikut adalah berbagai sumbangsih nyatanya:\n\n- **Membuat Distro Linux Mandiri**: Onno terlibat dalam pembuatan berbagai distribusi (distro) Linux lokal yang disesuaikan untuk kebutuhan masyarakat, seperti Distro SchoolOnffLine, SMEOnffLine, ORARINux, dan SekolahNux.\n- **Penulis Buku Produktif**: Onno telah menulis lebih dari 50 judul buku. Karyanya mencakup panduan TCP/IP, keamanan jaringan, teknik RT/RW-Net, hingga pembuatan jaringan seluler 5G sendiri. Hebatnya, ia juga merilis buku-buku pelajaran Teknologi Informasi dan Komunikasi (TIK) untuk SMA/MA yang materinya sepenuhnya berbasis *Open Source Software* (seperti Linux dan OpenOffice), yang didistribusikan secara gratis sebagai Buku Sekolah Elektronik (BSE) oleh pemerintah.\n- **VoIP Rakyat & OpenBTS**: Selain internet, Onno juga merintis \"VoIP Rakyat\", sentral telepon gratis berbasis protokol internet (SIP) agar masyarakat bisa bertelepon tanpa biaya pulsa konvensional. Ia juga giat menyebarkan teknologi OpenBTS, sebuah *Base Transceiver Station* mini berbasis *open source* yang memungkinkan masyarakat di daerah terpencil membangun jaringan seluler GSM sendiri.\n- **E-Learning dan Open Course**: Hasrat Onno untuk mencerdaskan orang banyak (bukan hanya satu atau dua kelas) diwujudkan dengan membangun *E-Learning Rakyat*. Di platform ini, puluhan ribu siswa bisa belajar gratis. Saat ini, sebagai Rektor Institut Teknologi Tangerang Selatan (ITTS), ia memelopori sistem kuliah IT gratis yang bisa diakses siapa saja melalui `opencourse.itts.ac.id`, dengan memberikan e-sertifikat bagi mereka yang mendapatkan nilai di atas 90.\n- **Advokasi Keamanan Siber**: Onno kerap menjadi narasumber penting terkait keamanan data. Ia mengedukasi masyarakat dan pemerintah mengenai mitigasi kebocoran data, audit *Data Privacy* sesuai UU PDP, dan pemanfaatan sistem keamanan berbasis *Open Source* yang efisien.\n\n## Pengakuan Dunia: Jonathan B. Postel Service Award\n\nPerjuangan Onno W. Purbo yang konsisten memberdayakan masyarakat melalui internet murah mengundang decak kagum dunia internasional. Ia sering diundang menjadi pembicara kunci dalam forum-forum global, seperti *World Summit on the Information Society* (WSIS) di Swiss dan *Internet Engineering Task Force* (IETF), karena rekam jejak Indonesia yang secara swadaya membangun lebih dari 60.000 titik RT/RW-Net yang digerakkan oleh rakyat biasa.\n\nPuncaknya, pada 11 November 2020, Internet Society (ISOC) memberikan penghargaan prestisius **Jonathan B. Postel Service Award** kepada Onno. Penghargaan yang setara dengan \"Hadiah Nobel\" di dunia internet ini diberikan khusus untuk para inovator visioner yang berdedikasi memperluas akses internet di seluruh dunia. Onno terpilih karena peran kuncinya dalam demokratisasi akses internet dan kepeloporannya memanfaatkan teknologi berbiaya rendah di pedesaan.\n\n## Penutup: Menjadi Manusia yang Bermanfaat\n\nKetika banyak orang mendesak agar dirinya diangkat menjadi Menteri Komunikasi dan Informatika, Onno selalu menjawab dengan halus dan jenaka. Baginya, jabatan menteri yang hanya berumur lima tahun bukanlah sebuah tolok ukur kesuksesan.\n\nTujuan hidup Onno W. Purbo sangatlah sederhana dan filosofis: ia ingin menjadi manusia yang bermanfaat bagi orang lain. Menurut kutipannya yang diambil dari hadist Rasulullah SAWW, *\"Sebaik-baik manusia adalah yang bermanfaat bagi manusia lainnya\"* kutipan itu yang menjadi prinsip bagi Prof Onno. Melalui buku-buku yang digratiskannya, video-video *tutorial* di YouTube, ribuan artikel, dan jaringan-jaringan komunitas *Open Source* yang ia rintis, Onno telah menunaikan tujuannya. Ia membuktikan bahwa kedaulatan digital dan kemajuan sebuah bangsa tidak harus selalu dimotori oleh pemerintah atau konglomerat, melainkan bisa dibangun dari bawahdari tangan-tangan rakyat biasa yang mau belajar dan berbagi.\n\n## Referensi\n\n### Artikel Berita dan Biografi (Web)\n\n- **Biografiku.com**: \"Biografi Onno W Purbo\" - [https://www.biografiku.com/biografi-onno-w-purbo/](https://www.biografiku.com/biografi-onno-w-purbo/).\n- **Wikipedia bahasa Indonesia**: \"Onno W. Purbo\" - [https://id.wikipedia.org/wiki/Onno_W._Purbo](https://id.wikipedia.org/wiki/Onno_W._Purbo).\n- **CNN Indonesia**: \"Onno, Wajan, dan Kisah 'Perang' Melawan Buta Internet RI\" - [https://www.cnnindonesia.com/teknologi/20221202161533-192-882019/onno-wajan-dan-kisah-perang-melawan-buta-internet-ri](https://www.cnnindonesia.com/teknologi/20221202161533-192-882019/onno-wajan-dan-kisah-perang-melawan-buta-internet-ri).\n- **Liputan6.com**: \"Onno W. Purbo, Pejuang IT Indonesia yang Hobi Bersepeda\" - [http://www.liputan6.com/tekno/read/667563/onno-w-purbo-pejuang-it-indonesia-yang-hobi-bersepeda](http://www.liputan6.com/tekno/read/667563/onno-w-purbo-pejuang-it-indonesia-yang-hobi-bersepeda).\n- **detikInet**: \"Bangga! Onno W Purbo Dapat Penghargaan Dunia Bidang Internet\" - [https://inet.detik.com/cyberlife/d-5260444/bangga-onno-w-purbo-dapat-penghargaan-dunia-bidang-internet](https://inet.detik.com/cyberlife/d-5260444/bangga-onno-w-purbo-dapat-penghargaan-dunia-bidang-internet).\n- **Kumparan**: \"Onno W. Purbo Raih Penghargaan Internet Dunia Jonathan B. Postel Service Award\" - [Tautan Kumparan](https://kumparan.com/kumparantech/response/onno-w-purbo-raih-penghargaan-internet-dunia-jonathan-b-postel-service-award-1uZYLtCUsPq).\n- **OnnoWiki**: \"Onno W. Purbo\" - [http://www.onnocenter.or.id/wiki/index.php/Onno_W._Purbo](http://www.onnocenter.or.id/wiki/index.php/Onno_W._Purbo).\n- **eLearning Rakyat**: Portal kursus online gratis yang dibangun oleh Onno W. Purbo - [https://lms.onnocenter.or.id/moodle/](https://lms.onnocenter.or.id/moodle/).\n- Dokumen / Buku TIK berbasis *Open Source* yang ditulis Onno W. Purbo, seperti Buku Sekolah Elektronik (BSE) dan pedoman keamanan siber.\n- Video \"ONNO W PURBO dan SEJARAH INTERNET INDONESIA\" & \"Sisi Lain ONNO W PURBO: Jadi Rektor ITTS!\" di kanal **GIZMOLOGI**.\n- Video \"Bincang Bareng Onno W. Purbo Seputar Dunia IT di Indonesia\" di kanal **Indonesia Belajar**.\n- Video \"Onno W Purbo Tadinya Berpikir Ikuti Jejak BJ Habibie\" di kanal **voidotid**.", "sourceUrl": "https://github.com/IndopenSource/Blog-IndopenSource/blob/main/content/2026/07/onno-w-purbo-bapak-open-source-dan-sang-pembebas-internet-indonesia.md", "releasedAt": "2026-07-22", - "lastModifiedAt": "2026-07-22T05:16:27Z", - "latestCommitSha": "d24f6984362f60398eb45955c238fbf6264cd353", - "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/d24f6984362f60398eb45955c238fbf6264cd353", + "lastModifiedAt": "2026-07-23T17:32:38Z", + "latestCommitSha": "67a51e308445e4cce5198428e621fdb60d1f0cbf", + "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/67a51e308445e4cce5198428e621fdb60d1f0cbf", "author": { "name": "wauputr4", "avatarUrl": "https://avatars.githubusercontent.com/u/103489788?v=4", @@ -136,13 +145,16 @@ "status": "published", "lang": "id", "translationKey": "", - "thumbnail": "https://raw.githubusercontent.com/IndopenSource/Blog-IndopenSource/main/content/2026/07/assets/it-camp-2026.jpg", + "thumbnail": "/blog-assets/2026/07/it-camp-2026.jpg", + "thumbnailWidth": 1600, + "thumbnailHeight": 763, + "thumbnailType": "image/jpeg", "content": "Sebanyak 122 peserta mengikuti IT Camp 2026 pada 18–19 Juli 2026 di Villa\nZanara, Bogor. Peserta termudanya berusia 15 tahun. Penyelenggaraan tahun ini\nsekaligus menandai 17 tahun IT Camp digelar setiap tahun.\n\nAcara diselenggarakan oleh [Yayasan Onno Center\nInternational](https://onnocenter.or.id/) bersama Pusat Siber TNI Angkatan\nDarat (Pussiberad). Sebagai peserta, saya melihat satu pola yang terasa kuat\nsepanjang acara: teknologi tidak berhenti sebagai bahan presentasi. Para\npemateri memperlihatkan hasil kerja mereka dan mempraktikkannya di hadapan\npeserta.\n\n> “Kalau kalian sadar, pemateri-pemateri ini tidak hanya berteori. Mereka semua\n> langsung demo dan praktik, sesuatu yang jarang sekali kalian temukan di\n> tempat lain.” — Prof. Onno W. Purbo, pendiri Onno Center\n\nPendekatan tersebut membuat peserta tidak hanya mengenal istilah baru, tetapi\njuga melihat bahwa teknologi dapat dipelajari, dibongkar, dan dikembangkan\nsecara mandiri.\n\n## AI lokal sebagai jalan untuk belajar mandiri\n\nSalah satu pokok pembahasan IT Camp 2026 adalah membangun AI yang dapat\ndijalankan pada perangkat dan infrastruktur sendiri. Dzaq R. Purbo\nmempraktikkan penggunaan Ollama, Open WebUI, dan *Retrieval-Augmented\nGeneration* (RAG) untuk mengolah pengetahuan dari dokumen lokal.\n\nAI lokal memberi ruang belajar yang berbeda dari layanan siap pakai. Peserta\ndapat memahami bagaimana model dijalankan, bagaimana data diberikan, serta\nbagaimana sebuah jawaban dihasilkan. Data juga tidak harus dikirim ke layanan\neksternal, sehingga pengguna memiliki kontrol lebih besar atas prosesnya.\n\nSemangat ini dekat dengan open source, di mana alat dapat dipelajari dari dalam,\ndisesuaikan dengan kebutuhan, dan dikembangkan bersama. Kemandirian bukan\nberarti mengerjakan semuanya sendirian, melainkan memiliki kemampuan untuk\nmemahami dan menentukan teknologi yang digunakan.\n\n## SymbiotOS dan sistem operasi yang dekat dengan pengguna\n\nPada 19 Juli, Ahmad Haris memperkenalkan SymbiotOS, sistem operasi *mobile*\nberbasis open source yang dirancang tanpa aplikasi bawaan berlebihan dan\nmemberi perhatian pada privasi pengguna.\n\nBagian yang paling menarik adalah dukungan bahasa dan aksara Jawa. Contoh ini\nmenunjukkan bahwa sistem operasi lokal bukan hanya mengganti nama atau\ntampilan. Teknologi dapat disesuaikan dengan bahasa, kebiasaan, dan kebutuhan\nmasyarakat yang sering tidak menjadi prioritas produk global.\n\nKarena kode dan perkakasnya dapat dipelajari, pengembangan sistem seperti\nSymbiotOS juga membuka peluang bagi pelajar dan pengembang Indonesia untuk\nmemahami sistem operasi melalui praktik nyata.\n\n## AI untuk Infrastruktur dan keamanan siber\n\nDimaz Arno, yang juga tampil pada 19 Juli, mendemonstrasikan bagaimana *AI\nagent* dapat membantu proses *penetration testing*. Dalam salah satu\ndemonstrasi, AI digunakan untuk menguji keamanan sebuah aplikasi permainan\nAndroid.\n\nDemo tersebut memperlihatkan bahwa AI dapat menjalankan tahapan teknis dengan\ncepat. Namun, kemudahan itu juga menegaskan pentingnya etika, izin, dan\npemahaman keamanan. Perkakas keamanan seharusnya dipakai pada sistem yang\nmemang memberi izin untuk diuji.\n\nProf. Onno W. Purbo turut membahas penggunaan AI untuk *Security Operation\nCenter* dan *Open Source Intelligence*. Wilson Lisan CEO Efison juga menjelaskan kebutuhan\ninfrastruktur *high-performance computing* dan menjelaskan bagaimana pengalamannya\nmembangun oprek hardware sampai membangun HPC di Indonesia, sementara sesi-sesi lain\nmemperlihatkan penerapan AI pada pengolahan informasi dan pekerjaan teknis.\n\n## Lebih penting dari mengikuti tren\n\nIT Camp 2026 menunjukkan bahwa pembicaraan mengenai AI di Indonesia tidak\nharus berhenti pada pemakaian produk dari luar. Model AI dapat dijalankan\nsecara lokal, sistem operasi dapat disesuaikan dengan bahasa daerah, dan\nsoftware open source dapat menjadi tempat belajar yang bermanfaat.\n\nBagi saya, kekuatan acara ini bukan hanya banyaknya teknologi yang\ndiperlihatkan. Hal yang lebih penting adalah keberanian para pemateri untuk\nmembuka proses kerja mereka. Peserta dapat melihat kegagalan, penyesuaian, dan\ncara sebuah sistem dibangun dengan pengalaman yang sulit diperoleh bila teknologi\nhanya diperkenalkan melalui teori.\n\nOpen source menyediakan jalur untuk melanjutkan pembelajaran tersebut setelah\nacara selesai. Peserta dapat mencoba alat-alat yang sama, membaca dokumentasi,\nmempelajari kode, lalu membagikan kembali temuannya kepada orang lain.", "sourceUrl": "https://github.com/IndopenSource/Blog-IndopenSource/blob/main/content/2026/07/it-camp-2026-open-source-ai-lokal.md", "releasedAt": "2026-07-21", - "lastModifiedAt": "2026-07-21T07:39:04Z", - "latestCommitSha": "74105f370296b39ff8423c0fc93ed4bd71cabef0", - "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/74105f370296b39ff8423c0fc93ed4bd71cabef0", + "lastModifiedAt": "2026-07-23T17:32:38Z", + "latestCommitSha": "67a51e308445e4cce5198428e621fdb60d1f0cbf", + "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/67a51e308445e4cce5198428e621fdb60d1f0cbf", "author": { "name": "wauputr4", "avatarUrl": "https://avatars.githubusercontent.com/u/103489788?v=4", @@ -176,13 +188,16 @@ "status": "published", "lang": "id", "translationKey": "", - "thumbnail": "https://raw.githubusercontent.com/IndopenSource/Blog-IndopenSource/main/content/2026/07/assets/model-ekonomi-pusat-yayasan-it.jpg", + "thumbnail": "/blog-assets/2026/07/model-ekonomi-pusat-yayasan-it.jpg", + "thumbnailWidth": 1672, + "thumbnailHeight": 941, + "thumbnailType": "image/jpeg", "content": "Open source bukan cuma kumpulan kode yang bisa di-*clone*. Melainkan infrastruktur\ndigital yang dipakai bersama, lalu dirawat oleh organisasi, perusahaan, dan\nkomunitas. Contoh paling populer adalah Linux, yang menjalankan seluruh sistem dalam daftar TOP500\nsuperkomputer pada November 2025.\n\nLantas, bila kode dapat disalin dan digunakan bebas, mengapa ekosistem ini\nmampu bertahan puluhan tahun?\n\n## Arsitektur finansial: membiayai operasi bersama\n\nYayasan seperti Linux Foundation, Apache, dan Eclipse tidak menjual akses ke\n*source code*. Mereka membantu menata pekerjaan yang membuat proyek dapat\ndipakai jangka panjang: tata kelola, infrastruktur *CI/CD*, audit keamanan,\nperlindungan hukum, dokumentasi, serta koordinasi komunitas.\n\nPendanaan datang dari beragam sumber, antara lain keanggotaan perusahaan,\npelatihan dan sertifikasi, acara, hibah, donasi, serta dukungan *in-kind*\nseperti komputasi dan *bandwidth*. Model ini membuat biaya pemeliharaan\ninfrastruktur inti menjadi tanggung jawab bersama, bukan beban satu vendor.\n\n## Menghindari private fork yang mahal\n\nBagi organisasi, memakai open source juga merupakan strategi mitigasi risiko.\nKode yang terbuka mengurangi ketergantungan pada roadmap dan harga dari satu\nvendor. Namun kebebasan itu tidak berarti setiap organisasi sebaiknya membuat\nsalinan sendiri lalu berjalan terpisah.\n\n*Private fork* dapat menjadi utang teknis: setiap rilis upstream memunculkan\npatch, konflik, dan pekerjaan keamanan yang harus dipelihara sendiri. Riset\nLinux Foundation 2026 mencatat rata-rata biaya pemeliharaan private fork\nmencapai 5.160 jam kerja atau sekitar US$258.000 per siklus rilis.\n\nKarena itu, kontribusi ke *upstream* sering menjadi keputusan bisnis yang lebih\nbaik daripada memelihara perubahan secara tertutup. Perbaikan keamanan dan\nfitur yang diterima proyek utama dapat dipakai kembali oleh semua pengguna,\ntermasuk organisasi yang menyumbangkannya.\n\n## Mesin ekonomi di sekitar kode\n\nEkosistem open source memonetisasi layanan dan koordinasi di sekeliling kode,\nbukan membatasi salinan kodenya. Perusahaan membayar keanggotaan untuk ikut\nmenentukan arah proyek dan bekerja dalam kelompok standar. Banyak yayasan juga\nmenjalankan sertifikasi, pelatihan, serta konferensi.\n\nDi sisi lain, proyek *community-first* dapat memakai *fiscal host* untuk\nmenerima donasi dan hibah. Bentuknya berbeda-beda, tetapi prinsipnya sama:\norang yang mendapat nilai dari proyek ikut menanggung pemeliharaan proyek.\n\n## Kontribusi sebagai investasi\n\nKontribusi tidak harus berupa kode. Bisa juga berupa pelaporan bug, pengujian,\ndokumentasi, dukungan komunitas, pendanaan, atau keanggotaan yayasan. Dalam\nsurvei Linux Foundation terhadap lebih dari 500 pemimpin TI, kontribusi kode\nmemiliki rasio manfaat-biaya 3,6x, sementara keanggotaan yayasan mencapai 4,8x.\n\nAngka tersebut bukan janji bagi setiap organisasi, tetapi memberikan satu\npelajaran: kontribusi aktif dapat mengurangi biaya pemeliharaan sekaligus\nmempercepat respons keamanan dan pengembangan produk.\n\n## Tantangan: keamanan dan regulasi\n\nOpen source tetap membutuhkan pemeliharaan yang disiplin. Ketergantungan harus\ndipantau, kerentanan perlu ditangani, dan pengguna perlu mengetahui siapa yang\nbertanggung jawab atas sebuah komponen.\n\nCyber Resilience Act Uni Eropa menunjukkan arah tuntutan ini. Mulai 11\nSeptember 2026, produsen harus memberi peringatan awal atas kerentanan yang\ndieksploitasi aktif atau insiden berat dalam 24 jam setelah mengetahuinya.\nKewajiban ini bukan alasan untuk menjauhi open source, justru ini alasan untuk\nmembangun proses pemeliharaan, koordinasi disclosure, dan kontribusi\nyang sehat.\n\nPada akhirnya, daya tahan open source datang dari gotong royong R&D. Kode yang\nterbuka memperbolehkan banyak pihak berbagi biaya, memperbaiki masalah yang\nsama, dan membangun layanan bernilai di atas fondasi bersama. Kolaborasi itu\nyang membuatnya lebih adaptif daripada model perangkat lunak tertutup semata.\n\n## Referensi\n\n- [TOP500: Linux operating system family](https://www.top500.org/statistics/details/osfam/1/)\n- [Linux Foundation: ROI for Open Source Software Contribution](https://www.linuxfoundation.org/research/contribution-roi)\n- [Linux Foundation: laporan tentang biaya private fork dan ROI kontribusi](https://www.linuxfoundation.org/press/new-linux-foundation-report-shows-active-open-source-contribution-delivers-2-5x-roi-while-passive-consumption-increases-costly-technical-debt)\n- [Komisi Eropa: kewajiban pelaporan Cyber Resilience Act](https://digital-strategy.ec.europa.eu/en/policies/cra-reporting)", "sourceUrl": "https://github.com/IndopenSource/Blog-IndopenSource/blob/main/content/2026/07/bagaimana-open-source-mampu-bertahan.md", "releasedAt": "2026-07-16", - "lastModifiedAt": "2026-07-21T07:39:04Z", - "latestCommitSha": "74105f370296b39ff8423c0fc93ed4bd71cabef0", - "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/74105f370296b39ff8423c0fc93ed4bd71cabef0", + "lastModifiedAt": "2026-07-23T17:32:38Z", + "latestCommitSha": "67a51e308445e4cce5198428e621fdb60d1f0cbf", + "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/67a51e308445e4cce5198428e621fdb60d1f0cbf", "author": { "name": "wauputr4", "avatarUrl": "https://avatars.githubusercontent.com/u/103489788?v=4", @@ -214,13 +229,16 @@ "status": "published", "lang": "id", "translationKey": "", - "thumbnail": "https://raw.githubusercontent.com/IndopenSource/Blog-IndopenSource/main/content/2026/06/assets/memperkenalkan-blog-indopensource.jpg", + "thumbnail": "/blog-assets/2026/06/memperkenalkan-blog-indopensource.jpg", + "thumbnailWidth": 1536, + "thumbnailHeight": 1024, + "thumbnailType": "image/jpeg", "content": "Blog IndopenSource disiapkan sebagai tempat mencatat kerja komunitas open source\nIndonesia secara rapi dan mudah ditinjau.\n\n## Fokus Awal\n\nFokus awal blog ini adalah tulisan yang membantu pembaca menemukan proyek,\nmemahami praktik perawatan open source, dan mengikuti perkembangan komunitas.\n\nKategori awal yang akan dikurasi:\n\n- Project spotlight.\n- Learning notes.\n- Release notes.\n- Catatan maintenance.\n- Kabar komunitas.\n\n## Cara Berkontribusi\n\nKontributor dapat menyalin template dari `templates/article.md`, membuat file di\nfolder `content/YYYY/MM/`, lalu membuka pull request.\n\nSetiap tulisan akan direview agar struktur, sumber, dan nada tulisannya sesuai\ndengan kebutuhan pembaca IndopenSource.\n\n## Langkah Berikutnya\n\nSetelah alur editorial stabil, konten dari repo ini dapat diintegrasikan ke\nwebsite `indopensource.org`.", "sourceUrl": "https://github.com/IndopenSource/Blog-IndopenSource/blob/main/content/2026/06/memperkenalkan-blog-indopensource.md", "releasedAt": "2026-06-14", - "lastModifiedAt": "2026-07-16T11:02:50Z", - "latestCommitSha": "a411deee259a2d8b9a8b1150d17f5dd5e2d6aab1", - "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/a411deee259a2d8b9a8b1150d17f5dd5e2d6aab1", + "lastModifiedAt": "2026-07-23T17:32:38Z", + "latestCommitSha": "67a51e308445e4cce5198428e621fdb60d1f0cbf", + "latestCommitUrl": "https://github.com/IndopenSource/Blog-IndopenSource/commit/67a51e308445e4cce5198428e621fdb60d1f0cbf", "author": { "name": "wauputr4", "avatarUrl": "https://avatars.githubusercontent.com/u/103489788?v=4", diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index dc38ac4..8028d81 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -8,6 +8,9 @@ interface Props { description?: string; /** Open Graph / Twitter image, absolute or site-relative. */ image?: string; + imageWidth?: number; + imageHeight?: number; + imageType?: string; /** Open Graph `og:type` (e.g. `website`, `article`). */ type?: string; /** Search-engine indexing policy for this page. */ @@ -38,6 +41,9 @@ const { title = 'IndopenSource', description = 'Roadmap website IndopenSource untuk proyek open source Indonesia.', image = '/brand/indopensource-hero.jpg', + imageWidth, + imageHeight, + imageType, type = 'website', robots = 'index, follow', publishedAt, @@ -210,6 +216,9 @@ const csp = [ + {imageWidth && } + {imageHeight && } + {imageType && } {type === 'article' && publishedAt && } {type === 'article' && modifiedAt && } diff --git a/src/lib/content.ts b/src/lib/content.ts index f8d90ea..6604f51 100644 --- a/src/lib/content.ts +++ b/src/lib/content.ts @@ -43,6 +43,9 @@ export interface BlogPost { /** Shared key used to connect translated versions of one article. */ translationKey?: string; thumbnail: string; + thumbnailWidth?: number; + thumbnailHeight?: number; + thumbnailType?: string; content: string; sourceUrl: string; /** Editorial publication date (frontmatter `date`), falling back to commit metadata. */ diff --git a/test/lib.test.mjs b/test/lib.test.mjs index 80f4fc3..7c76cbd 100644 --- a/test/lib.test.mjs +++ b/test/lib.test.mjs @@ -10,6 +10,7 @@ // redefining any logic here, so the tests fail if that behaviour regresses. import { strict as assert } from 'node:assert'; +import { existsSync, readFileSync } from 'node:fs'; import { describe, it } from 'node:test'; import { projectSlug, rankProjectOwners } from '../src/lib/projects.ts'; @@ -138,6 +139,21 @@ describe('article language routing', () => { }); }); +describe('synced article thumbnails', () => { + it('uses same-origin files with complete Open Graph metadata', () => { + const posts = JSON.parse(readFileSync(new URL('../src/data/blog-posts.json', import.meta.url), 'utf8')); + + for (const post of posts) { + assert.match(post.thumbnail, /^\/blog-assets\//); + assert.ok(existsSync(new URL(`../public${post.thumbnail}`, import.meta.url)), `missing ${post.thumbnail}`); + assert.ok(post.thumbnailWidth > 0); + assert.ok(post.thumbnailHeight > 0); + assert.match(post.thumbnailType, /^image\//); + assert.doesNotMatch(post.content, /raw\.githubusercontent\.com/); + } + }); +}); + describe('renderArticle (frontmatter content)', () => { it('renders Markdown to HTML', () => { const html = renderArticle('# Title\n\nA **bold** paragraph.');