{
"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"
}