- Contoh implementasi yang memungkinkan komentar ditampilkan di situs statis dengan menggunakan Bluesky API
- Karena Bluesky menangani autentikasi akun, manajemen spam, penyimpanan, dan moderasi, tidak perlu memelihara server terpisah
- Implementasinya terdiri dari sekitar 200 baris kode TypeScript, memanfaatkan
@bluesky/api dan Tanstack react-query
- Komentar ditampilkan dalam bentuk read-only, dan dimuat otomatis dengan menghubungkan ID postingan Bluesky ke metadata tiap artikel blog
- Implementasi eksperimental yang menunjukkan kemungkinan menggabungkan platform sosial terbuka dan blog statis
Latar belakang implementasi bagian komentar Bluesky
- Titik awalnya adalah kesulitan untuk meng-host fitur komentar sendiri pada situs yang dibuat secara statis
- Konten statis yang dideploy ke CDN tidak bisa menyimpan data dinamis
- Menjalankan VPS atau layanan cloud terpisah menambah biaya dan beban pengelolaan
- Bluesky adalah platform terbuka berbasis API publik dan protokol AT yang sudah menyediakan fungsi-fungsi yang dibutuhkan untuk mengelola komentar
- Bluesky menangani autentikasi akun, penyaringan spam, penyimpanan, dan moderasi
- Di sisi blog, cukup panggil API untuk menampilkan komentar
Alternatif lain dan alasan memilih Bluesky
- Alternatif seperti Twitter, Disqus, dan giscus (berbasis GitHub Discussions) juga sempat dipertimbangkan
- Bluesky dibangun di atas protokol AT yang terdesentralisasi, sehingga risikonya lebih rendah untuk berada di bawah kendali satu perusahaan tertentu
- Dibanding pendekatan berbasis GitHub, Bluesky lebih cocok untuk hosting komentar karena merupakan platform yang berpusat pada percakapan
Cara implementasi
- Penulis merujuk pada paket bluesky-comments yang dipublikasikan Cory Zue, tetapi memilih untuk mengimplementasikannya sendiri
- Kode dibuat sendiri demi kustomisasi yang sesuai dengan gaya situs dan kemudahan pengembangan di masa depan
- Total implementasi, termasuk komponen UI dan fungsi API, berukuran sekitar 200 baris
- Pada awalnya sempat mempertimbangkan fitur posting langsung melalui OAuth, tetapi dikeluarkan karena kompleksitas UI dan keterbatasan waktu
- Hasil akhirnya adalah implementasi fitur tampilan komentar read-only saja
Susunan teknis
- Situs dibangun menggunakan React Server Components dan Parcel
- Konten ditulis dalam MDX, sehingga JavaScript/JSX bisa disertakan secara langsung
- Objek
metadata pada tiap artikel menyertakan bskyPostId untuk menghubungkannya ke postingan Bluesky
- Menggunakan Bluesky TypeScript SDK (
@bluesky/api) untuk mengambil data thread komentar dari endpoint getPostThread
- Permintaan API dikelola dengan Tanstack react-query
- Status error, loading, dan retry ditangani secara otomatis
Desain UI
- Dari respons Bluesky, hanya konten teks yang diekstrak lalu ditampilkan dalam UI komentar yang sederhana
- Struktur thread dibedakan dengan indentasi dan garis batas di sisi kiri
- Gambar profil dan tanggal posting mengacu pada desain Bluesky
- Di bagian atas ditambahkan tautan ke postingan Bluesky asli untuk mendorong partisipasi dalam percakapan
- Tidak ada fitur menulis komentar; pengguna meninggalkan balasan langsung di Bluesky
Kemungkinan ke depan
- Jika diperlukan, implementasi ini bisa dirilis sebagai paket terpisah
- Namun kode saat ini masih disesuaikan untuk situs pribadi penulis
- Karena strukturnya sederhana, pengembang lain juga bisa dengan mudah mengimplementasikannya dengan merujuk ke source code
- Masih belum jelas apakah integrasi komentar Bluesky akan membantu meningkatkan keterlibatan di blog
Respons pengguna Bluesky
- Banyak pengguna Bluesky meninggalkan respons positif di komentar seperti “ide bagus”, “respons cepat”, “cocok sebagai alternatif Disqus”
- Sebagian juga mengajukan pertanyaan tentang manajemen spam, penanganan komentar bertingkat, dan dukungan lampiran
- Penulis menjelaskan bahwa fitur moderasi pribadi di Bluesky dapat digunakan untuk menyembunyikan komentar tertentu
1 komentar
Opini Hacker News
Jika Anda merender blog atau situs web dengan static site generator, ada usulan untuk mengambil komentar sebagai file konten dan memasukkannya ke dalam proses build
.mdatau.htmlProses ini memang memakan banyak kerja manual, tetapi punya keunggulan berupa pemblokiran spam dan kepemilikan data penuh
Jika Anda tidak ingin memakai React, Anda bisa melihat web component komentar Bluesky yang saya buat
Bisa dilihat di repositori GitHub dan playground tema.
Kustomisasi tema-nya sangat mudah
Dengan mengambil ide dari tulisan asli, ada yang mengimplementasikannya sebagai sistem komentar berbasis Mastodon
Detailnya bisa dilihat di artikel blog saya
Referensi: artikel blog terkait
Ada pembicaraan bahwa karena undang-undang terkait ujaran kebencian di UE, operator situs bisa dihukum jika tidak memfilter komentar, dan saya penasaran bagaimana kenyataannya
Karena itu saya memilih mematikan fitur komentar sepenuhnya
Blog saya sepenuhnya statis, dan dengan skrip Cloudflare Worker 50 baris, komentar bisa diterima lalu langsung ditambahkan ke Markdown.
Ini bisa dilakukan tanpa perlu meng-embed fitur komentar
Dengan memanfaatkan API Bluesky, ini juga bisa diotomatisasi dengan cara otomatis mencari postingan pertama yang berisi tautan blog tertentu lalu menghubungkannya sebagai komentar
Saya juga membuat akun untuk uji coba karena sepertinya ini bisa membantu pertumbuhan Bluesky. Ini tampak seperti ide growth hacking yang cukup menarik
Idealnya, sistem komentar self-hosted atau berbasis Fediverse akan lebih berkelanjutan
Blog saya tidak terlalu populer, tetapi dulu saya pernah mengalami neraka spam dan komentar kebencian
Jadi saya tidak berniat lagi membuka fitur komentar di blog pribadi
Bahkan pada sistem berbasis Bluesky, Anda tetap bisa menambahkan labeler sendiri untuk melakukan sensor mandiri dengan memfilter komentar yang memiliki label tertentu
Saya juga melakukan hal serupa dengan ide yang mirip, menambahkan fitur komentar per lokasi OSM di cartes.app selain di blog saya
Review bisa ditinggalkan dengan akun ATproto, dan datanya disimpan di PDS dalam bentuk JSON milik pengguna