Baseplate 2.0 is Out

Image

Several weeks ago I embarked on the journey of modernizing Baseplate, my Lego collection app. It had a lot of custom UI that still looks really good but did not translate well to resizable iPhone apps, the iPad version did not lend itself well to multitasking and had some quirks, and the Mac version was but a larger iPad version and never really felt at home.

So I got to work thinking about how I could update the app to fill those gaps while also adding some features that had been on my mind to take the app to the next level.

The Icon

What can I say, the old icon felt fine in iOS 18 and before but Liquid Glass did it no favors. It was pretty simple and the fuzzing of the glass texture made it feel off in iOS 26. So when The Iconfactory put up their Indie App Icon deal I thought about it for a couple minutes and jumped in. Boy howdy did they knock it out of the park!

It’s just exquisite and even after living with it on my home screen for a few weeks it brings a smile to my face daily. I love the details they put in to it and I even went back to dark mode icons on my home screen because it looks good in dark mode too (it’s great in the tinted and clear variants but that’s just not how I choose to run my phone. YMMV of course.

Information Architecture

Baseplate v1 started you off browsing sets, starting with Lego themes. While it had a tab bar and let you add sets to your collection, your collection was never the priority. I decided with v2 that I wanted that to change. Your collection is now the star of the show. It features the sets you’ve built and the sets you just own, but haven’t built yet. I like this change because my collection makes me smile, and it’s part of what keeps me coming back. You can also now track that you have multiples of a set too.

One thing I really liked about v1 was the use of color through the app to make certain elements pop, and I’ve kept that in the updated designs. I also was able to add set status for many sets as well, so you can at a glance see if a set is available to buy, retired, or even available for pre-order. I’ve got some ideas on how to build on this foundation too; this is but the start.

Radar

If the collection is about what you have, then I wanted a place where you could see the things you know you want to add to your collection. This is the Radar tab, and it’s got your wishlist (which used to be part of the collection and is now distinct) as well as sets just announced and released. The data isn’t always perfect but I’ve found more often than not that the items listed to buy I can tap on the new buy button and be launched correctly straight away to the Lego site.

As with the Collection tab there’s more to come here, and I’ve got some good ideas to help you keep on top of ordering your new builds.

Subscription

Baseplate has always offered a subscription in monthly or yearly form. But this time I wanted to let users get more of a taste of the app before putting down their hard-earned money. So I added some new limits to both the Collection and Wishlist, and they can hold up to 10 sets in each. Browsing is also fully unlocked. I wanted to give users a bigger taste of the app and hope that it leads to more subscriptions. Whether this works or not is yet to be seen. Fingers crossed!

Sync

One of the things that held me back from using Baseplate on my Mac or iPad was that the data didn’t sync. It does now, provided you are a subscriber. The app now uses your iCloud account to sync across your devices and I have to say, this has been so nice to have during development. The first time I saw a set sync from my phone to my Mac it felt like magic. I’m using the SQLiteData library from Point-Free and it’s a delight to work with. Sync just works and it’s like magic. I did Core Data sync for Scorebook many years ago and that was a ton of work. I’m so thankful they put in the hard work to get sync right and I was able to turn it on with ease.

The Mac

I love the Mac. I’ve been a Mac user since elementary school in the late 80’s, and an aspiring Mac developer for the past decade. After putting out Arborist a couple months ago I knew I wanted to treat Baseplate similarly, making it feel at home on the Mac. But it’s not a dev tool, it’s a fun tool, so I also had fun with it.

Image

The app is still built with Mac Catalyst but has flares to make it feel at home on the Mac such as keyboard shortcuts and its own Settings window, which is where the paywall lives. I’m so over the moon happy at how this turned out because it’s still fun while being a Mac app. And the accent color that The Iconfactory picked out works so well in the header too.

Wrapping Up

Baseplate launched last week and the feedback I’ve gotten has been overwhelmingly positive. I’m already hard at work at v2.1 and want to add more deep platform integration as well as clean up a few things. I hope you’ll check it out on the App Store and that it brings you as much joy as it brings me!

Arborist 1.2

I previewed Arborist 1.2 last week and I’m happy to announce I just released it!

The biggest new feature is support for running tasks from Make and mise. These systems let you define reusable pieces of work a scripts or short commands and are very common across all kinds of projects. Arborist now supports these tasks right below the Commands section of the main window. I’m really happy with how this turned out, and it’s only the beginning. I’m on the lookout for other task runners to support (and the beta of Arborist 1.3 already supports justfile and npm run tasks).

The next biggest effort is not strictly an app feature at all. It dawned on me early after releasing Arborist 1.0 that an app like this really should have documentation to go along with it. This would serve users well by being a place to look before asking for help as well as a repository for articles based on questions and feedback that I get from users. So now Arborist help exists with pages covering many parts of the app. I’ll be continuing to build this space out as I add new features and get questions from users.

To build out the help section I used Maverick, my blog engine that powers this site. I had to make quite a few modifications to it but now it’s no longer just a blog engine. I’m really happy with how it came together and that I have found another new use for textbundles. It’s a format that I really do enjoy working with because it makes bundling assets alongside my text a breeze. I’ve even got my own textbundle editor that I’ve been building for the last 6+ years, and writing more posts here plus the new help articles have given me al the more reason to continue building that out too.

Back to Arborist, there are some other nice features added:

  • The branch selection pop-up now has a filter at the top of the list so you can easily find the branch you’re looking for.

  • App update notifications no longer interrupt your work, they appear in the sidebar (that was inspired by Rogue Amoeba.

  • Open the selected worktree in the terminal using the new Open Worktree in Terminal command in the Worktree menu.

There were also a handful of bug fixes too. Check out the full release notes, and grab the new version today.

Thank You Swift Talk

I woke up this morning to an email that I did not expect, Swift Talk from the guys at objc.io is ending its run at 500 episodes.

I’ve been a subscriber since its inception, and while I tend to come in and out of their series I’ve learned so much from them over the years to see it come to an end is really sad.

So I wanted to at least say publicly, thank you Chris and Florian. Your contributions to the Apple developer community have been enormous. Swift Talk will be missed!

They do end with some good news though:

At the end of the year, we hope to make the full Swift Talk archive available.

Coming Soon to Arborist and Baseplate

I’ve been hard at work on updates to Arborist and Baseplate recently and wanted to give a preview of what’s coming up.

Arborist 1.2

The list of things for Arborist 1.2 keeps growing and I think it’s about ready to release. I’ve been building a help section to the Taphouse website and writing Arborist articles based on some feedback questions I’ve received as well as the typical “getting started” kind of things. I think finishing out that part of the website and adding the actual link into Arborist’s help menu is the last thing I have to do.

Release highlights:

  • I built a new feature where Arborist will recognize a Makefile or a mise configuration and import those tasks to run right in the app. I used to be a big make user but migrated to mise a couple of years ago and it’s become a key part of my workflows. Having those tasks right in Arborist has been amazing. If you’d like to see an example of how I use mise, here is this site’s .mise.toml file.

  • A feature request that I got was adding a filter to the branch selector popup when creating a worktree. I added support for this too and it’s been super useful in my day-to-day as I’m making new worktrees. This one was fun because it gave me a chance to drop down to AppKit and wrap that in a SwiftUI representable view.

  • I took inspiration from Rogue Amoeba and made the “Update available” indicator appear inline in the status bar – at the bottom of the window, but there really wasn’t room at the top when I tried that thanks to the unified toolbar – and I really like how this turned out. It stands out just enough in both light and dark modes.

  • I had been fighting with SwiftUI and SplitView to the point where if I moved the inspector pane’s size too much I would get crashes, so I had to restrict the sizes of the sidebar and inspector. No longer! I have changed the main window structure to AppKit and am using NSSplitViewController to power it, and the feel of the app is just so much smoother now.

There’s also a bunch of bug fixes especially around cancelling commands (thanks to the updated swift-subprocess library) and other things that I found bothersome during my regular usage of the app while building my other apps or at my day job.

Baseplate

I acquired Baseplate a couple of years ago now and that has been such an interesting experience. Learning someone else’s code, updating it to be more my style, and adding features there has been fun but also slow going (just look at the update history). But I’ve been hard at work at Baseplate 2.0 and I’m so excited to get this app out into the world.

It’s basically a rebuild of the UI. The current interface is very custom, and worked well in a pre-Liquid Glass world but it started feeling a bit dated to me. So I’ve set out to breathe new life into the app with a massive redesign, but also many under-the-hood changes as well.

  • Baseplate will now sync your collection data between your iPhone, iPad, Mac, and Vision Pro (I’m letting go of the watch app for now). Seeing my data come across from one device to the other for the first time was magic and I hope this feature really lets customers dive in to their Lego collections on all their devices. This took quite a bit of planning and careful migration – I’ve moved to using SQLiteData from the excellent Point-Free folks and it’s been wonderful.

  • The UI as I mentioned is completely redesigned. I’m making your Lego collection the first tab, and want the app to be all about what you have on your shelf and in your queue to build. I’m really happy landing on my stuff when I launch the app now.

  • Next is the Discover tab, which will start out with the familiar list of themes as a starting point but then gives you search right away. I moved the Vision feature to this tab as well as a button in the navigation bar. It’s a very cool feature but I think it is another way of searching for sets so it fits better in this tab.

  • A brand new tab is Radar. This is where your wanted sets will land, and I’m adding sections below those for sets just announced by Lego so you can see what’s on the horizon. There’s also links in all the sets to buy them from Lego.com, and I’m getting product data for sets as well so you can see what sets are available, what are retired, etc. I’m really happy with how this tab has turned out!

I’ve also saved the best for last: Baseplate has a brand new icon that I am in love with. The fine folks at The Iconfactory had a great offer recently to help indie apps remake their icons and I jumped on it. I could not be happier with the result and can’t wait for you to see it on your home screen!

I’m targeting the iOS 27 launch day for Baseplate 2.0, though it may be the end of September. We’ll find out the OS launch date on September 9th 😀.

Maverick Engine Updates

I’ve been hard at work on some updates to my textbundle blog engine Maverick over the past couple of weeks:

  • I’m working on adding a support section to my Taphouse website for Arborist and decided to take a crack at seeing how textbundles could work for that kind of content. It turns out that it works quite well! I’m not ready to roll it out there as I’m building out the articles now but suffice to say that Maverick is doing the job really nicely (and that’s what the 4.x releases were about).

  • I’ve also wanted to bring social cross-posting in-house. For a while now I leaned on the micro.blog cross-posting features to send my posts to Mastodon, Bluesky, and LinkedIn. Micro.blog is fantastic, but I wanted more from how my posts showed up in those contexts and so I added cross-posting to Maverick. This post is the first test of how that all worked, so my fingers are crossed 🤣

I’ve always enjoyed working on Maverick, and since my first post using it 8 years ago I’m really happy with how it’s performed. I love textbundle files too, and I have a Mac app that I’ve been working on for a while that is tailored to that format that I may be able to get polished up enough for release this year. No promises on that though 🙂

So this post is partly to talk about the work I’ve been up to behind the scenes, and also partly to test the cross-posting features of Maverick. Let’s hope things went well on the latter front!