Building Mackinac

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.

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.

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.

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.

I was interested in building something around bridging and was somewhat inspired by the work A New Social has been doing with Bridgy Fed.

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.

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.

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.

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.

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.

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.

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:

Bridge switcher on profiles to switch between different versions of a profile across protocols.

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.

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.

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.

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.

I’d like to integrate other lexicons as well and make more of these features available to bridged accounts on other protocols.

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.

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.

I plan to try and update here a bit more on the progress of the projects.