{
  "path": "/3memw5gdbok2x",
  "site": "at://did:plc:3i6uzuatdyk7rwfkrybynf5j/site.standard.publication/3m72xt2lank2r",
  "tags": [],
  "$type": "site.standard.document",
  "title": "How I Came Up with Margin",
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "id": "019c4f8c-879d-7993-8876-3a6746619de2",
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreicuy7mhk6mvxjvixmw7z2fhlk463rxvycyua6qezpxelhsvvvyq2q"
                },
                "mimeType": "image/png",
                "size": 265951
              },
              "aspectRatio": {
                "width": 3000,
                "height": 1000
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "Introduction"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "A couple of months ago, I had an idea: what if I built my own AT Protocol app?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "I was browsing atproto app directories and thought: what if I made something like Hypothes.is, but more social and feature-rich?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "That idea became Margin."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "v0.1"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "The initial design focused on annotating, highlighting, bookmarking, and collecting content."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "I liked the concept, so I started building it."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Once the app was fairly usable, I announced it, and the word spread fast. People were excited about a new AT Protocol app, which gave me a huge motivation boost."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.bskyPost",
              "postRef": {
                "cid": "bafyreifhkjwvujg2huslbfgghddxrembpewxedc3wro7avcoa344fqvqze",
                "uri": "at://did:plc:rjqn3agdb74cszhqcpii4sne/app.bsky.feed.post/3mbm4g2usyc2o"
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "A few days later, I started invite-only pre-testing. Features were tested, bugs were found, and eventually, The first version of Margin was released."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "Browser Extension"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "With support from the community, I was able to fund a Chrome Developer account and started working on the Margin browser extension."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "It began as a simple, raw extension with no framework, but later we migrated to wxt.dev to make it more modular and maintainable."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.bskyPost",
              "postRef": {
                "cid": "bafyreicn6fgnkbqreu37e7ravlox6h7ntxixwqatfsfs7evjhlxlhrexeq",
                "uri": "at://did:plc:rjqn3agdb74cszhqcpii4sne/app.bsky.feed.post/3mdsdaa7b5k2x"
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "The AT Protocol has been really fun to work with, and interoperability with Semble showed how powerful it can be."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "facets": [],
              "plaintext": "Conclusion"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "That’s how Margin came to life, through feedback, feature requests, and community support."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "I’m excited to see where Margin goes next."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 83,
                    "byteStart": 61
                  },
                  "features": [
                    {
                      "uri": "https://ko-fi.com/scan",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "If you want to support development, you can donate on Ko-Fi: https://ko-fi.com/scan"
            }
          },
          {
            "$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": ""
            }
          }
        ]
      }
    ]
  },
  "publishedAt": "2026-02-12T02:12:50.998Z"
}