If This Then AT://

Powerful automation platform that connects AT Protocol events to webhooks and custom actions.

โš ๏ธ Alpha Software: This project is in early development and functionality is invitation-only. We rely on circuit-breakers to disable blueprints and features that may be unstable. Please don't use this for anything mission critical.

๐ŸŽฏ Community Prototype Directory

Discover ready-to-use blueprint templates created by the community. Prototypes are pre-configured automation templates with customizable placeholders - perfect for getting started quickly without building from scratch.

Browse Prototype Directory

Get Started

Sign in with your AT Protocol handle to start creating blueprints.

Features

๐Ÿ“˜ Blueprints

Create Blueprints that define AT Protocol automations. They consist of 2 or more nodes that take an input and perform an action.

๐Ÿš€ Entry Nodes

Create blueprints triggered by:

  • Firehose events
  • Webhooks
  • Zapier actions
  • Cron schedules

๐Ÿ”„ Processing Nodes

Transform data and control flow:

  • transform - Modify data
  • condition - Circuit-breakers

๐Ÿ“ค Action Nodes

Execute actions on your data:

  • publish_webhook - Call external services
  • publish_record - Create AT Protocol records

๐Ÿ“‹ Prototype Directory

Browse and use community-shared blueprint templates. Prototypes are reusable templates with customizable placeholders that make it easy to create new automations.

Browse Prototypes โ†’

๐Ÿงช Testing & Monitoring

Perform one-shot blueprint and node evaluations to test your automation workflows. View recent evaluations of your blueprints with detailed execution logs and results.

Example Blueprint

Here's an example blueprint that automatically reposts any Bluesky posts mentioning your website:

Entry

Description: All jetstream created posts that have an embed or at least one link to the base URL of my website.

Node Type: jetstream_entry

Configuration:

{
  "collection": ["app.bsky.feed.post"]
}

Payload:

{
  "and": [
    {"==": [{"val": ["kind"]}, "commit"]},
    {"==": [{"val": ["commit", "operation"]}, "create"]},
    {
      "or": [
        {
          "and": [
            {
              "==": [
                {"val": ["commit", "record", "embed", "$type"]},
                "app.bsky.embed.external"
              ]
            },
            {
              "starts_with": [
                {"val": ["commit", "record", "embed", "external", "uri"]},
                "https://ifthisthen.at/"
              ]
            }
          ]
        },
        {
          "some": [
            {"val": ["commit", "record", "facets"]},
            {
              "some": [
                {"val": ["features"]},
                {
                  "and": [
                    {
                      "==": [
                        {"val": ["$type"]},
                        "app.bsky.richtext.facet#link"
                      ]
                    },
                    {
                      "starts_with": [
                        {"val": ["uri"]},
                        "https://ifthisthen.at/"
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}
Transform

Description: Create a repost

Node Type: transform

Configuration: n/a

Payload:

{
  "record": {
    "$type": "app.bsky.feed.repost",
    "subject": {
      "cid": {"val": ["commit", "cid"]},
      "uri": {
        "cat": [
          "at://",
          {"val": ["did"]},
          "/app.bsky.feed.post/",
          {"val": ["commit", "rkey"]}
        ]
      }
    },
    "createdAt": {"now": []}
  }
}
Create Record

Description: Publish the record to my repository.

Node Type: publish_record

Configuration: n/a

Payload:

{"val": ["record"]}
Note: This blueprint monitors the Bluesky firehose for posts that either embed your website or mention it in the text, then automatically creates a repost. The transform node constructs a proper repost record with the original post's CID and URI.