how it works

1. Files become blobs

Every file in this site — this page, the stylesheet, the logo, the script — is uploaded to one or more blossom servers. A blob is addressed purely by its SHA-256 hash, so identical content always lands on the same address.

uploaded /index.html  → 3af1...e9
uploaded /style.css   → 7c20...11
uploaded /app.js      → b5d8...4a
uploaded /logo.svg    → 0e6f...c3

2. A manifest ties it together

A single signed nostr event (kind 15128) lists every path and the blob hash it points to. Because it is signed, only the site's owner can update it, and because it is a replaceable event, publishing a new one simply replaces the old.

["path", "/index.html", "3af1...e9"]
["path", "/style.css",  "7c20...11"]
["server", "https://blossom.band"]

3. The gateway serves it

This very server did the following to render the page you are reading:

  1. resolved the npub to a public key
  2. fetched the manifest event from nostr relays
  3. looked up the request path in the manifest
  4. downloaded the matching blob from a blossom server
  5. streamed it back with the right content-type

4. Publish your own

nostr-nsite-server update \
  -sec <nsec|bunker> \
  -s https://blossom.band \
  -r wss://relay.example \
  site/

Then serve it anywhere with nostr-nsite-server serve -npub <npub> -relay wss://relay.example.