{
"path": "/3mabsropbo22q",
"site": "at://did:plc:btxrwcaeyodrap5mnjw2fvmz/site.standard.publication/3lppk75kw7k26",
"tags": [],
"$type": "site.standard.document",
"title": "Bluesky thread viewer",
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"id": "019b329c-fcde-7992-9a0d-d73b1aa4e63e",
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "We added a Bluesky thread viewer in Leaflet! It works for both:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.unorderedList",
"children": [
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "quotes / mentions (open in side panel)"
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "post embeds in a Leaflet doc (see below!)"
},
"children": []
}
]
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 61,
"byteStart": 51
},
"features": [
{
"did": "did:plc:ad5bwszsc5m5jpj2sfa6uzjk",
"$type": "pub.leaflet.richtext.facet#didMention"
}
]
}
],
"plaintext": "We were inspired by this nice feedback thread from @erlend.sh:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.bskyPost",
"postRef": {
"cid": "bafyreifnx63bgrlw57d3exsktewllserjjsjhnjix2vzwakrwrvvg7g2ka",
"uri": "at://did:plc:ad5bwszsc5m5jpj2sfa6uzjk/app.bsky.feed.post/3ma67o7szic2j"
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "…and you can now click above to read that thread right in Leaflet! You can even click thread replies to see branching conversation."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "⁂ ⁂ ⁂"
},
"alignment": "lex:pub.leaflet.pages.linearDocument#textAlignCenter"
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 121,
"byteStart": 117
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "We like having our own comments section — as others have mentioned, it's nice to maintain separate context and not have to use Bluesky at all — but this makes social conversations on Bluesky a lot easier to view without bouncing between apps."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "We auto-create a linked Bluesky post when you publish (unless you \"publish quietly\"); this and any other Bluesky mentions / quotes show in the sidebar."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Now they indicate if they have replies, and same as with embedded posts (like above), clicking these posts also opens the full thread!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Still room to improve; maybe we can also do things like:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "If you like, you can turn off Leaflet comments in publication settings (per-publication) and just use Bluesky."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.unorderedList",
"children": [
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "show a count of mentions (or even aggregated likes etc)"
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "make that section more prominent"
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "extend this to show mentions in other apps, e.g. backlinks to Semble collections"
},
"children": []
}
]
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "⁂ ⁂ ⁂"
},
"alignment": "lex:pub.leaflet.pages.linearDocument#textAlignCenter"
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 60,
"byteStart": 45
},
"features": [
{
"did": "did:plc:6ayddqghxhciedbaofoxkcbs",
"$type": "pub.leaflet.richtext.facet#didMention"
}
]
}
],
"plaintext": "Another fun example — this collection from @tynanpurdy.com of atproto ideas, using embedded Bluesky posts:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"src": "https://blog.tynanpurdy.com/3lwgzk2ovnk2c",
"$type": "pub.leaflet.blocks.website",
"title": "A running list of ATproto ideas - Tynan's Leaflets",
"description": "Updated when the brain has more",
"previewImage": {
"$type": "blob",
"ref": {
"$link": "bafkreidybbhy64672nlmcl6hqh7jejmct5r4fuqmyixyjqyn4mevbgr3gi"
},
"mimeType": "image/png",
"size": 16967
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Now you can browse all those threads right from the Leaflet post!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "⁂ ⁂ ⁂"
},
"alignment": "lex:pub.leaflet.pages.linearDocument#textAlignCenter"
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "And some more useful context / threads to browse:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.bskyPost",
"postRef": {
"cid": "bafyreigywb4pb4gbjxavreompzsfsbym26ggnnwi36yqbtcbp6rv4ds5ku",
"uri": "at://did:plc:2xau7wbgdq4phuou2ypwuen7/app.bsky.feed.post/3ma6jxqa43slh"
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.bskyPost",
"postRef": {
"cid": "bafyreidjbhygykd3ts63rilqf5o7vlwku7j2biuu5ohbypihrun574ojgy",
"uri": "at://did:plc:btxrwcaeyodrap5mnjw2fvmz/app.bsky.feed.post/3ma734orolc2e"
}
}
}
]
}
]
},
"bskyPostRef": {
"cid": "bafyreigbtjoyvk3q3mmf5vdektryjuc5wckf7wqqtljmuvuekcgltwhlt4",
"uri": "at://did:plc:btxrwcaeyodrap5mnjw2fvmz/app.bsky.feed.post/3mabsruxkts2q",
"commit": {
"cid": "bafyreigdcwfog5obuoj6i7y4uvdyd2ouv3khxdiy7hovto57vedbma54cy",
"rev": "3mabsrv2h6e2f"
},
"validationStatus": "valid"
},
"description": "Lab Notes 019: a new thread viewer for Bluesky posts, both as embeds within posts, and in the quotes / mentions section!",
"publishedAt": "2025-12-18T18:32:35.600Z"
}