{
  "path": "/3mg6txeiqi22k",
  "site": "at://did:plc:xbtmt2zjwlrfegqvch7fboei/site.standard.publication/3lxksvuhk3s2j",
  "tags": [
    "zig",
    "atproto"
  ],
  "$type": "site.standard.document",
  "title": "reducing my compute spend",
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "id": "019cb565-0001-7dd8-b8dc-862a237f2fd2",
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "src": "https://coral.waow.tech/",
              "$type": "pub.leaflet.blocks.website",
              "title": "coral",
              "description": "real-time entity visualization powered by jetstream",
              "previewImage": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreiht3bmvu2c2klkq3kxhkts3qhf3tppotofdw3udm3fw355fhluifi"
                },
                "mimeType": "image/png",
                "size": 33561
              }
            }
          },
          {
            "$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": "coral ^ is my fun \"world zeitgeist\" tracker (according to bsky) that notably does not depend on insider trading or facilitate gambling on the lives of humans (🫵 polymarket/kalshi)"
            }
          },
          {
            "$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": 76,
                    "byteStart": 66
                  },
                  "features": [
                    {
                      "did": "did:plc:oisofpd7lj26yvgiivf3lxsi",
                      "$type": "pub.leaflet.richtext.facet#didMention"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 86,
                    "byteStart": 79
                  },
                  "features": [
                    {
                      "uri": "https://hailey.at/posts/3mcy5b5gfi222",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 118,
                    "byteStart": 103
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#italic"
                    },
                    {
                      "uri": "https://public.api.bsky.app/xrpc/app.bsky.unspecced.getTrendingTopics",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "while building this several weeks ago, i was following along with @hailey.at's article on how bsky pbc Trending Topics were implemented, which is basically:"
            }
          },
          {
            "$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": [],
                    "plaintext": "stream bsky posts from the firehose"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 6,
                          "byteStart": 3
                        },
                        "features": [
                          {
                            "uri": "https://en.wikipedia.org/wiki/Named-entity_recognition",
                            "$type": "pub.leaflet.richtext.facet#link"
                          }
                        ]
                      }
                    ],
                    "plaintext": "do NER on the posts (entity recognition)"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "track baselines of entities"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "use LLM to de-dupe / eval \"trending above baseline\" entities"
                  },
                  "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.text",
              "facets": [],
              "plaintext": "i started with just the NER part, no LLM aggregation, but then later added a lil periodic background process where claude haiku would:"
            }
          },
          {
            "$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": [],
                    "plaintext": "group some entities into topics over a recent time-bucket"
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreidepydaix476athf57x6sbg74ldzm7euug43r4g3qsioxdckzoiq4"
                },
                "mimeType": "image/png",
                "size": 64605
              },
              "aspectRatio": {
                "width": 604,
                "height": 604
              }
            }
          },
          {
            "$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.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "literally write a haiku about world zeitgeist"
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreifpez2ygepsnamm7v2pko2wrecfuljbcffl2nays5sd37kzao6ta4"
                },
                "mimeType": "image/png",
                "size": 22986
              },
              "aspectRatio": {
                "width": 536,
                "height": 222
              }
            }
          },
          {
            "$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 it generally has worked great! but..."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "python is wasteful af"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 41,
                    "byteStart": 36
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 56,
                    "byteStart": 51
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 63,
                    "byteStart": 58
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    },
                    {
                      "uri": "https://thinc.ai/",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 82,
                    "byteStart": 78
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    },
                    {
                      "uri": "https://github.com/flame/blis",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 138,
                    "byteStart": 134
                  },
                  "features": [
                    {
                      "uri": "https://spacy.io/models/en",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 152,
                    "byteStart": 138
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    },
                    {
                      "uri": "https://spacy.io/models/en",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 158,
                    "byteStart": 152
                  },
                  "features": [
                    {
                      "uri": "https://spacy.io/models/en",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "to do all the NER'ding of entities, spaCy pulls in numpy, thinc (ML backend), blis (BLAS bindings), and many transitive dependencies. the en_core_web_sm model itself is a ~12 MB wheel. running NER on every firehose post (apparently!) required a perf-class CPU on fly.io and 2 GB RAM to keep up... and it still only managed ~40 msg/s bc of all the memory overhead inherent to a python runtime."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "fast-forward to today.... the python service now only runs the LLM curator (claude haiku curating entity clusters into named groups every 5 minutes). that's one HTTP fetch + one API call per cycle, so it runs on the smallest fly.io VM... and entity throughput is higher!"
            }
          },
          {
            "$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": "how?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "src": "https://tangled.org/zzstoatzz.io/spacez/",
              "$type": "pub.leaflet.blocks.website",
              "title": "zzstoatzz.io/spacez",
              "description": "A repository on Tangled",
              "previewImage": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreihkb6lt5vjmjf5g7bda3oeqwgqlm5ejswfsiuajb3tlurfpbtzx4u"
                },
                "mimeType": "image/png",
                "size": 18143
              }
            }
          },
          {
            "$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": "this ^ which implements the NER part of spaCy, but all in zig."
            }
          },
          {
            "$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": "yes, i have a bit of a zig problem as of late (as in, obsession)"
            }
          },
          {
            "$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": 10,
                    "byteStart": 5
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 208,
                    "byteStart": 204
                  },
                  "features": [
                    {
                      "uri": "https://spacy.io/api/entityrecognizer",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 224,
                    "byteStart": 208
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    },
                    {
                      "uri": "https://spacy.io/api/entityrecognizer",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 247,
                    "byteStart": 238
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "from spaCy's full NLP framework (tokenizer, POS tagger, dependency parser, lemmatizer, text classifier, co-reference resolver, entity linker, matchers, knowledge bases), coral used exactly one component: the EntityRecognizer. before, the bridge.py had quite literally disabled every other pipeline on startup, adding overhead."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 6,
                    "byteStart": 0
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 85,
                    "byteStart": 71
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "spacez re-implements only the two things needed for NER inference with en_core_web_sm weights:"
            }
          },
          {
            "$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": [],
                    "plaintext": "the tokenizer (prefix/suffix/infix rules matching spaCy's training tokenization)"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 24,
                          "byteStart": 15
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#code"
                          }
                        ]
                      }
                    ],
                    "plaintext": "the NER model (HashEmbed → CNN → transition-based parser)"
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 35,
                    "byteStart": 29
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 67,
                    "byteStart": 53
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "the weights are the same — spacez loads the actual en_core_web_sm parameters, just from a single binary blob (~6 MB) embedded at compile time instead of a python wheel."
            }
          },
          {
            "$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": [
                {
                  "index": {
                    "byteEnd": 325,
                    "byteStart": 312
                  },
                  "features": [
                    {
                      "uri": "https://tangled.org/zzstoatzz.io/bot/",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "i am not an expert in NLP and so practically speaking i outsource a meaningful portion of my understanding of details of these tools to claude, which could be (and someday will be) a whole post (tldr there are higher-level objectives i make coral in service of, like having a trending topics API for the sake of other systems)."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": ""
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 92,
                    "byteStart": 88
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 145,
                    "byteStart": 140
                  },
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ]
                }
              ],
              "plaintext": "so before spacez, i was reading the firehose in python, running NER in python, and then POSTing the entity to the zig backend, just because spaCy was directly available to me in python, but replacing the python bridge with spacez running inside the zig backend collapsed that entire pipeline into a single in-process call!"
            }
          },
          {
            "$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": "numbers"
            }
          },
          {
            "$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": 10,
                          "byteStart": 0
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ]
                      }
                    ],
                    "plaintext": "throughput: ~40 msg/s → ~70 msg/s (bc of less mem overhead)"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 16,
                          "byteStart": 0
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ]
                      }
                    ],
                    "plaintext": "VM spec (fly.io): perf 1cpu / 2 GB → shared-cpu-1x / 256 MB"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 14,
                          "byteStart": 0
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ]
                      }
                    ],
                    "plaintext": "estimated cost: ~$40/mo → ~$5/mo"
                  },
                  "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": "bridge code: 802 lines python → 273 lines zig (in-process)"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "index": {
                          "byteEnd": 18,
                          "byteStart": 0
                        },
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ]
                      }
                    ],
                    "plaintext": "serialization hops: "
                  },
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "facets": [
                          {
                            "index": {
                              "byteEnd": 19,
                              "byteStart": 9
                            },
                            "features": [
                              {
                                "$type": "pub.leaflet.richtext.facet#code"
                              }
                            ]
                          },
                          {
                            "index": {
                              "byteEnd": 58,
                              "byteStart": 48
                            },
                            "features": [
                              {
                                "$type": "pub.leaflet.richtext.facet#code"
                              }
                            ]
                          }
                        ],
                        "plaintext": "from: 3 (json.loads → spaCy → HTTP POST → json.parse)"
                      },
                      "children": []
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "facets": [],
                        "plaintext": "to: 0 (pointer into websocket buffer → NER → graph)"
                      },
                      "children": []
                    }
                  ]
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "in review"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "the zig backend now handles: jetstream consumption, NER, entity graph, websocket broadcasting, and HTTP API in a smol docker image. the python service dropped from \"the most expensive piece of infrastructure\" to a trivially cheap cron job that calls claude."
            }
          },
          {
            "$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": "this is a companion piece to:"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "src": "https://nate.leaflet.pub/3mfg72xdkec2r",
              "$type": "pub.leaflet.blocks.website",
              "title": "increasing my compute spend - n8",
              "description": "via relay and jetstream instances",
              "previewImage": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreigm6xmkej6yek6pcarrjjhjaqlegvsx3hzdza477q3dmmb45cz2t4"
                },
                "mimeType": "image/png",
                "size": 17960
              }
            }
          }
        ]
      }
    ]
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreidepydaix476athf57x6sbg74ldzm7euug43r4g3qsioxdckzoiq4"
    },
    "mimeType": "image/png",
    "size": 64605
  },
  "description": "less expensive NERd entities with zig",
  "publishedAt": "2026-03-03T22:46:48.434Z"
}