{
  "path": "/3m7vxq3ktqk2a",
  "site": "at://did:plc:xbtmt2zjwlrfegqvch7fboei/site.standard.publication/3lxksvuhk3s2j",
  "tags": [
    "atproto",
    "quickslice",
    "bufo"
  ],
  "$type": "site.standard.document",
  "title": "quicksliced my status",
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "id": "019b1a37-02e9-7558-ac4c-a7e9923a644d",
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "src": "https://github.com/zzstoatzz/status/commit/3193e82bcf456d5e36f347bf8b5a582cf65e0c70",
              "$type": "pub.leaflet.blocks.website",
              "title": "remove rust implementation artifacts ยท zzstoatzz/status@3193e82",
              "description": "quickslice rewrite replaces the custom rust backend.  ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code)  Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
              "previewImage": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreicchildxqg36eaxpj5j3d5jlucwwrgun4km2dlz2nkul3telsy3me"
                },
                "mimeType": "image/png",
                "size": 22975
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreihv5fjlmtwpu426n7lb3ucuaxhoisrbonjx5r6cmidbh3uioxy4ee"
                },
                "mimeType": "image/png",
                "size": 18270
              },
              "aspectRatio": {
                "width": 630,
                "height": 222
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 49,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "uri": "https://all-the.bufo.zone/this-will-be-bufos-little-secret.gif",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "(most of this was lockfile / not source code tbh)"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.horizontalRule"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 41,
                    "byteStart": 22
                  },
                  "features": [
                    {
                      "did": "did:plc:rnpkyqnmsw4ipey6eotbdnnf",
                      "$type": "pub.leaflet.richtext.facet#didMention"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 71,
                    "byteStart": 54
                  },
                  "features": [
                    {
                      "uri": "https://github.com/fatfingers23/rusty_statusphere_example_app",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 108,
                    "byteStart": 104
                  },
                  "features": [
                    {
                      "uri": "https://find-bufo.fly.dev/",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "a while ago, i forked @baileytownsend.dev's wonderful rusty statusphere repo and added in a whole lotta bufo so it could serve as any atproto identity's personal status page. thanks bailey :D"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreidpkgyzcnmludouzyrdxlavxtl3gj4w4fmeuasd4zirlcvevavc6e"
                },
                "mimeType": "image/png",
                "size": 20339
              },
              "aspectRatio": {
                "width": 128,
                "height": 128
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 32,
                    "byteStart": 16
                  },
                  "features": [
                    {
                      "did": "did:plc:bcgltzqazw5tb6k2g3ttenbj",
                      "$type": "pub.leaflet.richtext.facet#didMention"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 52,
                    "byteStart": 42
                  },
                  "features": [
                    {
                      "uri": "https://quickslice.slices.network/",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "then, yesterday @chadtmiller.com released quickslice!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.bskyPost",
              "postRef": {
                "cid": "bafyreibffqs2zptnh464ia5m2yha7iq6xf5vk2wnwhcmg6imdm3j2o2sdu",
                "uri": "at://did:plc:bcgltzqazw5tb6k2g3ttenbj/app.bsky.feed.post/3m7t2iwv3g22h"
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "and i thought:"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreiats4mzgcyob66ry6ogsi4epw6yb6xq4gp5mi6wmkslcju4zdkeqy"
                },
                "mimeType": "image/png",
                "size": 15770
              },
              "aspectRatio": {
                "width": 128,
                "height": 128
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.blockquote",
              "facets": [
                {
                  "index": {
                    "byteEnd": 3,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 96,
                    "byteStart": 77
                  },
                  "features": [
                    {
                      "uri": "https://status.zzstoatzz.io",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "hey i should be able to replace the rusty-statusphere-derivative backend for status.zzstoatzz.io with a quickslice instance!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 180,
                    "byteStart": 171
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "i wasn't yet sure how to write/deploy a UI that consumes the quickslice instance, but i had already ran the quickslice server locally and figured out how to configure the /settings more or less:"
            }
          },
          {
            "$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": 31,
                          "byteStart": 14
                        },
                        "features": [
                          {
                            "uri": "https://github.com/zzstoatzz/status/tree/main/lexicons",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "upload my pre-existing lexicons"
                  },
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "facets": [
                          {
                            "index": {
                              "byteEnd": 51,
                              "byteStart": 16
                            },
                            "features": [
                              {
                                "$type": "pub.leaflet.richtext.facet#code"
                              }
                            ]
                          }
                        ],
                        "plaintext": "make a zip like zip -j lexicons.zip lexicons/*.json"
                      },
                      "children": []
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "facets": [],
                        "plaintext": "upload it in Lexicon portion of the settings"
                      },
                      "children": []
                    }
                  ]
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "set a domain authority"
                  },
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "facets": [
                          {
                            "index": {
                              "byteEnd": 12,
                              "byteStart": 0
                            },
                            "features": [
                              {
                                "$type": "pub.leaflet.richtext.facet#code"
                              }
                            ]
                          }
                        ],
                        "plaintext": "io.zzstoatzz"
                      },
                      "children": []
                    }
                  ]
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 49,
                          "byteStart": 31
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#code"
                          }
                        ]
                      }
                    ],
                    "plaintext": "set supported oauth scopes (no transition:generic allowed!)"
                  },
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "facets": [
                          {
                            "index": {
                              "byteEnd": 26,
                              "byteStart": 0
                            },
                            "features": [
                              {
                                "$type": "pub.leaflet.richtext.facet#code"
                              },
                              {
                                "uri": "https://pdsls.dev/at://did:plc:xbtmt2zjwlrfegqvch7fboei/io.zzstoatzz.status.record",
                                "$type": "pub.leaflet.richtext.facet#link"
                              }
                            ]
                          }
                        ],
                        "plaintext": "io.zzstoatzz.status.record"
                      },
                      "children": []
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "facets": [
                          {
                            "index": {
                              "byteEnd": 31,
                              "byteStart": 0
                            },
                            "features": [
                              {
                                "$type": "pub.leaflet.richtext.facet#code"
                              },
                              {
                                "uri": "https://pdsls.dev/at://did:plc:xbtmt2zjwlrfegqvch7fboei/io.zzstoatzz.status.preferences/3m7vo3737wc27",
                                "$type": "pub.leaflet.richtext.facet#link"
                              }
                            ]
                          },
                          {
                            "index": {
                              "byteEnd": 32,
                              "byteStart": 31
                            },
                            "features": [
                              {
                                "uri": "https://pdsls.dev/at://did:plc:xbtmt2zjwlrfegqvch7fboei/io.zzstoatzz.status.preferences/3m7vo3737wc27",
                                "$type": "pub.leaflet.richtext.facet#link"
                              }
                            ]
                          }
                        ],
                        "plaintext": "io.zzstoatzz.status.preferences "
                      },
                      "children": []
                    }
                  ]
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "register an OAuth client"
                  },
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "facets": [
                          {
                            "index": {
                              "byteEnd": 11,
                              "byteStart": 0
                            },
                            "features": [
                              {
                                "$type": "pub.leaflet.richtext.facet#bold"
                              }
                            ]
                          }
                        ],
                        "plaintext": "client name: {anything} (e.g. \"status\")"
                      },
                      "children": []
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "facets": [
                          {
                            "index": {
                              "byteEnd": 12,
                              "byteStart": 0
                            },
                            "features": [
                              {
                                "$type": "pub.leaflet.richtext.facet#bold"
                              }
                            ]
                          }
                        ],
                        "plaintext": "redirect URI (one per line)"
                      },
                      "children": [
                        {
                          "$type": "pub.leaflet.blocks.unorderedList#listItem",
                          "content": {
                            "$type": "pub.leaflet.blocks.text",
                            "facets": [
                              {
                                "index": {
                                  "byteEnd": 28,
                                  "byteStart": 0
                                },
                                "features": [
                                  {
                                    "uri": "https://status.zzstoatzz.io/",
                                    "$type": "pub.leaflet.richtext.facet#link"
                                  }
                                ]
                              }
                            ],
                            "plaintext": "https://status.zzstoatzz.io/"
                          },
                          "children": []
                        },
                        {
                          "$type": "pub.leaflet.blocks.unorderedList#listItem",
                          "content": {
                            "$type": "pub.leaflet.blocks.text",
                            "facets": [
                              {
                                "index": {
                                  "byteEnd": 22,
                                  "byteStart": 0
                                },
                                "features": [
                                  {
                                    "uri": "http://localhost:8000/",
                                    "$type": "pub.leaflet.richtext.facet#link"
                                  }
                                ]
                              }
                            ],
                            "plaintext": "http://localhost:8000/ (for local dev)"
                          },
                          "children": []
                        }
                      ]
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "facets": [
                          {
                            "index": {
                              "byteEnd": 5,
                              "byteStart": 0
                            },
                            "features": [
                              {
                                "$type": "pub.leaflet.richtext.facet#bold"
                              }
                            ]
                          }
                        ],
                        "plaintext": "scope (space delimited)"
                      },
                      "children": [
                        {
                          "$type": "pub.leaflet.blocks.unorderedList#listItem",
                          "content": {
                            "$type": "pub.leaflet.blocks.text",
                            "facets": [
                              {
                                "index": {
                                  "byteEnd": 7,
                                  "byteStart": 0
                                },
                                "features": [
                                  {
                                    "$type": "pub.leaflet.richtext.facet#code"
                                  }
                                ]
                              }
                            ],
                            "plaintext": "atproto"
                          },
                          "children": []
                        },
                        {
                          "$type": "pub.leaflet.blocks.unorderedList#listItem",
                          "content": {
                            "$type": "pub.leaflet.blocks.text",
                            "facets": [
                              {
                                "index": {
                                  "byteEnd": 31,
                                  "byteStart": 0
                                },
                                "features": [
                                  {
                                    "$type": "pub.leaflet.richtext.facet#code"
                                  }
                                ]
                              }
                            ],
                            "plaintext": "repo:io.zzstoatzz.status.record"
                          },
                          "children": []
                        },
                        {
                          "$type": "pub.leaflet.blocks.unorderedList#listItem",
                          "content": {
                            "$type": "pub.leaflet.blocks.text",
                            "facets": [
                              {
                                "index": {
                                  "byteEnd": 36,
                                  "byteStart": 0
                                },
                                "features": [
                                  {
                                    "$type": "pub.leaflet.richtext.facet#code"
                                  }
                                ]
                              }
                            ],
                            "plaintext": "repo:io.zzstoatzz.status.preferences"
                          },
                          "children": []
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.blockquote",
              "facets": [],
              "plaintext": "note previously, preferences were persisted in the sqlite db that my rust backend talked to so font/accent preferences stuck across devices, but during this refactor i realized i could just store them as a record! not sure what the meta for \"hey i wanna store just a little somethin non-standard in the quickslice db\" is quite yet"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "the config looks like this in the admin panel of my quickslice instance"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreicylwbzyaxbhxbo7n5groley52cu7k3d3ogd5lmj6h6qfv6zll3ju"
                },
                "mimeType": "image/png",
                "size": 75955
              },
              "aspectRatio": {
                "width": 660,
                "height": 714
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreifpbydovmba4c6koxihbws5pirp6sv7hvzanxk3o2pjsmbck5lxvy"
                },
                "mimeType": "image/png",
                "size": 41438
              },
              "aspectRatio": {
                "width": 659,
                "height": 366
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 3,
              "facets": [],
              "plaintext": "backend secrets and config"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "the quickslice instance needed two secrets for OAuth to work:"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "language": "bash",
              "plaintext": "fly secrets set SECRET_KEY_BASE=\"$(openssl rand -base64 64 | tr -d '\\n')\"\nfly secrets set OAUTH_SIGNING_KEY=\"$(goat key generate -t p256 | tail -1)\""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 32,
                    "byteStart": 15
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 80,
                    "byteStart": 79
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "(i think?) the OAUTH_SIGNING_KEY should be just the multibase key (starts with z), not the full output from goat... that's what worked for me anyways, lmk if i am wrong about this!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 3,
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 25,
                    "byteStart": 8
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 55,
                    "byteStart": 43
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 108,
                    "byteStart": 102
                  },
                  "features": [
                    {
                      "uri": "https://github.com/zzstoatzz/status/blob/main/fly.toml#L16",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "without EXTERNAL_BASE_URL, quickslice uses 0.0.0.0:8080 in its OAuth client metadata, so go ahead and set it to your public URL:"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "language": "toml",
              "plaintext": "[env]\n  EXTERNAL_BASE_URL = 'https://your-app.fly.dev'"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "i used this thread to figure this out"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.bskyPost",
              "postRef": {
                "cid": "bafyreifuzdiwuvviijx3qi5voi5gjhl44wnzdnj64d7rhv33smnsvf6hhe",
                "uri": "at://did:plc:sfjxpxxyvewb2zlxwoz2vduw/app.bsky.feed.post/3m7t3zx3xxc2r"
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 70,
                    "byteStart": 41
                  },
                  "features": [
                    {
                      "uri": "https://github.com/bigmoves/quickslice/commit/0b2d54a3cf2c0329e6633e40845a576940666496",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 73,
                    "byteStart": 70
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    },
                    {
                      "uri": "https://github.com/bigmoves/quickslice/commit/0b2d54a3cf2c0329e6633e40845a576940666496",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 97,
                    "byteStart": 73
                  },
                  "features": [
                    {
                      "uri": "https://github.com/bigmoves/quickslice/commit/0b2d54a3cf2c0329e6633e40845a576940666496",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "so then after a smol bug encounter where quickslice was not returning sub from the token endpoint (causing login to redirect back to a logged out state), i rather expediently had a quickslice instance that could (very quickly!) backfill all the status records! excellent!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "now i just needed to rewrite (or have claude rewrite tbh) the UI to consume my new backend in a box!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "the UI!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "this part turned out to be easier than i thought!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "your lexicons are the API! after uploading the lexicons, you can just write GraphQL queries from your front-end to get your data!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "language": "javascript",
              "plaintext": "const response = await fetch(`https://your-quickslice.com/api/graphql`, {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify({\n    query: `\n      query GetStatuses($did: String!) {\n        ioZzstoatzzStatusRecords(\n          where: { did: { eq: $did } }\n          orderBy: { createdAt: DESC }\n          first: 50\n        ) {\n          nodes { uri did actorHandle emoji text createdAt }\n        }\n      }\n    `,\n    variables: { did }\n  })\n});\n"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "i just told claude to broadly replace the calls to my old rust server endpoints in the UI with graphQL calls.... and then i went in the admin panel and clicked \"Backfill\" (once or twice, since it seemed it didn't totally backfill the first time? not sure)."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 25,
                    "byteStart": 5
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "then quickslice-client-js handles the OAuth flow in the browser:"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "language": "javascript",
              "plaintext": "const client = await QuicksliceClient.create({\n  server: 'https://your-quickslice.com',      // your quickslice instance\n  clientId: 'client_xxx',                     // from quickslice admin UI\n  redirectUri: window.location.origin + '/',  // where OAuth redirects back\n});\n\n// start login\nawait client.signIn(handle);\n\n// after redirect, client.agent is authenticated\nconst { data } = await client.agent.getProfile({ actor: client.agent.session.did });"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 12,
                    "byteStart": 4
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "the clientId comes from registering an OAuth client in the quickslice admin UI. the redirect URI should match what you registered."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 105,
                    "byteStart": 89
                  },
                  "features": [
                    {
                      "uri": "https://pages.cloudflare.com/",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 170,
                    "byteStart": 164
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "since quickslice serves its own admin UI at the root, we host our frontend separately on cloudflare pages. the frontend is vanilla JS - no framework, just a single app.js file (i do backend by trade! shh)"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.blockquote",
              "facets": [],
              "plaintext": "this is what worked for me as i tried to figure this out! if you have suggestions for improvements, please leave a comment here!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 91,
                    "byteStart": 72
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "once i had my new backend and cloudflare pages, i switched my CNAME for status.zzstoatzz.io to point at the new cloudflare page."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "and i deleted my old rust/fly backend and bob was then my uncle!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "the whole thing!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "language": "perl",
              "plaintext": "โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”\nโ”‚                    cloudflare pages                     โ”‚\nโ”‚                  status.zzstoatzz.io                    โ”‚\nโ”‚                                                         โ”‚\nโ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚\nโ”‚   โ”‚  index.html โ”‚  โ”‚   app.js    โ”‚  โ”‚  styles.css โ”‚     โ”‚\nโ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚\nโ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n                           โ”‚\n                           โ”‚ GraphQL + OAuth\n                           โ–ผ\nโ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”\nโ”‚                       fly.io                            โ”‚\nโ”‚            zzstoatzz-quickslice-status.fly.dev          โ”‚\nโ”‚                                                         โ”‚\nโ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚\nโ”‚   โ”‚                  quickslice                     โ”‚   โ”‚\nโ”‚   โ”‚  โ€ข OAuth server (PKCE + DPoP)                   โ”‚   โ”‚\nโ”‚   โ”‚  โ€ข GraphQL API (auto-generated from lexicons)   โ”‚   โ”‚\nโ”‚   โ”‚  โ€ข Jetstream consumer                           โ”‚   โ”‚\nโ”‚   โ”‚  โ€ข SQLite database                              โ”‚   โ”‚\nโ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚\nโ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n                           โ”‚\n                           โ”‚ Jetstream\n                           โ–ผ\nโ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”\nโ”‚                    AT Protocol                          โ”‚\nโ”‚           (bluesky PDS, jetstream firehose)             โ”‚\nโ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "get sliced!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreih3dc25aufcwksjj3hqqgfyiwyzivnuyhfnzeyhbccgs6spwrqzmq"
                },
                "mimeType": "image/gif",
                "size": 103877
              },
              "aspectRatio": {
                "width": 128,
                "height": 128
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "links!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "src": "https://status.zzstoatzz.io/feed",
                    "$type": "pub.leaflet.blocks.website",
                    "title": "status",
                    "description": "",
                    "previewImage": {
                      "$type": "blob",
                      "ref": {
                        "$link": "bafkreihva2pftuo5exkhtjkzbqzhadrwcimpfvlighthgphb5jyqkhap3i"
                      },
                      "mimeType": "image/png",
                      "size": 2069
                    }
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "src": "https://github.com/zzstoatzz/status",
                    "$type": "pub.leaflet.blocks.website",
                    "title": "GitHub - zzstoatzz/status: slack status, without the slack",
                    "description": "slack status, without the slack. Contribute to zzstoatzz/status development by creating an account on GitHub.",
                    "previewImage": {
                      "$type": "blob",
                      "ref": {
                        "$link": "bafkreie56evu3uvgvft4tqdglkcctmgj6l2u55qhycveok4egfftgkubam"
                      },
                      "mimeType": "image/png",
                      "size": 24885
                    }
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 10,
                          "byteStart": 0
                        },
                        "features": [
                          {
                            "uri": "https://github.com/bigmoves/quickslice",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "quickslice - the framework"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 17,
                          "byteStart": 0
                        },
                        "features": [
                          {
                            "uri": "https://atproto.com/specs/oauth",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "AT protocol OAuth - the spec"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 20,
                          "byteStart": 0
                        },
                        "features": [
                          {
                            "uri": "https://github.com/bigmoves/quickslice/tree/main/quickslice-client-js",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "quickslice-client-js - frontend OAuth helper"
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.horizontalRule"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "thanks chad for reviewing a draft of this post!"
            }
          }
        ]
      }
    ]
  },
  "description": "look ma, no backend",
  "publishedAt": "2025-12-14T01:29:13.825Z"
}