अपने ब्लॉग में Bluesky कमेंट फीचर लागू करना
(natalie.sh)- पुराने टिप्पणी सिस्टम (Disqus, सेल्फ-होस्टेड, GitHub Issues आदि) को हमने स्पीड, ट्रैकिंग, मेंटेनेंस ओवरहेड और यूज़र लिमिट जैसी समस्याओं की वजह से इस्तेमाल नहीं किया
- Bluesky में इन्फ्रास्ट्रक्चर मेंटेन करने की जरूरत नहीं, रिच कंटेंट सपोर्ट, रियल-नेम आधारित अकाउंट, क्रॉस-प्लेटफॉर्म चैट संभव होने के कारण यह ब्लॉग टिप्पणियों के लिए उपयुक्त है
- इम्प्लीमेंटेशन की प्रक्रिया: ब्लॉग पोस्ट प्रकाशित करें → Bluesky पर शेयर करें → पोस्ट के AT URI को ब्लॉग पोस्ट के metadata में जोड़ें → उसी पोस्ट का टिप्पणी थ्रेड लाकर दिखाएं
- टिप्पणियों के लिए तीन प्रकार के कंपोनेंट रखे: सभी टिप्पणियाँ दिखाने वाला, individual टिप्पणी + रेस्पॉन्स दिखाने वाला, image/link आदि embed को हैंडल करने वाला
- recursive तरीके से अधिकतम 5-लेवल रेस्पॉन्स दिखाए जाते हैं, साथ में image grid, modal, लिंक कार्ड; असपोर्टेड embed के लिए fallback टेक्स्ट दिखाया जाता है
- Astro + React इंटीग्रेशन,
client:loadके साथ क्लाइंट साइड पर लोडिंग, frontmatter में DID और postCid जोड़ने से टिप्पणी सक्षम हो जाती है - टाइप सुरक्षा के लिए
@atcute/clientTypeScript टाइप का उपयोग, JavaScript डिसेबल होने पर भी बॉडी कंटेंट सही से दिखाने वाली प्रोग्रेसिव एन्हांसमेंट स्ट्रक्चर - बिना server और DB के, Bluesky API और CDN का उपयोग करके performance बेहतर रखा
- यह तरीका social फीचर्स को प्रत्येक साइट पर फिर से बनाने के बजाय, यूज़र के पहले से उपयोग किए जा रहे प्लेटफ़ॉर्म से कनेक्ट करके scalability और independence देता है
Bluesky को टिप्पणी सिस्टम के रूप में चुनने के कारण
- इन्फ्रास्ट्रक्चर मेंटेन करने की जरूरत नहीं
- image/link/quote पोस्ट जैसे rich कंटेंट का सपोर्ट
- Bluesky अकाउंट आधारित भरोसेमंद और जिम्मेदार व्यवहार
- ब्लॉग और social media के बीच traffic का आपस में आदान-प्रदान
- कंटेंट ownership अलग-अलग: ब्लॉग पोस्ट आपका, टिप्पणियाँ संबंधित लेखक की
AT Protocol को समझना
- DID: Decentralized user identifier
- CID: Content identifier
- AT URI:
at://did:.../app.bsky.feed.post/...फॉर्मेट वाला पता getPostThreadAPI call से टिप्पणी थ्रेड ला सकते हैं, authentication की जरूरत नहीं
कंपोनेंट स्ट्रक्चर
- मुख्य टिप्पणी कंपोनेंट
- individual टिप्पणी + नेस्टेड टिप्पणी render करने वाला कंपोनेंट
- image/link आदि embed संभालने वाला कंपोनेंट
नेस्टेड टिप्पणी हैंडलिंग
- recursive rendering, अधिकतम depth 5 की सीमा
- hierarchy दिखाने के लिए visual indentation
रिच कंटेंट हैंडलिंग
- image: CDN सपोर्ट, multi-image grid और modal view
- external link: thumbnail और description वाला card render
- अन्य embeds: fallback टेक्स्ट प्रदर्शित
Astro इंटीग्रेशन
- React कंपोनेंट +
client:loadका उपयोग - frontmatter में Bluesky DID, postCid जोड़ने पर टिप्पणियाँ सक्षम हो जाती हैं
डेवलपमेंट एक्सपीरियंस
- TypeScript टाइप सपोर्ट से stability बेहतर हुई
- Progressive Enhancement के कारण API issue होने पर भी पोस्ट body पर कोई असर नहीं
- बिना server/DB load के Bluesky infra का उपयोग
निष्कर्ष
- पुराने टिप्पणी सिस्टम की समस्याओं से बचकर, यूज़र के पहले से मौजूद प्लेटफ़ॉर्म से connect करते हैं
- Bluesky के साथ grow होने पर भागीदारी बढ़ने की संभावना
- ATProto आधारित होने से अन्य AppView या custom implementation पर migrate करना आसान
1 टिप्पणियां
Hacker News टिप्पणी
मुझे यह देखना अच्छा लगेगा कि Bluesky आगे चलकर monetization कैसे करेगा; तकनीकी स्ट्रक्चर चाहे कितना भी जटिल क्यों न लगे, अगर कहीं न कहीं पेमेंट मॉडल पर शिफ्ट होना है तो तरीका क्या होगा, यह जानने की उत्सुकता है।
पोस्ट दिलचस्प लगी। मुझे निजी तौर पर यह पढ़ना पसंद है कि लोग स्वतंत्र रूप से वेबसाइट बनाकर कैसे चलाते हैं। पोस्ट में टिप्पणी सिस्टम की समस्याएँ और चार विकल्प बताए गए हैं, लेकिन मैं भी एक पाँचवाँ तरीका कामयाब रहा, यह जोड़ना चाहता हूँ।
कई third-party comment systems इस्तेमाल करने के बाद मैं अभी form.lisp वाला एक सरल comment सिस्टम खुद बना कर चला रहा हूँ। हर टिप्पणी एक text file में सेव होती है, इसलिए spam, XSS या निरर्थक टिप्पणियों का डर नहीं रहता; हर वीकेंड मैं मैन्युअल रूप से चेक करके ब्लॉग में जोड़ देता हूँ।
टिप्पणियाँ सामान्य HTML files में सेव होती हैं, और static site generator (site.lisp) पोस्ट के साथ comment page भी बना देता है (टिप्पणी उदाहरण), यानी यह मूलतः एक static comment generator की तरह काम करता है।
पोस्ट में बताई गई पाँच सुविधाओं (अलग इंफ्रास्ट्रक्चर की जरूरत नहीं, rich content, real name आदि) में यह पूरी तरह नहीं बैठता, लेकिन मेरे लिए यह ठीक रहा और मैं इसे चार साल से ज़्यादा समय से संतोषजनक तरीके से चला रहा हूँ।
मेरी recommendation cactus.chat है। यह Matrix based है और guest support देता है, इसलिए अलग Matrix account होने की ज़रूरत नहीं। अपना account उपयोग करूँ तो हर पोस्ट के लिए एक Matrix room में शामिल होने जैसा काम होता है।
Bluesky पहले से मौजूद user-account model की वजह से data store करने में बहुत काम का लगा; अभी मैं ओपन-सोर्स web map cartes.app में Bluesky based review system बना रहा हूँ।
यह आसान नहीं है क्योंकि lexicon बनाना और Bluesky stream के हिसाब से DB manage करनी पड़ती है।
मैं Bluesky के revenue model की long-term sustainability पर संदेह में हूँ; अभी जो मुफ्त में उपलब्ध है वह सच में VC (Venture Capital) फंडिंग की वजह से संभव है।
इसलिए अपनाने में मैं सावधान हूँ, और लगता है करीब भविष्य में शायद API बंद हो जाए या comment system ही खराब हो जाए।
तीसरे पक्ष के app server, app view आदि से भी वही data access संभव है, इसलिए official API पर निर्भर रहने की ज़रूरत नहीं; कई मायनों में ecosystem ज्यादा खुला है।
Bluesky ecosystem वाकई शानदार लगता है; पहले भी मैंने इस तरीके का एक example देखा था।
थोड़ा अफ़सोस यह है कि हर webpage के लिए Bluesky पर अलग पोस्ट डालना पड़ता है तभी comment system काम करता है; अगर webcomponent जैसी चीज़ मिल जाए तो बेहतर होगा।
पोस्ट में लिखा कि “कई सालों से मैं सही comment system नहीं लगा पाया”, जबकि पूरे ब्लॉग में 2025 के सिर्फ दो posts दिखते हैं (जिसमें से एक यह पोस्ट है)।
सोशल मीडिया फ़ीड को सीधे ओपन किए बिना भी social interaction का तरीका दिलचस्प है।
अगर इसे अपने ब्लॉग पर लगा दूँ और लोग सीधे टिप्पणियाँ छोड़ें, जबकि मैं सिर्फ इसी इंटरफेस से Bluesky व अन्य socials से interact करूँ, तो मेरे लिए बढ़िया रहेगा।
जब फ़ीड खुलता है तो अक्सर doomscrolling या वेस्ट ऑफ टाइम में चला जाता है; इस तरीके से शायद उसी खराब cycle से बचे रहते हुए social media से जुड़ने का नया रास्ता दिखता है।
मेरे हिसाब से Bluesky ने इंटरनेट में एक बार फिर genuinely fresh ideas के निकलने का माहौल बना दिया है।
मूल रूप से यह प्रयास मुझे पुराने Twitter से भी ज्यादा कठोर माहौल दोबारा बनाने जैसा लगता है, कुछ-कुछ हाई स्कूल के कैंटीन वाली immature power politics की तरह।
मैं ब्लॉग खुद host नहीं कर रहा, इसलिए end में भी कुछ हद तक Bluesky पर ही टिक रहा हूँ।
Platform lock-in नहीं है यह कहते हैं, पर अगर कल Bluesky मेरा account block कर दे या कंपनी ही बंद हो जाए तो आगे क्या?
AT compatible प्रोडक्ट पर shift शायद संभव हो, मगर डर है कि बहुत सारा data खो न जाए।
(नोट: उस ब्लॉग के लेखक Bluesky कर्मचारी हैं; मैं अलग हूँ।)
अगर current PDS गिर जाए या block हो जाए तो तुरंत दूसरे server पर जा सकते हैं।
relay (gossip nodes), PDS, client, app view (Bluesky web app backend) आदि के अलग-अलग ओपन-सोर्स implementations और hosting providers मौजूद हैं।
अगर Bluesky कल बंद भी हो जाए तो आप आसान तरीके से self-host कर सकते हैं या किसी अन्य provider (जैसे zeppelin.social) की मदद से existing app आगे चला सकते हैं।
PLC directory अभी भी Bluesky के पास है, पर इसे स्वतंत्र foundation को shift किया जा रहा है और जरूरी हो तो replicate करना आसान है; did:web mode में सिर्फ DNS पर depend करना पड़ता है, इसलिए independence ज्यादा है।