{
"path": "/3meyw2rusr22y",
"site": "at://did:plc:aurnkk6uy6axy66uqaq6dqy6/site.standard.publication/3m6gjuzizxc27",
"tags": [],
"$type": "site.standard.document",
"title": "jklb.social: Dev notes #1",
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"id": "019c6737-6d22-7aa7-9a19-6236eb14e637",
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 1,
"facets": [],
"plaintext": "New Things"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "The jklbie Award for Excellence in Posting"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreidmvgyp5nzwehdhl7kwhdbkmo3amdtsaqrtj3uji3fwrp2vcldxpa"
},
"mimeType": "image/png",
"size": 1634309
},
"aspectRatio": {
"width": 1198,
"height": 1426
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 16,
"byteStart": 3
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
]
}
],
"plaintext": "If Credible Exit is On (by default it will be), after you see however many posts you chose to see (default: 40) you'll be prompted to leave social media. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "If you choose, you can then share:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "1: what you're up to today"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "2: a photo"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 276,
"byteStart": 247
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
]
},
{
"index": {
"byteEnd": 293,
"byteStart": 277
},
"features": [
{
"uri": "https://pdsls.dev/at://did:plc:aurnkk6uy6axy66uqaq6dqy6/social.jklb.award.nomination",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "And you can also nominate a post you liked for the jklbie Award for Excellence in Posting. This means your summary post is also a quote-repost of that post. It's a way of saying, this is the best thing I saw today. Nominating a post also writes a social.jklb.award.nomination (see on pdsls.dev) record to your PDS. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 86,
"byteStart": 61
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
},
{
"uri": "https://jklb.social/claimmyjklbie",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 87,
"byteStart": 86
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
]
},
{
"index": {
"byteEnd": 143,
"byteStart": 125
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
]
},
{
"index": {
"byteEnd": 159,
"byteStart": 153
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "The person who was nominated can then, if they choose, go to jklb.social/claimmyjklbie and claim their award (which writes a social.jklb.award record to their PDS. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreihsahhcjo5ye57d2oezjngnoxpu35mbzz3bk5esnvtybqa3pqfaue"
},
"mimeType": "image/png",
"size": 130794
},
"aspectRatio": {
"width": 1470,
"height": 1072
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "It's low stakes and (meant to be) fun. I am worried that it's confusing/feels spammy. Is it too weird or not weird enough? Should someone accepting have to give a little acceptance speech or something? Open to ideas. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "ATmosphere Report"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreiczkjot6xrw3wsllst5kuchp4oijnoqwbmib5frbfgdzipeshasqe"
},
"mimeType": "image/png",
"size": 739782
},
"aspectRatio": {
"width": 3024,
"height": 1222
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "This one I'm pretty excited about. The Atmosphere Report (on by default, will pop up at the END of your session) shows you the non-Bluesky activity of your Like Chorus over the last 24 hours. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 12,
"byteStart": 1
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
]
}
],
"plaintext": "(Like Chorus: The 30 most recent people to interact with you on bluesky (new follows, people who liked/reposted/replied to you. Inbound, not outbound. These are the people who have interacted with you, not people whose stuff you've interacted with). "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Right now it's too noisy. But already in its first iteration I've liked it as a way to see what's going on in the ATmosphere. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Pick your Algorithm! \n"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreicddn6ih23mvgmduekajmnydvhsnmwgwxka4rssaawkzo2tickfwu"
},
"mimeType": "image/png",
"size": 51104
},
"aspectRatio": {
"width": 410,
"height": 382
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Easy, quick win. At launch, I had hardcoded the algorithms you could use. Now, you can use the same algorithms you use on Bluesky social :) "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Forever Alpha"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 11,
"byteStart": 0
},
"features": [
{
"uri": "https://jklb.social",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 284,
"byteStart": 280
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "jklb.social is in alpha...and I think it's going to be in alpha forever. This is a sandbox for me to experiment with LLM-assisted coding. I am using Geoffrey Huntley's Ralph method & a $100/month claude code subscription for this and other stuff too. Things may change. This will not mature into a traditional stable web app most likely. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 1,
"facets": [],
"plaintext": "How I am using it"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 19,
"byteStart": 8
},
"features": [
{
"uri": "https://jklb.social",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "I check jklb.social once a day, east coast mornings. I log off when I'm done. I am trying to turn Bluesky into a wordle-like habit. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 26,
"byteStart": 21
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
},
{
"index": {
"byteEnd": 59,
"byteStart": 54
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "I am trying to spend less time on social media but be more sociable while I'm there. I like a higher rate of the posts I see. I reply and boost/repost a lot more. It's as easy to do all these things as it is even to just see the next post. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 11,
"byteStart": 0
},
"features": [
{
"uri": "https://jklb.social",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 19,
"byteStart": 15
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
},
{
"index": {
"byteEnd": 49,
"byteStart": 45
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "jklb.social is not feature-complete and does not do everything the Bluesky app does, and never will. When a post doesn't display very elegantly...I press 'v' and view the post on Bluesky. When I want to see a thread, I use the Bluesky app. You should too if you use jklb.social. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 1,
"facets": [],
"plaintext": "Lessons from Development/Dogfooding"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "some bugs/limitations are actually features"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I am seeing 15-50 posts a day, and have been for over a week now. It takes longer to see a bunch of posts on jklb.social. One \"bug\" of this is that I miss parts of the meta-discourse. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 238,
"byteStart": 231
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "But another way of looking at that is...there will always be more meta-discourses and I can always just catch the next one. Not being able to chase context/narratives spread over hundreds of posts I'm actually starting to see as a feature of jklb.social. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "once a day is a good social media cadence (for me)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 13,
"byteStart": 8
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "I still want to check social media at all hours. But the rule is simple enough that I'm mostly sticking to it. And it's nice. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 7,
"byteStart": 6
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "(I use other ATProto stuff all hours...like I'm writing this leaflet & will share in the afternoon. But I won't check jklb.social/bluesky until tomorrow morning). "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "there's a reason all feeds use scroll "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreih3pmwf5lfxh36sm25j5qbvloeuub5h5v3u7q2ejf6c7xtyqhbujm"
},
"mimeType": "image/png",
"size": 1699810
},
"aspectRatio": {
"width": 1474,
"height": 836
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "This whole project began because I got sad thinking about the behavior of scrolling. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I thought, one post per page. How hard could that be? Think of how big I can make the images and such! "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Turns out...dynamically presenting a post where:"
}
},
{
"$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": "the text will be 0-however-many characters"
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "there may or may not be an image, video, or multiple images"
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "the images may be any variety of dimensions"
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "there may or may not be a quoted post"
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "the quoted post may or may not have media/all the variability previously mentioned"
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "and there may be replies, or the post itself may be in reply to another post! "
},
"children": []
}
]
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Turns out...being able to dynamically change the height of how much real estate you give the post is pretty dang elegant. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 11,
"byteStart": 0
},
"features": [
{
"uri": "https://jklb.social",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 128,
"byteStart": 123
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "jklb.social does a really poor job of showing threads (t for thread view, btw). Also a really poor job of even telling you when your post is part of a thread, or is itself a reply, all that stuff. Still working on it and will never get it as obvious/easy/elegant as scrolling makes it. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 96,
"byteStart": 90
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
},
{
"index": {
"byteEnd": 160,
"byteStart": 148
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
},
{
"index": {
"byteEnd": 194,
"byteStart": 187
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "That said...going one-post-per-page means I can take profile pictures (the one media that never changes) and make those wicked big. And that's been delightful. I will never get over just seeing people's faces/avatars/profile picture art. It's the best. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "I like Ralphing"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Ralphing is nice because: "
}
},
{
"$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": "it's agentic, but it's serialized agentic (at least how I do it). Only one agent is ever working at a time. So it's a little more modest than something orchestrated like Gas Town, which I've also tried but found very overwhelming. "
},
"children": []
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 22,
"byteStart": 2
},
"features": [
{
"uri": "https://jakesimonds.leaflet.pub/3mejhoehqjk2y",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "I wrote a bit about it and will write more soon. "
},
"children": []
}
]
}
}
]
}
]
},
"bskyPostRef": {
"cid": "bafyreibsty5v7yxgtw6dq4ehtc5jucfkwte5xaxtouecidxnt4w57cr76a",
"uri": "at://did:plc:aurnkk6uy6axy66uqaq6dqy6/app.bsky.feed.post/3meyw2xizec2y",
"commit": {
"cid": "bafyreieuehawmwsoromgd2q73rnrrd2hgm6uckba2oyfgzlpcgn4cli4ke",
"rev": "3meyw2xlvqy2j"
},
"validationStatus": "valid"
},
"description": "new features! ",
"publishedAt": "2026-02-16T20:43:18.723Z"
}