{
  "path": "/3m7hnejb6oc22",
  "site": "https://leaflet.pub/p/did:plc:vs3hnzq2daqbszxlysywzy54",
  "$type": "site.standard.document",
  "title": "New Features (Dec 8)",
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "id": "019afb92-a684-7002-a937-cf2e771cd632",
        "$type": "pub.leaflet.pages.canvas",
        "blocks": [
          {
            "x": 680,
            "y": 10,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreig3b6fyt6vxfffi7el5wcwlqintpwbmiy4ebpojwi73isaf6azm3a"
                },
                "mimeType": "image/png",
                "size": 5824
              },
              "aspectRatio": {
                "width": 158,
                "height": 56
              }
            },
            "width": 208,
            "rotation": 0
          },
          {
            "x": 27,
            "y": 246,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "src": "https://plyr.fm/playlist/92aac742-51f1-45d3-93f6-4246d0d85b5c",
              "$type": "pub.leaflet.blocks.website",
              "title": "at the gym",
              "description": "playlist by @zzstoatzz.io • 4 tracks",
              "previewImage": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreib6gbjdtrjijip3bq7gr7ehlq4v7mdwjznr4q2xa44m4cniipawly"
                },
                "mimeType": "image/png",
                "size": 15446
              }
            },
            "width": 619,
            "rotation": -5
          },
          {
            "x": 179,
            "y": 219,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 27,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                }
              ],
              "plaintext": "create and share playlists!"
            },
            "width": 268,
            "rotation": -5
          },
          {
            "x": 336,
            "y": 81,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "src": "https://github.com/zzstoatzz/plyr.fm/pull/499",
              "$type": "pub.leaflet.blocks.website",
              "title": "feat: playlists, albums as ATProto lists, library hub, and graceful degradation by zzstoatzz · Pull Request #499 · zzstoatzz/plyr.fm",
              "description": "Summary Major feature branch adding playlists, albums as ATProto lists, unified library experience, and graceful handling of unavailable tracks. Playlists  full playlist CRUD (create, rename, delet...",
              "previewImage": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreigqrklrlegtw4fv5q4z4nxehqsfnzzxkvqm3e4m2a4dmx3v3egjdy"
                },
                "mimeType": "image/png",
                "size": 28011
              }
            },
            "width": 659
          },
          {
            "x": 960,
            "y": 41,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.blockquote",
              "facets": [
                {
                  "index": {
                    "byteEnd": 23,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "software was developed!"
            },
            "width": 297,
            "rotation": 6
          },
          {
            "x": 794,
            "y": 228,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 37,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                }
              ],
              "plaintext": "view and configure all your settings!"
            },
            "width": 360,
            "rotation": 0
          },
          {
            "x": 179,
            "y": 988,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 40,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "uri": "https://github.com/zzstoatzz/plyr.fm/pull/503",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 64,
                    "byteStart": 44
                  },
                  "features": [
                    {
                      "did": "did:plc:5w4eqcxzw5jv5qfnmzxcakfy",
                      "$type": "pub.leaflet.richtext.facet#didMention"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 82,
                    "byteStart": 81
                  },
                  "features": [
                    {
                      "uri": "https://github.com/zzstoatzz/plyr.fm/pull/503",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "(without having to log out and back in! s/o @thisismissem.social for the pointer!)"
            },
            "width": 404,
            "rotation": -5
          },
          {
            "x": 457,
            "y": 1030,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreibimflqdt7khm5ttsljhai5ctzspaxkzrdlswwe4mawuukcy2hkke"
                },
                "mimeType": "image/png",
                "size": 847257
              },
              "aspectRatio": {
                "width": 2000,
                "height": 2000
              }
            },
            "width": 266
          },
          {
            "x": 689,
            "y": 1119,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.blockquote",
              "facets": [],
              "plaintext": "\"i really don't like writing scripts to check/update PDS state all the time\""
            },
            "width": 380
          },
          {
            "x": 154,
            "y": 1275,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "language": "perl",
              "plaintext": "# read-only\nclaude mcp add-json pdsx '{\"type\": \"http\", \"url\": \"https://pdsx-by-zzstoatzz.fastmcp.app/mcp\"}'\n\n# if you don't trust my random https://fastmcp.cloud url (you shouldn't without checking!)\nclaude mcp add pdsx -- uvx --from 'pdsx[mcp]' pdsx-mcp\n\n# with auth for writes\nclaude mcp add-json pdsx '{\n  \"type\": \"http\",\n  \"url\": \"https://pdsx-by-zzstoatzz.fastmcp.app/mcp\",\n  \"headers\": {\n    \"x-atproto-handle\": \"your.handle\",\n    \"x-atproto-password\": \"your-app-password\"\n  }\n}'",
              "syntaxHighlightingTheme": "github-light"
            },
            "width": 977
          },
          {
            "x": 697,
            "y": 1248,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 35,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "who could blame you claude, really?"
            },
            "width": 360,
            "rotation": 0
          },
          {
            "x": 39,
            "y": 1053,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.horizontalRule"
            },
            "width": 1200
          },
          {
            "x": 614,
            "y": 2368,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 1,
              "facets": [],
              "plaintext": "meta!"
            },
            "width": 134
          },
          {
            "x": 165,
            "y": 1762,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreidmmy2qlhayxfsilxnfbpmcoavmprxyoh536mob5veyjzjnr7uc6q"
                },
                "mimeType": "image/png",
                "size": 256304
              },
              "aspectRatio": {
                "width": 1592,
                "height": 902
              }
            },
            "width": 969
          },
          {
            "x": 412,
            "y": 2297,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 98,
                    "byteStart": 91
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "(i will figure out a sane way to make the tool responses as slim as possible, but that's a users>1 problem!)"
            },
            "width": 521
          },
          {
            "x": 33,
            "y": 1110,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [
                {
                  "index": {
                    "byteEnd": 15,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#highlight"
                    },
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    },
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "claude's corner"
            },
            "width": 224,
            "rotation": -2
          },
          {
            "x": 634,
            "y": 316,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreiedauotm2orz26i3xklf2e2sunfl5orfjpckbrnuki2jzfyjvdwcy"
                },
                "mimeType": "image/png",
                "size": 74345
              },
              "aspectRatio": {
                "width": 724,
                "height": 768
              }
            },
            "width": 642,
            "rotation": 0
          },
          {
            "x": 845,
            "y": 259,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreicmgqlky3bfhhwmsc6sznanu5t2wdhct5tlvhlqqlt3xn4ebeofbq"
                },
                "mimeType": "image/png",
                "size": 5503
              },
              "aspectRatio": {
                "width": 237,
                "height": 54
              }
            },
            "width": 246
          },
          {
            "x": 793,
            "y": 261,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreiaf56knzyxe5lp4upfwpdlblxil76suwrjl2namia3n4azhoxcbsu"
                },
                "mimeType": "image/png",
                "size": 24632
              },
              "aspectRatio": {
                "width": 1280,
                "height": 1024
              }
            },
            "width": 76,
            "rotation": 89
          },
          {
            "x": 448,
            "y": 4,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreibnm6qsh524orfw45c72tbbrffv4qlk2m6vbi3q22zxgrercmplcy"
                },
                "mimeType": "image/gif",
                "size": 855730
              },
              "aspectRatio": {
                "width": 300,
                "height": 300
              }
            },
            "width": 105,
            "rotation": -1
          },
          {
            "x": 20,
            "y": 88,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.blockquote",
              "facets": [
                {
                  "index": {
                    "byteEnd": 26,
                    "byteStart": 10
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    },
                    {
                      "uri": "https://at-me.fly.dev/view?handle=zzstoatzz.io",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "50%+ more decentralization!"
            },
            "width": 322,
            "rotation": -6
          },
          {
            "x": 282,
            "y": 2416,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "url": "https://plyr.fm/embed/track/218",
              "$type": "pub.leaflet.blocks.iframe",
              "height": 165
            },
            "width": 736
          },
          {
            "x": 139,
            "y": 417,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreig7hxmc6ojt6xrcnaziykiu6a33u7u2bs7plsjmprwvr3znsa6t4m"
                },
                "mimeType": "image/png",
                "size": 148989
              },
              "aspectRatio": {
                "width": 853,
                "height": 1018
              }
            },
            "width": 360
          },
          {
            "x": 241,
            "y": 381,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 16,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                }
              ],
              "plaintext": "build a library!"
            },
            "width": 175
          },
          {
            "x": 60,
            "y": 863,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreicas5gc2kqnjpfh3cuz34h4hdqeul2fowh3atiolex77dzsyheyla"
                },
                "mimeType": "image/png",
                "size": 36438
              },
              "aspectRatio": {
                "width": 1380,
                "height": 317
              }
            },
            "width": 580,
            "rotation": -6
          },
          {
            "x": 557,
            "y": 915,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreihjdn2dvjbzhatapg2z7dabbfbuupwmdoboebhukk72lnrbzywyda"
                },
                "mimeType": "image/png",
                "size": 3628
              },
              "aspectRatio": {
                "width": 350,
                "height": 350
              }
            },
            "width": 178,
            "rotation": -146
          },
          {
            "x": 228,
            "y": 833,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 12,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 20,
                    "byteStart": 12
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#bold"
                    },
                    {
                      "uri": "https://bsky.app/profile/teal.fm",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "scrobble to teal.fm!"
            },
            "width": 214,
            "rotation": -5
          },
          {
            "x": 453,
            "y": 330,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreihjdn2dvjbzhatapg2z7dabbfbuupwmdoboebhukk72lnrbzywyda"
                },
                "mimeType": "image/png",
                "size": 3628
              },
              "aspectRatio": {
                "width": 350,
                "height": 350
              }
            },
            "width": 159,
            "rotation": -194
          },
          {
            "x": 481,
            "y": 1594,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "src": "https://github.com/zzstoatzz/pdsx?tab=readme-ov-file#running-the-mcp-server-locally",
              "$type": "pub.leaflet.blocks.website",
              "title": "GitHub - zzstoatzz/pdsx: cli for atproto record CRUD",
              "description": "cli for atproto record CRUD. Contribute to zzstoatzz/pdsx development by creating an account on GitHub.",
              "previewImage": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreibbynypcdespdbomlwkzb3majhxdvpd2k5y7sfaereqyckaapbp34"
                },
                "mimeType": "image/png",
                "size": 26812
              }
            },
            "width": 723
          },
          {
            "x": 906,
            "y": 1410,
            "$type": "pub.leaflet.pages.canvas#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreihjdn2dvjbzhatapg2z7dabbfbuupwmdoboebhukk72lnrbzywyda"
                },
                "mimeType": "image/png",
                "size": 3628
              },
              "aspectRatio": {
                "width": 350,
                "height": 350
              }
            },
            "width": 212,
            "rotation": 153
          }
        ]
      }
    ]
  },
  "description": "github.com/zzstoatzz/plyr.fm",
  "publishedAt": "2025-12-08T08:46:31.781Z"
}