{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreib4yorzoar2dy2gw2ozt5qkupyfbkj7wgvjdo6azs5m2s6b7rw2ki",
    "commit": {
      "cid": "bafyreie3h24zaqd6ujetmd7jlzj6eylxbgwr3gxwiootig4ycbvp5ndx4m",
      "rev": "3mnlhvn4yy42y"
    },
    "uri": "at://did:plc:voaulu4vdmpdwevimf4i6lnj/app.bsky.feed.post/3mnlhvn2rkk2z",
    "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": "Hello! It’s been a while since I’ve posted. I’ve been busy working on my new Social Web client, Mackinac. It’s now been a couple of months since I launched the beta PWA, and it feels like a good time to talk about why I built it and where I hope it goes."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "First, let’s talk about the name, Mackinac (pronounced MACK-in-naw). For those unfamiliar with Michigan (my home state), the Mackinac Bridge is a five-mile-long bridge that connects the Upper and Lower Peninsulas. It makes traveling between them much easier."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "My grandma used to tell me stories about how, before the bridge was built, people had to take ferries across the Straits of Mackinac. Traveling between the two peninsulas was a bit more of a pain back then."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "During a trip to the Upper Peninsula last year, I found myself thinking about what an app designed around managing accounts across multiple protocols might look like. I got the idea for the name while crossing the bridge. The Mackinac Bridge connects Michigan’s two peninsulas, and I liked the idea of building something that could help connect different parts of the Social Web in a similar way."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "I was interested in building something around bridging and was somewhat inspired by the work A New Social has been doing with Bridgy Fed."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "The issue I saw, though, was that bridged accounts often felt like a hack. They were always this weird side thing that existed, but didn’t feel like a core part of the app. I became interested in making bridged accounts feel more native to the platform. I felt the experience could be better."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Mackinac kinda started as an experiment in building a native iOS app. I had never built one before and my background is mostly in web. Native apps have always been an interest of mine."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "After some time building the app, it was clear I was still a bit off from having something I could launch. I was also still trying to get AT Explore to v1, so this was a bit of a side quest. I also knew getting App Store approval would be a bit of a pain. I started working on a PWA (Progressive Web App) because it allowed me to experiment and ship faster without having to deal with the App Store. I officially launched Mackinac as a beta at the end of March."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "I’ve said this in some posts before, but the goal of Mackinac is to connect people across the Social Web no matter what protocol they’re on."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Today, Mackinac supports both AT Protocol and ActivityPub accounts. You can sign in with either a Bluesky account or a Mastodon account and browse profiles, posts, and interactions from both ecosystems. Nostr support is also something I’d like to add in the future."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "I view Mackinac as a Social Web app. I don’t really care what protocol someone is on. If a feature exists somewhere on the Social Web, I think people should be able to take advantage of it regardless of where their account lives."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "I knew when I built this that I wanted bridging to feel more native. This is why one of the first things I prioritized was better integration with Bridgy Fed. I had built an integration in AT Explore, but I really wanted a client with bridging baked in from the start. A few examples of that in Mackinac today:"
            }
          },
          {
            "$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": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ],
                        "index": {
                          "byteEnd": 27,
                          "byteStart": 0
                        }
                      }
                    ],
                    "plaintext": "Bridge switcher on profiles to switch between different versions of a profile across protocols."
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ],
                        "index": {
                          "byteEnd": 41,
                          "byteStart": 0
                        }
                      }
                    ],
                    "plaintext": "Making bridged profiles feel more native. Bridged accounts resolve to their native handle, and a bridge icon indicates that the account originates from another protocol."
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ],
                        "index": {
                          "byteEnd": 14,
                          "byteStart": 0
                        }
                      }
                    ],
                    "plaintext": "Expanded text. If a profile is from a protocol that supports longer posts, you can view the full text. This pulls directly from the post on the other protocol instead of showing a truncated version."
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#bold"
                          }
                        ],
                        "index": {
                          "byteEnd": 25,
                          "byteStart": 0
                        }
                      }
                    ],
                    "plaintext": "Connecting to the bridge. In order to bridge or unbridge your account, there’s usually a follow/unfollow/block process that needs to happen. I built a UX around this to make it more of a one-click experience."
                  }
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Since launching, I’ve built a bunch of other things as well. The biggest thing I’ve shipped recently is article support through standard.site. I’m also continuing to expand the multi-protocol side of the app, with Nostr being the next protocol I’d like to tackle."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "I’d like to integrate other lexicons as well and make more of these features available to bridged accounts on other protocols."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Mackinac is close to v1. I plan to circle back to the mobile app and start making progress there as well. I’ve only made a little progress on the mobile app since pivoting to the web app."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "I do plan to rework most of the original work so I can share code between the web and mobile app. There’s still a lot I want to build, but I’m happy with the progress so far."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "I plan to try and update here a bit more on the progress of the projects."
            }
          }
        ],
        "id": "019e9367-0334-733c-8ada-d7c09027657e"
      }
    ]
  },
  "description": "A look at the inspiration behind Mackinac, a multi-protocol Social Web client focused on making bridging feel like a natural part of the experience.",
  "path": "/3mnlhvivtnk2z",
  "publishedAt": "2026-06-06T01:11:58.789Z",
  "site": "at://did:plc:voaulu4vdmpdwevimf4i6lnj/site.standard.publication/3lyxordsb4k2a",
  "tags": [],
  "title": "Building Mackinac  "
}