{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreiasgnjg55qaym2fv3tyx4eury637gu2bbbikms33vljmehtvm5cuy",
    "commit": {
      "cid": "bafyreifanoany2fyhhvu32i5uiv7jluety5tk5nltzyaf4dqemlzrcdwlm",
      "rev": "3moavqvzyzc2n"
    },
    "uri": "at://did:plc:dgtaz4vldacvqhvvmdvoc4ad/app.bsky.feed.post/3moavqvvlb22l",
    "validationStatus": "valid"
  },
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "It's been a while since the last log, but I haven't been idle. Haven't had as much time as I'd like to work on this project - having a full time job and all that - but much of it is at what I consider to be done™. What I mean by that is that these features are ok for me to use and polish as I encounter rough edges"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "plaintext": "Status"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Payment infrastructure"
                      }
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Authentication"
                      }
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Queues, Schedules etc"
                      }
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Api Key management"
                      }
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ MCP server"
                      }
                    }
                  ],
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "Common"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Domain verification"
                      }
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Multiple providers (smtp, resend, sendgrid, mailgun, ses)"
                      }
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ API usage"
                      }
                    }
                  ],
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "Relay"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Captcha verification"
                      }
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Webhooks"
                      }
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Redirection"
                      }
                    }
                  ],
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "Form"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "children": [
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ List management"
                      }
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Campaign management (i.e. bulk email sending)"
                      }
                    },
                    {
                      "$type": "pub.leaflet.blocks.unorderedList#listItem",
                      "content": {
                        "$type": "pub.leaflet.blocks.text",
                        "plaintext": "✅ Api Usage"
                      }
                    }
                  ],
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "News"
                  }
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "So as you can see there's a lot of stuff here; I'm still figuring out the last steps (i.e. how much I want to bother automating deploying new versions to production) but all in all I think that's enough for a product."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "plaintext": "Why am I doing this, again?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Because I needed this tool for some of my other projects (including my newsletter). There's lots of projects where I just need to have a way to send emails or to have subscriber lists without needing to have a dedicated database just for that (think a SSG)"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "plaintext": "What's next?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Short answer: testing, testing & more testing."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Long answer:"
            }
          },
          {
            "$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",
                    "plaintext": "figuring out how to deploy this app"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "figuring out how to automate the process as much as I want to"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "testing it on my own projects"
                  }
                }
              ]
            }
          }
        ],
        "id": "019ec659-1cce-7555-8684-8d616cf07525"
      }
    ]
  },
  "description": "",
  "path": "/3moavqoiq5s24",
  "publishedAt": "2026-06-14T13:45:41.845Z",
  "site": "at://did:plc:dgtaz4vldacvqhvvmdvoc4ad/site.standard.publication/3m7iwa2i6us22",
  "tags": [
    "devlog",
    "facteur"
  ],
  "title": "Facteur EP 2: Status Update"
}