{
  "path": "/3mjoiolfzbk2l",
  "site": "at://did:plc:ephkzpinhaqcabtkugtbzrwu/site.standard.publication/3lxehdht2rs24",
  "tags": [
    "atproto",
    "code",
    "godot",
    "experiment"
  ],
  "$type": "site.standard.document",
  "title": "Slay the Spire 2: Atmosphere edition",
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "id": "019d9a2a-4e60-7eec-94a1-7f7e2c431c22",
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 37,
                    "byteStart": 32
                  },
                  "features": [
                    {
                      "uri": "https://indieweb.org/PESOS",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "Lately I've been thinking about PESOS, the Indieweb's approach to owning your own data on platforms that don't support it. \"Publish Elsewhere, Syndicate to your Own Site.\""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 52,
                    "byteStart": 44
                  },
                  "features": [
                    {
                      "uri": "https://bsky.app/profile/byjp.me/post/3mj4ozljscc27",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "I did a great job last week of not building one idea that snuck into my brain, but another crept in and I succumbed…"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "alt": "Steam's header image for Slay the Spire 2; various characters brandishing their weapons and looking up at the fiery spire towering into the sky.",
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreicb3e32tmpi4nqdmzkhgdiqefbbmqt2ifbwbosbc3gbht5ztjulma"
                },
                "mimeType": "image/webp",
                "size": 50764
              },
              "aspectRatio": {
                "width": 460,
                "height": 215
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 24,
                    "byteStart": 8
                  },
                  "features": [
                    {
                      "uri": "https://store.steampowered.com/app/2868840/",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 42,
                    "byteStart": 30
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 94,
                    "byteStart": 81
                  },
                  "features": [
                    {
                      "did": "did:plc:lmdomvajys5p6tr7ay77uvtz",
                      "$type": "pub.leaflet.richtext.facet#didMention"
                    }
                  ]
                }
              ],
              "plaintext": "What if Slay the Spire 2, the outrageously fun deck-builder/rogue-like game from @megacrit.com, published the details of your games (\"runs\") to your Atmosphere account?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "\"We can just do things, together\" is a common refrain among atproto developers (as we call ourselves), and this experiment definitely stood on the shoulders of giants:"
            }
          },
          {
            "$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": [
                      {
                        "index": {
                          "byteEnd": 38,
                          "byteStart": 22
                        },
                        "features": [
                          {
                            "did": "did:plc:cww47tvoc6qf764zcpqz7k27",
                            "$type": "pub.leaflet.richtext.facet#didMention"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 65,
                          "byteStart": 43
                        },
                        "features": [
                          {
                            "uri": "https://github.com/Alchyr/ModTemplate-StS2/wiki",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "Slay the Spire 2 uses @godotengine.org, so modding is pretty easy and lots of folks have talked about how"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 37,
                          "byteStart": 19
                        },
                        "features": [
                          {
                            "uri": "https://atmosphereaccount.com/",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 57,
                          "byteStart": 50
                        },
                        "features": [
                          {
                            "uri": "https://bsky.app/profile/byjp.me",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 72,
                          "byteStart": 65
                        },
                        "features": [
                          {
                            "uri": "https://tangled.org/did:plc:ephkzpinhaqcabtkugtbzrwu",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 93,
                          "byteStart": 86
                        },
                        "features": [
                          {
                            "uri": "https://leaflet.pub/p/byjp.me",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 124,
                          "byteStart": 115
                        },
                        "features": [
                          {
                            "uri": "https://portal.eurosky.tech/#apps",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 153,
                          "byteStart": 141
                        },
                        "features": [
                          {
                            "did": "did:plc:ewvi7nxzyoun6zhxrhs64oiz",
                            "$type": "pub.leaflet.richtext.facet#didMention"
                          }
                        ]
                      }
                    ],
                    "plaintext": "Publishing to your Atmosphere account (where your Bluesky posts, Tangled source code, Leaflet posts like this, and much more lives) is easy; @atproto.com has great documentation"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 28,
                          "byteStart": 14
                        },
                        "features": [
                          {
                            "did": "did:plc:4mrwcmxk266itsdn33leqljq",
                            "$type": "pub.leaflet.richtext.facet#didMention"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 60,
                          "byteStart": 46
                        },
                        "features": [
                          {
                            "uri": "https://cartridge.dev/game/slay-the-spire-ii",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "The excellent @cartridge.dev exists as a deep games database with a data model I can hook right into"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 30,
                          "byteStart": 22
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#italic"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 35,
                          "byteStart": 31
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#italic"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 76,
                          "byteStart": 65
                        },
                        "features": [
                          {
                            "did": "did:plc:7puq73yz2hkvbcpdhnsze2qw",
                            "$type": "pub.leaflet.richtext.facet#didMention"
                          }
                        ]
                      }
                    ],
                    "plaintext": "You can host websites directly from your Atmosphere account with @wisp.place"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 123,
                          "byteStart": 108
                        },
                        "features": [
                          {
                            "did": "did:plc:lulmyldiq4sb2ikags5sfb25",
                            "$type": "pub.leaflet.richtext.facet#didMention"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 135,
                          "byteStart": 126
                        },
                        "features": [
                          {
                            "uri": "https://slingshot.microcosm.blue/",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "And  looking up any StS2 runs an account has posted, no matter where their account lives, is easy thanks to @microcosm.blue's Slingshot"
                  }
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "alt": "An in-game screenshot of a new dialog: the atproto-tracker \"Publishing your run data to your Atmosphere account: @byjp.me\"",
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreieybbywn32wczvdhplpg622n66ptya35z2zjymzyoxre24wg3ef64"
                },
                "mimeType": "image/webp",
                "size": 105486
              },
              "fullBleed": true,
              "aspectRatio": {
                "width": 3420,
                "height": 1654
              }
            },
            "alignment": "lex:pub.leaflet.pages.linearDocument#textAlignJustify"
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 39,
                    "byteStart": 34
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                }
              ],
              "plaintext": "So I had a crack at it! I learned a lot about developing game mods and writing C# from Claude (first time with both for me) but I've ended up in a place I'm very happy with as an experiment."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.orderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.orderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 69,
                          "byteStart": 47
                        },
                        "features": [
                          {
                            "uri": "https://sts2.byjp.me/",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 88,
                          "byteStart": 79
                        },
                        "features": [
                          {
                            "uri": "https://github.com/jphastings/slay-the-spire-ii-atproto#readme",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "🧑‍💻 Download the mod or the installer (installers on the site, details on Github)"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.orderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 24,
                          "byteStart": 12
                        },
                        "features": [
                          {
                            "uri": "https://bsky.app/settings/app-passwords",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "🔑 Get an app password & configure the installer/your config.json"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.orderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 9,
                          "byteStart": 5
                        },
                        "features": [
                          {
                            "uri": "https://steam://launch/2868840/",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "🎮 Play!"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.orderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 18,
                          "byteStart": 5
                        },
                        "features": [
                          {
                            "uri": "https://sts2.byjp.me",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      },
                      {
                        "index": {
                          "byteEnd": 57,
                          "byteStart": 44
                        },
                        "features": [
                          {
                            "uri": "https://sts2.byjp.me/byjp.me/3miqtfvlga2ua",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "🤩 Visit my site to see your run (you can see mine here)"
                  }
                }
              ],
              "startIndex": 1
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 41,
                    "byteStart": 37
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 92,
                    "byteStart": 85
                  },
                  "features": [
                    {
                      "uri": "https://bsky.social",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 103,
                    "byteStart": 96
                  },
                  "features": [
                    {
                      "uri": "https://eurosky.social",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "That's it! The data is yours, and in your Atmosphere account. If you move providers (Bluesky -> Eurosky anyone?) it'll move with you and Just Work™."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 88,
                    "byteStart": 78
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 134,
                    "byteStart": 121
                  },
                  "features": [
                    {
                      "did": "did:plc:lmdomvajys5p6tr7ay77uvtz",
                      "$type": "pub.leaflet.richtext.facet#didMention"
                    }
                  ]
                }
              ],
              "plaintext": "You can even build your own site that's better than mine, and it'll work with everyone's StS2 runs, automagically. Hell, @megacrit.com could build an official one & it'd be instantly compatible!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "The joy of building in the Atmosphere ☺️ What do you think? What would you add?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "alt": "A screenshot of the website showing a run of mine; Act 3, floor 39 — showing all the cards in my deck and relics I've collected.",
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreihqje6jlxajzdavajt7js7kpx3ucf7t35sl2co7h367svqujuuiuq"
                },
                "mimeType": "image/webp",
                "size": 130362
              },
              "fullBleed": true,
              "aspectRatio": {
                "width": 2580,
                "height": 1804
              }
            },
            "alignment": "lex:pub.leaflet.pages.linearDocument#textAlignJustify"
          }
        ]
      }
    ]
  },
  "bskyPostRef": {
    "cid": "bafyreibq32v7oblb36bnvbal5d6nytpdp6x45n35wiavd43xvrho4zrghe",
    "uri": "at://did:plc:ephkzpinhaqcabtkugtbzrwu/app.bsky.feed.post/3mjoioqry7c2l",
    "commit": {
      "cid": "bafyreiadun5vy22r5tlsojxr5t6jo4pbslvviafqbgjknq46tape265oxe",
      "rev": "3mjoioqwiqe2h"
    },
    "validationStatus": "valid"
  },
  "description": "I made a mod for Slay the Spire 2 that lets you publish your play data to your Atmosphere account & a website to show them off!",
  "publishedAt": "2026-04-17T08:23:08.057Z"
}