{
"$type": "site.standard.document",
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://standard.site"
}
],
"index": {
"byteEnd": 159,
"byteStart": 146
}
}
],
"plaintext": "I've been following Leaflet's development since it was first announced, but this was my first time taking it for a spin once I decided it was the standard.site implementation that best fit my needs. So far I've only written two medium length and one long blog post, but I already have some positive things to say:"
}
},
{
"$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",
"plaintext": "Setup was trivial."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://standard.site"
}
],
"index": {
"byteEnd": 130,
"byteStart": 117
}
}
],
"plaintext": "I really like how simple and effective the theme experience is, and how it propagates into the ATProto layer via the standard.site integration."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The analytics are great. I'm happy with how many views I got on a first blog post, and a third of that traffic came from the Leaflet network rather than my Bsky followers."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "You can subscribe with Leaflet reader, with your email, or both - and either way you can see who those subscribers are."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The Bluesky tagging and embed features are really nice."
}
}
]
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "There are some areas within the app that are a bit of a drag:"
}
},
{
"$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",
"plaintext": "There are some FOUC issues that are distracting when you have a very different theme."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "It would be great to make \"view as theme\" work like a dark mode checkbox does. I love my red-and-black aesthetic but there are some times when it clashes with how the editor works (like block highlights)."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Human-readable URLs, ideally with some browser-side config to aid in default patterns but remaining customizable."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Static pages in a menu, as is common on platforms like Wordpress or Ghost. I want an \"About\" page!"
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "There are some editor quirks, like drag-to-select just generally being a bit... odd."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
],
"index": {
"byteEnd": 70,
"byteStart": 66
}
}
],
"plaintext": "Image embeds should have both alt text (invisible but searchable) and captions (visible beneath the image, searchable). Ghost does this really well."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Code blocks! Ideally ones with Mermaid support too."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "I did hit a weird glitch on a publish where I was able to write an entire post, but got told I was \"logged out\" on trying to publish. After logging in, publishing appeared to hang indefinitely; the result is that the post successfully published on Leaflet (and therefore to my PDS) but was not syndicated as a Bluesky post (I had to do this manually). Seems like there's a bug here."
}
}
]
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "And then I have some thoughts on reading and writing interfaces:"
}
},
{
"$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",
"plaintext": "I move between desktop and mobile a lot. It would be cool to have a mobile app, especially one with seamless interop with the Bluesky app. I'd love to be able to open Leaflet posts for a more focused reading experience."
}
},
{
"$type": "pub.leaflet.blocks.unorderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "I would love a fully featured \"publish-to-standard.site-via-Obsidian\" integration. I wouldn't use this for all writing, but perhaps certain interlinked articles or on certain publications. This isn't totally straightforward to implement, however; for example you'd want support for formatting and images."
}
}
]
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Overall, this still feels like a beta product, but also that it's good enough to be worth paying for! I'm happy with my choice."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": ""
}
}
],
"id": "019ead6e-c55c-7ffe-8840-6b5572cd1046"
}
]
},
"description": "mostly good, some bad",
"path": "/3mnur4w5glc25",
"publishedAt": "2026-06-09T17:51:09.587Z",
"site": "at://did:plc:nlzmjyfv6loqtxyzvdcznwgf/site.standard.publication/3mnpodkutsc26",
"tags": [
"meta",
"blog",
"leaflet"
],
"title": "Leaflet: first impressions"
}