{
"path": "/3m4bf3vue2k2d",
"site": "at://did:plc:xg2vq45muivyy3xwatcehspu/site.standard.publication/3m3zpxhfl3c2s",
"$type": "site.standard.document",
"title": "Dev Log 3: 2025-10-28",
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Yesterday"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [],
"plaintext": "SkyPanel (Extension)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "So far today in SkyPanel, I've worked on a couple of more advanced \"fun\" features. The first one was marking posts are read based on scrolling past (Intersection Observer)."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [],
"plaintext": "Beacon"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Yesterday I worked on stub discovery & Protocols."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"facets": [],
"plaintext": "Today"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [],
"plaintext": "Noteleaf"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 23,
"byteStart": 15
},
"features": [
{
"uri": "https://github.com/stormlightlabs/noteleaf",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 120,
"byteStart": 105
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
]
}
],
"plaintext": "I went back to noteleaf to take advantage of some of cobra/fang's documentation generation capabilities. noteleaf docgen generates a docusaurus compatible structure"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [],
"plaintext": "SkyPanel"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I added quite a bit of UI and improved the UX. Most of this is around how posts are displayed and read through. There will be a tree style display for threads, and right now, posts are marked as read when scrolled by using the Intersection Observer API."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I plan to improve loading states to include more visual feedback."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"facets": [],
"plaintext": "Beacon"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "I posted on reddit asking about linting rules commonly employed by other pythonistas. A lot of folks start aggressive and then remove rules as they see fit. I think I'm going to stick to a small subset still. It was nerve wracking posting on reddit. Glad I did it though."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.horizontalRule"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Last night was wild! Go Dodgers!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
}
]
}
]
},
"bskyPostRef": {
"cid": "bafyreibshjhapjfrvsgen4wo7qcaolygp4ctgbriqgbh35cgi5asunzi2e",
"uri": "at://did:plc:xg2vq45muivyy3xwatcehspu/app.bsky.feed.post/3m4bf445cps2d",
"commit": {
"cid": "bafyreiggjhmx4r7rybza2qtsaxkjksrqegz6osjsevrj6kmhl5fo2j2zqi",
"rev": "3m4bf44afoi2s"
},
"validationStatus": "valid"
},
"description": "",
"publishedAt": "2025-10-28T16:46:59.753Z"
}