{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreigliuq4kwtfjwg2u4lk7xxgkfdubji62ocluosyx45jvupk77yy5y",
    "commit": {
      "cid": "bafyreigtwvbp46jcudb5xhel3jk2dliv3dwtb4pxhfzhb6koxmur2fdwjq",
      "rev": "3mo4zzayocr2d"
    },
    "uri": "at://did:plc:btxrwcaeyodrap5mnjw2fvmz/app.bsky.feed.post/3mo4zzavxe22x",
    "validationStatus": "valid"
  },
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "aspectRatio": {
                "height": 292,
                "width": 549
              },
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreieqijg2xkpszvc2zyzax4cbiu42avq7sforme5p7hqob6uoqmzvom"
                },
                "mimeType": "image/webp",
                "size": 108700
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Today we're releasing three big things to help us better write and publish together:",
              "textSize": "large"
            }
          },
          {
            "$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": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ],
                        "index": {
                          "byteEnd": 19,
                          "byteStart": 0
                        }
                      }
                    ],
                    "plaintext": "Multiplayer cursors, for live presence while editing",
                    "textSize": "large"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ],
                        "index": {
                          "byteEnd": 8,
                          "byteStart": 0
                        }
                      }
                    ],
                    "plaintext": "Comments, for private feedback in docs",
                    "textSize": "large"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ],
                        "index": {
                          "byteEnd": 18,
                          "byteStart": 0
                        }
                      }
                    ],
                    "plaintext": "Group publications — with Leaflet Pro",
                    "textSize": "large"
                  }
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ],
                  "index": {
                    "byteEnd": 87,
                    "byteStart": 71
                  }
                },
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://notes.hyperlink.academy/note/hyperlink-together"
                    }
                  ],
                  "index": {
                    "byteEnd": 130,
                    "byteStart": 104
                  }
                }
              ],
              "plaintext": "We've been exploring creative collaborative tools for quite some time; Leaflet Together is a nod to our previous project Hyperlink, making spaces for people to learn and create together."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "We're excited to make collaborative work even better in Leaflet!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "alignment": "lex:pub.leaflet.pages.linearDocument#textAlignCenter",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "⁂ ⁂ ⁂"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "plaintext": "Group Publications"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "You can now invite contributors to a publication, so multiple people can publish together in one place!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#atMention",
                      "atURI": "at://did:plc:btxrwcaeyodrap5mnjw2fvmz/site.standard.publication/3lppk75kw7k26"
                    }
                  ],
                  "index": {
                    "byteEnd": 96,
                    "byteStart": 79
                  }
                },
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#atMention",
                      "atURI": "at://did:plc:retm6aeqattyxp7bhmyyv7gk/site.standard.publication/3ml4jtdqqq222"
                    }
                  ],
                  "index": {
                    "byteEnd": 111,
                    "byteStart": 100
                  }
                }
              ],
              "plaintext": "This is a great way to make a pub for a team, org, meetup, or other group —  Leaflet Lab Notes or atproto.nyc for example!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ],
                  "index": {
                    "byteEnd": 37,
                    "byteStart": 26
                  }
                }
              ],
              "plaintext": "This is a new feature for Leaflet Pro — we're excited to build more powerful tools for serious publishers!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 3,
              "plaintext": "Here's how it works:"
            }
          },
          {
            "$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": "The account that'll own the group pub needs Leaflet Pro"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "From \"Settings\" in your pub dash, look for \"Contributors\""
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "Add people by handle, then send them the join link; once they accept they'll be added as a contributor to the publication"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "Contributors see a limited view of the pub: they can make drafts, and publish ones they've made (but not access subscriber list / analytics, or edit other pub settings)"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#italic"
                          }
                        ],
                        "index": {
                          "byteEnd": 12,
                          "byteStart": 8
                        }
                      }
                    ],
                    "plaintext": "You can also add multiple contributors per-post, which will show in the post byline when published"
                  }
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "mailto:contact@leaflet.pub"
                    }
                  ],
                  "index": {
                    "byteEnd": 132,
                    "byteStart": 123
                  }
                }
              ],
              "plaintext": "We'd love to build on this to make Leaflet work even better for groups, orgs, and other collaborative publications. Please reach out with any feedback or requests!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://leaflet.pub/about"
                    }
                  ],
                  "index": {
                    "byteEnd": 97,
                    "byteStart": 82
                  }
                },
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://leaflet.pub/checkout/pro?cadence=month"
                    }
                  ],
                  "index": {
                    "byteEnd": 130,
                    "byteStart": 119
                  }
                },
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://leaflet.pub/checkout/pro?cadence=year"
                    }
                  ],
                  "index": {
                    "byteEnd": 145,
                    "byteStart": 134
                  }
                }
              ],
              "plaintext": "Sign up or upgrade to Leaflet Pro to start publishing and invite contributors — learn more here or sign up directly: $12 / month or $120 / year. We appreciate your support!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.page",
              "id": "019ebe5a-cdce-7bb1-81e4-87b40d0541df"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "And now that you can collaborate with more people in publications, we made it better to work with them in your docs and drafts!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "alignment": "lex:pub.leaflet.pages.linearDocument#textAlignCenter",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "⁂ ⁂ ⁂"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "plaintext": "Cursors and comments"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Did you know Leaflet started as a simple shared doc editor?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Now that Leaflet is great for publishing, we want to better bring those worlds together. So, we now have…"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 3,
              "plaintext": "Multiplayer cursors"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "See when others are in the same doc, writing and editing together, with live cursors! Hover over the cursor to see username (if logged in; 'anonymous' if not). Highlight state, too."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "alt": "screenshot of text in Leaflet \"Wow Leaflet has multiplayer cursors now? 👀😮\" with two cursors, one showing 'brendan'",
              "aspectRatio": {
                "height": 212,
                "width": 860
              },
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreigsmyam6qifv4ya5mznyxzpwqwfpnfhb3nqenhrdzzqf5xxt3bw64"
                },
                "mimeType": "image/webp",
                "size": 13730
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 3,
              "plaintext": "Comments in documents / drafts"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Anyone with the edit link to a Leaflet document can now select text and add comments!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "These are off-protocol, using your Atmosphere account just for identity, and don't show in published posts or view-only links."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Editors can mark comments as resolved (this doesn't show anywhere for now but could in the future); you can delete your own comments as well."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "alt": "example comment of this very doc, with a few words highlighted and a comment in sidebar that says \"they look like this!\"",
              "aspectRatio": {
                "height": 330,
                "width": 2014
              },
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreif7ilqvbbogixe4lbhkkd3omabvw5euoi4i6w3wczqnvjfk7ciyb4"
                },
                "mimeType": "image/webp",
                "size": 89464
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ],
                  "index": {
                    "byteEnd": 9,
                    "byteStart": 0
                  }
                }
              ],
              "level": 3,
              "plaintext": "All kinds of collaborative docs"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ],
                  "index": {
                    "byteEnd": 69,
                    "byteStart": 66
                  }
                }
              ],
              "plaintext": "Great not only for collaborative blog editing / feedback, but for any collaborative docs: projects, team notes, or anything else you're working on with trusted collaborators."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "And makes realtime collab — like a focused draft review session, or team notes during a call — a lot nicer!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "To try this out, make any doc — draft in a pub, or a standalone Leaflet doc — and share the edit link with a friend or collaborator. Let us know what you think!"
            }
          }
        ],
        "id": "019ea81c-dbfe-7554-af1a-3d1566a4ae26"
      },
      {
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 1,
              "plaintext": "Group publications: FAQ"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ],
                  "index": {
                    "byteEnd": 42,
                    "byteStart": 0
                  }
                }
              ],
              "plaintext": "Let us know if you have further questions!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "The publication creator — posts live in their PDS"
                      }
                    }
                  ],
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "Who owns the published posts?"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "No, it's simple for now, collaborators can publish directly"
                      }
                    }
                  ],
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "Any submission / approval flow?"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "Not yet; once someone's a publication contributor you can add them to a per-post byline, but can't add someone for a single guest post; any contributor can make and publish new posts so this is best for trusted collaborators for now"
                      }
                    }
                  ],
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#italic"
                          }
                        ],
                        "index": {
                          "byteEnd": 31,
                          "byteStart": 27
                        }
                      }
                    ],
                    "plaintext": "Can I invite a contributor just to a single post?"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "Yep! Their posts will stay in the pub; they'll still be able to see their drafts but not publish or update them"
                      }
                    }
                  ],
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "Can the pub owner remove contributors?"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "The publication owner can edit and publish any posts; contributors can edit and publish posts they've made or been added to in the per-post byline"
                      }
                    }
                  ],
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "Who can edit / publish posts?"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "If the pub owner is authed in Leaflet this should Just Work! If their session is expired or they've logged out, they'll need to log in again first."
                      }
                    }
                  ],
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "How can a contributor publish if the post is owned by a different account?"
                  }
                }
              ]
            }
          }
        ],
        "id": "019ebe5a-cdce-7bb1-81e4-87b40d0541df"
      }
    ]
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreieqijg2xkpszvc2zyzax4cbiu42avq7sforme5p7hqob6uoqmzvom"
    },
    "mimeType": "image/webp",
    "size": 108700
  },
  "description": "Lab Notes 028: a new suite of features to make Leaflet great for collaborative writing and collaborative publishing!",
  "path": "/3mo4zz5jdrc2f",
  "publishedAt": "2026-06-13T00:51:21.852Z",
  "site": "at://did:plc:btxrwcaeyodrap5mnjw2fvmz/site.standard.publication/3lppk75kw7k26",
  "tags": [],
  "title": "Leaflet Together: cursors, comments, group publications!"
}