<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>ben rice mccarthy</title><description>the personal and professional site of ben rice mccarthy</description><link>https://benricemccarthy.com/</link><language>en-gb</language><item><title>Indigo 1.3</title><link>https://benricemccarthy.com/blog/indigo-1-3/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/indigo-1-3/</guid><description>Today’s update to Indigo is a real juicy one. We’ve got a bunch of big improvements across the app and a new pricing option for single-network users.</description><pubDate>Tue, 08 Sep 2026 13:59:56 GMT</pubDate><content:encoded>&lt;p&gt;Today&amp;#x2019;s update to Indigo is a real juicy one. We&amp;#x2019;ve got a bunch of big improvements across the app and a new pricing option for single-network users.&amp;#xa0;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.8000&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---1.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo 1.3&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2500&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/09/Indigo-1.3---1.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/09/Indigo-1.3---1.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2026/09/Indigo-1.3---1.png 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---1.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Single Service Pricing&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;From its inception, our goal for Indigo was to create the best experience for users of both Bluesky and Mastodon. While we have plenty of room to improve, I think we&amp;#x2019;ve succeeded in that goal.&amp;#xa0;&lt;/p&gt;&lt;p&gt;The other part of that goal was to provide a best-in-class client for Bluesky &lt;em&gt;or&lt;/em&gt; Mastodon. While there&amp;#x2019;s much more competition in this space, we were hopeful we could put up a good fight. One of our major drawbacks though, was our pricing. We&amp;#x2019;d priced Indigo for users of both networks, making it seem quite expensive if you only used one. Today we&amp;#x2019;re adding a much more competitive price (&amp;#x24;19.99) that lets users sign into Bluesky &lt;em&gt;or&lt;/em&gt; Mastodon, with as many accounts as they like. Hopefully this opens up Indigo to a much wider audience.&amp;#xa0;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.8000&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---2.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo 1.3&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2500&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/09/Indigo-1.3---2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/09/Indigo-1.3---2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2026/09/Indigo-1.3---2.png 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---2.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Timelines, Feeds, &amp;amp; Carousels&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;One of the hardest parts of designing an app is accepting that not everyone is going to use it the way you do. My usage (and Aaron&amp;#x2019;s) is very focused on the timeline of users I follow, in chronological order, and I do my best to keep up with everything.&amp;#xa0;&lt;/p&gt;&lt;p&gt;By modern social media standards, this is very weird.&lt;/p&gt;&lt;p&gt;Indigo already supported viewing other feeds and lists you followed, but it was a second tier experience, requiring additional taps and didn&amp;#x2019;t support all the same timeline filtering features. Indigo 1.3 has some big improvements.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Carousel&lt;/strong&gt;&lt;br&gt;The main view of the app is now a carousel, letting you swipe left and right between your most important timelines. If you want your Bluesky For You feed to be the first thing you see when you open the app, you can do that now.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Unified Timelines&lt;/strong&gt;&lt;br&gt;You can now unify chronological timelines, combining Bluesky and Mastodon into custom unified timelines. If you have a bunch of accounts you follow on both networks for sports or video game news, etc. you can now bring them together for that ideal Indigo experience.&amp;#xa0;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Saved Timelines&lt;/strong&gt;&lt;br&gt;For the timelines you care about, but not quite so much to have them in the carousel, you can now &lt;em&gt;save&lt;/em&gt; them. These timelines will be cached locally, and can take advantage of mute filters and timeline filters.&amp;#xa0;&lt;/p&gt;&lt;p&gt;For the timelines you don&amp;#x2019;t really care about, they&amp;#x2019;re still fetched on demand as before.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.8000&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---4.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo 1.3&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2500&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/09/Indigo-1.3---4.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/09/Indigo-1.3---4.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2026/09/Indigo-1.3---4.png 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---4.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Paired Profiles&lt;/strong&gt;&lt;br&gt;A lot of features in Indigo are powered Paired Profiles, which are accounts across both networks that represent the same person.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Previously, Indigo would automatically detect these, save them, and use them when calculating whether timeline posts were cross-posts. The issue was, if two accounts were incorrectly paired, this would result in worse cross post detection and you wouldn&amp;#x2019;t know why. So we made two big improvements:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Paired Suggestions&lt;/strong&gt;&lt;br&gt;When Indigo detects two accounts it thinks are related, it now offers them as a a suggested pair, and you can confirm or deny in settings.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Manual Pairing&lt;/strong&gt;&lt;br&gt;You can now just manually pair two accounts so Indigo knows they&amp;#x2019;re the same person. Simple and effective.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Improving paired profiles laid the foundation for the next two features:&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.8000&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---3.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo 1.3&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2500&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/09/Indigo-1.3---3.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/09/Indigo-1.3---3.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2026/09/Indigo-1.3---3.png 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---3.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;br&gt;&lt;strong&gt;Magic Mentions&lt;/strong&gt;&lt;br&gt;We first introduced the idea of Magic Mentions in Croissant, allowing you to mention a person across Bluesky, Mastodon, and Threads. With Indigo, we tried to streamline the experience by bringing it all inside the compose view. That may have been a little too ambitious. It was hard to convey all the complexity in such a small amount of space and it caused a bit of confusion.&lt;/p&gt;&lt;p&gt;Indigo 1.3 now splits the functionality so lookup can happen inline, but if you need to pair two previously unknown accounts, that now happens in a separate, more intuitive view, closer to how we did it in Croissant originally. Best of both worlds.&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.8000&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---5.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo 1.3&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2500&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/09/Indigo-1.3---5.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/09/Indigo-1.3---5.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2026/09/Indigo-1.3---5.png 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---5.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Mute Filters&lt;/strong&gt;&lt;br&gt;We know how important it is to be fully in control of what appears on your timeline and what doesn&amp;#x2019;t so we&amp;#x2019;ve made Indigo&amp;#x2019;s muting system way better. Here&amp;#x2019;s what we&amp;#x2019;ve done:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;All mute filters now support time limits.&lt;/li&gt;&lt;li&gt;All mute filters now support dampening or hiding.&lt;/li&gt;&lt;li&gt;We&amp;#x2019;ve separated out text mute filters into text, hashtags, and domains.&lt;/li&gt;&lt;li&gt;Account mutes now apply to Paired Profiles so you can mute the same person everywhere.&lt;/li&gt;&lt;li&gt;You can also disable reposts per person&lt;/li&gt;&lt;li&gt;It&amp;#x2019;s easier to create a new Mute Filter; long press a profile photo, a hashtag, or a link for options.&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.8000&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---6-1.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo 1.3&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2500&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/09/Indigo-1.3---6-1.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/09/Indigo-1.3---6-1.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2026/09/Indigo-1.3---6-1.png 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---6-1.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Scroll Position Sync&lt;/strong&gt;&lt;br&gt;This one isn&amp;#x2019;t strictly a new feature. We had it enabled at launch, but it was a little rocky so we disabled it until we were happy with it. Now we&amp;#x2019;re happy with it, and your timelines stay in sync across devices automatically. You can scroll on your phone and watch Indigo on your Mac update moments later.&lt;/p&gt;&lt;p&gt;All our great scroll position features still remain, so if anything does get out of whack, you can reset your saved scroll position manually.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.8000&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---7.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo 1.3&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2500&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/09/Indigo-1.3---7.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/09/Indigo-1.3---7.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2026/09/Indigo-1.3---7.png 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---7.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;br&gt;&lt;strong&gt;Profile Editing&lt;/strong&gt;&lt;br&gt;When we launched Indigo, there were a bunch of features that felt &lt;em&gt;almost&lt;/em&gt; essential, that we decided we had to forego or we&amp;#x2019;d never ship. Profile Editing was one of those features. I was sure someone was going to complain loudly about our app lacking such a basic feature. Well no one ever did, and now we have it so I guess that&amp;#x2019;s a win. But yeah, you can update your bio and your avatar and stuff. Exactly what you&amp;#x2019;d expect.&amp;#xa0;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.8000&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---8.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo 1.3&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2500&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/09/Indigo-1.3---8.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/09/Indigo-1.3---8.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2026/09/Indigo-1.3---8.png 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---8.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Bluesky OAuth Sign In&lt;/strong&gt;&lt;br&gt;This one has been a long time coming. Both Indigo and Croissant depend on the fantastic ATProtoKit by Christopher Jr Riley and so we couldn&amp;#x2019;t adopt OAuth until it was fully supported by the project.&amp;#xa0;&lt;/p&gt;&lt;p&gt;The downside is Bluesky requires you to re-authenicate every so often, but Aaron has done everything he can to make that as frictionless as possible.&amp;#xa0;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.8000&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---9.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo 1.3&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;2500&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/09/Indigo-1.3---9.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/09/Indigo-1.3---9.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2026/09/Indigo-1.3---9.png 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/09/Indigo-1.3---9.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Bluesky Labellers&lt;/strong&gt;&lt;br&gt;Bluesky supports labellers which are a clever system of applying arbitrary metadata to accounts. One displays &amp;#x201c;Bluesky Elder&amp;#x201d; for accounts that have been around since the early days, others are opt-in labellers to display pronouns. Some warn of bad behaviour. They can also be used to hide posts like algorithmic mute filters.&lt;/p&gt;&lt;p&gt;Indigo now lets you see those labels in the timeline and manage them in settings.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;But wait, that&amp;#x2019;s not all&lt;/strong&gt;&lt;br&gt;There are, of course a bunch more improvements that don&amp;#x2019;t each need a paragraph of explanation. Here&amp;#x2019;s what else we&amp;#x2019;ve done:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Support for Bluesky&amp;#x2019;s new video size limits&lt;/li&gt;&lt;li&gt;Open links when pasted into Search&lt;/li&gt;&lt;li&gt;Use Escape Key to close Media Windows&lt;/li&gt;&lt;li&gt;Tenor GIF support&lt;/li&gt;&lt;li&gt;Load more Replies at once (25 instead of 10)&lt;/li&gt;&lt;li&gt;Crosspost pairings are more resilient to being split apart&lt;br&gt;&lt;/li&gt;&lt;li&gt;Crosspost detection has been improved&lt;/li&gt;&lt;li&gt;Fetching replies in Post Detail views is faster&lt;/li&gt;&lt;li&gt;Fetching embed Quote Posts is more reliable&lt;/li&gt;&lt;li&gt;Added Profile Photos to some Notification Post types&lt;/li&gt;&lt;li&gt;Improvements to filtering of Bluesky threads&lt;/li&gt;&lt;li&gt;Follow State is updated more proactively&lt;/li&gt;&lt;li&gt;Search Results now prioritise accounts based on interaction&lt;/li&gt;&lt;li&gt;Improved caching, disk usage, and memory usage&lt;/li&gt;&lt;li&gt;More consistent Interaction Counts across contexts&lt;/li&gt;&lt;li&gt;Sub-second sorting of posts&lt;/li&gt;&lt;li&gt;More accurate follower and following counts in some contexts&lt;/li&gt;&lt;li&gt;Improved detection of handles in post content&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fixes to Search Results layout&lt;/li&gt;&lt;li&gt;Fixes to the macOS Search Bar and Toolbar&lt;/li&gt;&lt;li&gt;Fixes for Delete and Edit of Bluesky replies&lt;/li&gt;&lt;li&gt;Fixes for UI hiding in Media View&lt;/li&gt;&lt;li&gt;Fixes for closing Media View&lt;/li&gt;&lt;li&gt;Fixes for Mac Media View positioning&lt;/li&gt;&lt;li&gt;Fixes for Timeline scroll jumping&lt;/li&gt;&lt;li&gt;Fixes for Launching with stale data&lt;/li&gt;&lt;li&gt;Fixes for Media Only Post Layout&lt;/li&gt;&lt;li&gt;Fixes for Media in Direct Messages&lt;/li&gt;&lt;li&gt;Fixed some layout issues in Post Detail replies&lt;/li&gt;&lt;li&gt;Various minor UI fixes for consistency.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br&gt;Now, you should be so impressed that you run around to all your friends, screaming about how great Indigo is, and they get so uncomfortable that they all subscribe just so you&amp;#x2019;ll act normal again. We beseech this of you.&lt;/p&gt;&lt;p&gt;For real though, as happy as we are with Indigo, we have been struggling to get the word out to a wider audience and we could really do with all the help we can get. It would mean a lot.&lt;/p&gt;</content:encoded></item><item><title>Last Minute WWDC 26 Hopes &amp; Dreams</title><link>https://benricemccarthy.com/blog/last-minute-wwdc-26-hopes-dreams/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/last-minute-wwdc-26-hopes-dreams/</guid><description>User Interface Liquid Glass is more opaque Liquid Glass no longer switches between light and dark automatically (just match the environment settings of the current view) Liquid Glass is tappable where you expect it to…</description><pubDate>Mon, 08 Jun 2026 10:21:11 GMT</pubDate><content:encoded>&lt;h3 id=&quot;user-interface&quot;&gt;&lt;strong&gt;User Interface&lt;/strong&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Liquid Glass is more opaque&lt;/li&gt;&lt;li&gt;Liquid Glass no longer switches between light and dark automatically (just match the environment settings of the current view)&lt;/li&gt;&lt;li&gt;Liquid Glass is tappable where you expect it to be&lt;/li&gt;&lt;li&gt;Support for Action Buttons next to the Tab Bars&lt;/li&gt;&lt;li&gt;Tab Bars support more than 5 items gracefully (see Indigo&amp;#x2019;s tab bar)&lt;/li&gt;&lt;li&gt;Tab Bars support additional interaction (e.g. tap a search tab twice to focus a search field)&lt;/li&gt;&lt;li&gt;A Sidebar / Drawer style UI Component on iOS&lt;/li&gt;&lt;li&gt;Animated Zoom Transitions to be more configurable (disable certain gestures, reduce bounce duration)&lt;/li&gt;&lt;li&gt;Improved SwiftUI List performance&lt;/li&gt;&lt;li&gt;Improvements to SwiftUI List Scroll Position management&lt;/li&gt;&lt;li&gt;SwiftUI UICollectionView equivalent&lt;/li&gt;&lt;li&gt;SwiftUI support for per-view rotation locking&lt;/li&gt;&lt;li&gt;UI Hierarchy to be less stupid on macOS&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;developer&quot;&gt;&lt;strong&gt;Developer&lt;/strong&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Generate SF Symbols from text prompts&lt;/li&gt;&lt;li&gt;Automatic Small Business Program Enrolment&lt;/li&gt;&lt;li&gt;No more TestFlight App Review&lt;/li&gt;&lt;li&gt;iOS and Mac builds go through App Review simultaneously&lt;/li&gt;&lt;li&gt;Vastly improved support for cross-app subscriptions and IAP&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;camera-photos&quot;&gt;&lt;strong&gt;Camera &amp;amp; Photos&lt;/strong&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Night Mode API&lt;/li&gt;&lt;li&gt;Photographic Styles API&lt;/li&gt;&lt;li&gt;API for arbitrary photo metadata (Star Ratings, Tags)&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;hardware&quot;&gt;&lt;strong&gt;Hardware&lt;/strong&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;New AppleTV with improved performance and a remote with Precise Find My support&lt;/li&gt;&lt;li&gt;Apple gives me a free Mac Studio for my troubles&lt;/li&gt;&lt;li&gt;Apple invents a new kind of RAM that exists&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;general&quot;&gt;&lt;strong&gt;General&lt;/strong&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Ethically trained AI models&lt;/li&gt;&lt;li&gt;Apple get&amp;#x2019;s less prudish about adult content&lt;/li&gt;&lt;li&gt;Completely revamp Contacts to make sense for the modern social world&lt;/li&gt;&lt;li&gt;Apple acknowledges how badly they&amp;#x2019;ve fucked up developer relations over the last ~5 years&lt;/li&gt;&lt;/ul&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/06/IMG_6029.JPG&quot; alt=&quot;Last Minute WWDC 26 Hopes &amp;amp; Dreams&quot;&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;</content:encoded></item><item><title>Indigo’s Design Evolution</title><link>https://benricemccarthy.com/blog/indigos-design-evolution/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/indigos-design-evolution/</guid><description>Talking about iterative design is tricky; show every step along the way would be overwhelming and not terribly interesting, but showing just the start and end points obfuscates the amount of work and exploration that…</description><pubDate>Tue, 12 May 2026 13:00:36 GMT</pubDate><content:encoded>&lt;p&gt;Talking about iterative design is tricky; show every step along the way would be overwhelming and not terribly interesting, but showing just the start and end points obfuscates the amount of work and exploration that went into it. A lot of the work looks like this:&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 1.5314&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Screenshot-2026-05-08-at-12.11.18.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1306&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Screenshot-2026-05-08-at-12.11.18.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Screenshot-2026-05-08-at-12.11.18.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2026/05/Screenshot-2026-05-08-at-12.11.18.png 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w2400/2026/05/Screenshot-2026-05-08-at-12.11.18.png 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;And that gets tiresome really quickly. So I thought I&amp;#x2019;d focus on some of the pivotal moments of Indigo&amp;#x2019;s design to show how we got here.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img style=&quot;--ratio: 0.4939&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/IMG_2826-2.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; loading=&quot;lazy&quot; width=&quot;1450&quot; height=&quot;2936&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/IMG_2826-2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/IMG_2826-2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/IMG_2826-2.png 1450w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;figcaption&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Skylark from 2023&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;skylark&quot;&gt;Skylark&lt;/h3&gt;&lt;p&gt;Way, way back in 2023, I put together a very basic prototype of a Bluesky client that I called Skylark. I didn&amp;#x2019;t get much beyond the ability to display a few posts on the timeline, but you can already see a number of elements that carry through to Indigo today.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Floating Tab Bars are something I&amp;#x2019;ve been implementing long before Liquid Glass first appeared, as I think they make an app feel much less rigid and create a more open feel, much like good use of whitespace in a typographic layout. You can also see the prominent Plus Button, to start a new post, and the chevron next to the Timeline Button, indicating that it can be expended.&amp;#xa0;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide kg-card-hascaption&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4949&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Obscura-4---Framed-1.png&quot; width=&quot;1470&quot; height=&quot;2970&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Obscura-4---Framed-1.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Obscura-4---Framed-1.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Obscura-4---Framed-1.png 1470w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4949&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Freckle---Framed-2.png&quot; width=&quot;1470&quot; height=&quot;2970&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Freckle---Framed-2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Freckle---Framed-2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Freckle---Framed-2.png 1470w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;The floating tab bars I built for Obscura 4 and Freckle&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;But I quickly realised that building an entire social app by myself was probably a fool&amp;#x2019;s errand. And that was that, until Aaron entered the picture. There&amp;#x2019;s not a whole lot more to say about Skylark, it was a short lived experiment, but it is the start of Indigo&amp;#x2019;s story, so it felt worth mentioning.&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide kg-card-hascaption&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4949&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/PupperPost---Framed.png&quot; width=&quot;1470&quot; height=&quot;2970&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/PupperPost---Framed.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/PupperPost---Framed.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/PupperPost---Framed.png 1470w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4967&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Soapbox---Framed---2.png&quot; width=&quot;1359&quot; height=&quot;2736&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Soapbox---Framed---2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Soapbox---Framed---2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Soapbox---Framed---2.png 1359w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;The original PupperPost and my redesign (and rebrand), Soapbox&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;aaron-vegh-pupper-post&quot;&gt;Aaron Vegh &amp;amp; Pupper Post&lt;/h3&gt;&lt;p&gt;In May 2024, Aaron reached out to me for some design work on his blogging platform, PupperPost. I proposed a pretty major overhaul of the whole app, including changing the name to Soapbox. While my redesign never saw the light of day, I&amp;#x2019;m really proud of a lot of the work that went into it.&amp;#xa0;&lt;/p&gt;&lt;p&gt;One of the features of PupperPost was that you could link it to your Mastodon account and your blog posts would automatically be linked to with a Mastodon post and you could post directly too. I thought that was very compelling and asked Aaron if he&amp;#x2019;d consider supporting any other social networks. That idea grew into creating a full fledged cross posting app, which I thought might be a more practical niche to target than the more competitive blogging space. Aaron was intrigued by the idea, but it wasn&amp;#x2019;t until I came back to him a little while later with some mockups that he was convinced.&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide kg-card-hascaption&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.5040&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Croissant-Framed---1.png&quot; width=&quot;1530&quot; height=&quot;3036&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Croissant-Framed---1.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Croissant-Framed---1.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Croissant-Framed---1.png 1530w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Croissant-2.0---iPhone-Framed---1.png&quot; width=&quot;1350&quot; height=&quot;2760&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Croissant-2.0---iPhone-Framed---1.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Croissant-2.0---iPhone-Framed---1.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Croissant-2.0---iPhone-Framed---1.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Croissant 1.0 and Croissant 2.0&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;croissant&quot;&gt;Croissant&lt;/h3&gt;&lt;p&gt;If you&amp;#x2019;re reading this, then there&amp;#x2019;s a pretty good chance you&amp;#x2019;re already familiar with &lt;a href=&quot;https://apps.apple.com/ie/app/croissant-cross-posting/id6670288979?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Croissant&lt;/a&gt;. Aaron and I launched it in late 2024 and we overhauled the design over summer 2025 for Liquid Glass. I&amp;#x2019;m not sure we ever would have had the confidence to start work on Indigo without having built Croissant first. Dealing with multiple accounts across multiple services presents a huge number of challenges, both technical and visual. Being able to take Croissant&amp;#x2019;s account sign in and management, as well as the Compose view gave us a big head start.&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;h3 id=&quot;indigotimeline-and-toolbars&quot;&gt;Indigo - Timeline and Toolbars&lt;/h3&gt;&lt;p&gt;On the left is one of the earliest mockups of Indigo. You can see much of the current design is already there, including the tinted borders around avatars and the use image carousels instead of grids. The floating bars are present at the bottom and top of the screen. When Liquid Glass was announced, it killed me not to be able to show off these mockups.&amp;#xa0;&lt;/p&gt;&lt;p&gt;I also put a huge amount of effort into two aspects of Indigo&amp;#x2019;s navigation that we ended up throwing away, as they were now system defaults in iOS 26; rounded corners for views and &amp;#x201c;sloppy swiping&amp;#x201d; (you can start a backwards swipe from anywhere on screen, not just the leading edge). Somewhat inspired by the Dynamic Island, the top and bottom bars were designed to adapt to the current context, the bottom bar could become a quick reply field, the top bar would show profile info when looking at a single post and so on.&lt;/p&gt;&lt;p&gt;Ultimately, trying to work around the system navigation controller behaviours was proving a little too cumbersome, and iOS 26 came along and gave us about 80% of what we were trying to do for way less effort and with far more reliability. That said, I&amp;#x2019;m not a fan of Apple&amp;#x2019;s tab bars in iOS 26. I think they&amp;#x2019;re a little too cartoony, the use of colour is not great for legibility, and the liquid bubble effect is superfluous. I opted for a more subtle approach. At first I tried using the system toolbar to try and recreate a tab bar like experience, but this greatly reduced the amount of customisation and styling that could be applied, so it was quickly abandoned for a custom approach, heavily inspired by what the folks at &lt;a href=&quot;https://apps.apple.com/ie/app/linear-mobile/id1645587184%20Linear%20Mobile?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Linear&lt;/a&gt; built for their iOS app.&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide kg-card-hascaption&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4967&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Timeline---Post-Detail-Copy-8-2-2.png&quot; width=&quot;1359&quot; height=&quot;2736&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Timeline---Post-Detail-Copy-8-2-2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Timeline---Post-Detail-Copy-8-2-2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Timeline---Post-Detail-Copy-8-2-2.png 1359w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---7a---Thread-2.png&quot; width=&quot;1350&quot; height=&quot;2760&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Indigo---7a---Thread-2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Indigo---7a---Thread-2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---7a---Thread-2.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Early and current iterations of the Post Detail View&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;indigopost-detail&quot;&gt;Indigo - Post Detail&lt;/h3&gt;&lt;p&gt;The post detail view might be my favourite part of Indigo. You can see a lot of evolution here from the earliest mockup to the latest version. While it was nice having profile info in the top bar for single posts, there was no intuitive way to make it work for threads with multiple participants. So posts on the detail view shifted to be a little more like posts on the timeline, but with more.. detail.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Every decision here was made with the goal of maintaining focus on the thread that you came to see, providing more context, and less distraction. There&amp;#x2019;s a counter at the top, so you can immediately tell if you&amp;#x2019;re at the start, middle, or end of a long thread. Below the post, you can see the full timestamp (and on Mastodon, the name of the client app, if it&amp;#x2018;s available) and a quick reply field which lets you fire off a text-only post without breaking your flow. Below the main section you&amp;#x2019;ll find replies to the last post in the thread. On the left of a thread is a ribbon with a counter for additional replies, and you can tap the ribbon to show those inline. This saves you from having to navigate through dozens of transitions to see everything. It&amp;#x2019;s a little unusual at first, but I think you&amp;#x2019;ll quickly grow to love it.&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide kg-card-hascaption&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4967&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Notifications-Before---Framed.png&quot; width=&quot;1359&quot; height=&quot;2736&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Notifications-Before---Framed.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Notifications-Before---Framed.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Notifications-Before---Framed.png 1359w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---5---Notifications-1.png&quot; width=&quot;1350&quot; height=&quot;2760&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Indigo---5---Notifications-1.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Indigo---5---Notifications-1.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---5---Notifications-1.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Early and current iterations of the Notifications View&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;notifications&quot;&gt;Notifications&lt;/h3&gt;&lt;p&gt;Notifications is one of those views that, for the most part, is exactly what you&amp;#x2019;d expect it to be. Some of the earlier designs included a summary of notifications at the top, but I don&amp;#x2019;t think it provided enough content to be really useful. There was a lot of iterating with much feedback from our beta testers to arrive at something that felt sufficiently clean and informative. Grouped notifications for likes and reposts help keep the list from getting too noisy. Replies, mentions and quotes are highlighted with a fill colour to stand out more (there was an intense debate about whether the fill should be edge to edge or not).&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide kg-card-hascaption&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4967&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Search-2-1.png&quot; width=&quot;1359&quot; height=&quot;2736&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Search-2-1.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Search-2-1.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Search-2-1.png 1359w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---8---Search-1.png&quot; width=&quot;1350&quot; height=&quot;2760&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Indigo---8---Search-1.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Indigo---8---Search-1.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---8---Search-1.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Early and current iterations of the Search View&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h4 id=&quot;search&quot;&gt;Search&lt;/h4&gt;&lt;p&gt;Search has remained pretty close to my original vision, which featured prominent cards for the links most shared by the people you follow. All the sections have been shuffled around quite a bit. The recent searches felt awkward at the top when they were listed vertically, as they pushed the more vibrant views downwards. But changing that section to scroll horizontally let it sit at the top without pushing everything too far down, and really brought everything together.&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide kg-card-hascaption&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/IMG_9146-2.png&quot; width=&quot;1350&quot; height=&quot;2760&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/IMG_9146-2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/IMG_9146-2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/IMG_9146-2.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/IMG_8627-2-1.png&quot; width=&quot;1350&quot; height=&quot;2760&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&amp;#x2019;s Design Evolution&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/IMG_8627-2-1.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/IMG_8627-2-1.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/IMG_8627-2-1.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Early and current iterations of the Profile View&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;profiles&quot;&gt;Profiles&lt;/h3&gt;&lt;p&gt;I think the profile view is the part of the app I struggled with the most. There&amp;#x2019;s quite a bit of information and interactions to include and the information that might be most important to one person might be irrelevant to another. I toyed with a number of left aligned layouts to try and make more of the horizontal space, but they always fell apart quickly when larger dynamic type sizes were factored in. A lot of the early designs focused on merging profiles across both services, but we decided this was just too much complexity to deal with for 1.0. Frustrations aside, I&amp;#x2019;m quite happy with the profile fields on Mastodon, which I think both look nice, and the icons provided room for some fun easter eggs.&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;I hope this overview of Indigo&amp;#x2019;s design evolution has been at least a little bit interesting and informative. I know when I was starting out designing apps, I was hungry to see the process other designers went through, and I&amp;#x2019;m worried that in the age of AI, there won&amp;#x2019;t be much process left to share.&lt;/p&gt;&lt;p&gt;If you haven&amp;#x2019;t already, you should download Indigo. It&amp;#x2019;s free to try out if you just want to see how it looks and feels. It&amp;#x2019;s been an absolute joy to work on so far, and I can&amp;#x2019;t want to build more publicly now that it&amp;#x2019;s out in the world.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Be good to each other,&lt;/p&gt;&lt;p&gt;Ben&lt;/p&gt;&lt;div class=&quot;kg-card kg-button-card kg-align-left&quot;&gt;&lt;a href=&quot;https://apps.apple.com/us/app/indigo-for-bluesky-mastodon/id6763755310?ref=benricemccarthy.ghost.io&quot; class=&quot;kg-btn kg-btn-accent&quot;&gt;Indigo on the App Store&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>Indigo</title><link>https://benricemccarthy.com/blog/indigo/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/indigo/</guid><description>I’ve long believed that social media is not about condensing the entire human experience into bite-size nuggets, fed to you endlessly.</description><pubDate>Tue, 12 May 2026 13:00:12 GMT</pubDate><content:encoded>&lt;p&gt;I&amp;#x2019;ve long believed that social media is not about condensing the entire human experience into bite-size nuggets, fed to you endlessly. I think social media should exist to help you stay in touch with the people you care about most. And over the last few years, that seems to be increasingly hard. The landscape of microblogging apps is deeply fractured, making it hard to stay up with the people you follow and even harder to make your voice heard. Algorithms mediate the information you see, rarely in service of a better user experience, and often they&amp;#x2019;re heavily biased to match the whims of their owners. It sucks, and it&amp;#x2019;s far from the experience I had in the early days of social media.&amp;#xa0;&lt;/p&gt;&lt;p&gt;In 2024, Aaron Vegh reached out to me, asking for help design help with a blogging platform he&amp;#x2019;d been working on. While working on that, I flagged one of Aaron&amp;#x2019;s features, the ability to cross-post blog posts to Mastodon, as having a lot of potential. I even suggested that an app focused on cross-posting might be a more practical endeavour, and after a few mockups of what I had in mind, Aaron was convinced. A few months later, we launched Croissant, an app that allows you to post simultaneously to Bluesky, Mastodon, and Threads. It was an instant hit, resonating with users who felt spread thin trying to post everywhere, especially with independent creators like ourselves.&amp;#xa0;&lt;/p&gt;&lt;p&gt;But there was one piece of feedback we heard again and again, something we&amp;#x2019;d already been thinking ourselves; posting is great, but wouldn&amp;#x2019;t it be amazing if you could also combine your timelines into one app? Naturally that would be a much bigger, much more complicated undertaking, but we knew if we could build it, it would be an unbeatable experience. So that&amp;#x2019;s what we did.&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---3---Sync.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo&quot; loading=&quot;lazy&quot; width=&quot;1350&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Indigo---3---Sync.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Indigo---3---Sync.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---3---Sync.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;figcaption&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Indigo&amp;#x2019;s Timeline&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 id=&quot;meet-indigo&quot;&gt;Meet Indigo&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://apps.apple.com/us/app/indigo-for-bluesky-mastodon/id6763755310?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Indigo&lt;/a&gt; brings together Bluesky and Mastodon into a single, unified experience. While we&amp;#x2019;ve built it around the idea of unifying both services, it&amp;#x2019;s also great to use with just one. (Threads&amp;#x2019; API only allows for the creation of posts, not fetching your timeline for display, so it was a non-starter for Indigo.)&lt;/p&gt;&lt;p&gt;There&amp;#x2019;s a lot of complexity in supporting two different social networks, built using two different protocols designed with very different ideologies, but Aaron has taken a Herculean task and made it seamless. Indigo fetches posts from both services, builds it&amp;#x2019;s own timeline, interleaving posts so their chronology is preserved, and automatically detects and combines duplicate posts,&lt;/p&gt;&lt;p&gt;Once we had a working prototype, we knew we were onto something good. And our early beta testers agreed; once you&amp;#x2019;d tried the unified timeline, using multiple apps felt like a chore. That enthusiasm was incredibly motivating as we worked through all the bugs and performance issues.&amp;#xa0;&lt;/p&gt;&lt;p&gt;We had to be judicious with the features we decided to launch with, and while some omissions might grate at first, it let us focus on making the core experience as beautiful and polished as we could.&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;h3 id=&quot;ui-liquid-glass&quot;&gt;UI &amp;amp; Liquid Glass&lt;/h3&gt;&lt;p&gt;Indigo has been built from the ground up for Apple&amp;#x2019;s latest operating systems. While I know there are some holdouts still on iOS 18 and Sequoia, there were some navigational changes in the 26 releases that were crucial for Indigo.&amp;#xa0;&lt;/p&gt;&lt;p&gt;I don&amp;#x2019;t love every aspect of Liquid Glass but I like how the floating controls make scrolling views feel more open and airy, which has a huge impact on the feel of Indigo. We built a custom tab bar that&amp;#x2019;s more flexible than Apple&amp;#x2019;s, allowing us to show a menu for additional navigation on iPhone as well as a compose button that adapts to the current context. Full credit to the folks at &lt;a href=&quot;https://apps.apple.com/ie/app/linear-mobile/id1645587184%20Linear%20Mobile?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Linear&lt;/a&gt; for inspiring this. I hope Apple copies it and makes it a system component.&amp;#xa0;&lt;/p&gt;&lt;p&gt;On Mac and iPad, there&amp;#x2019;s a compact sidebar that lets you quickly move between sections of the app. It&amp;#x2019;s not Liquid Glass because I don&amp;#x2019;t think that makes sense for sidebars.&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---1---Timeline.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo&quot; loading=&quot;lazy&quot; width=&quot;1350&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Indigo---1---Timeline.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Indigo---1---Timeline.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---1---Timeline.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;figcaption&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Indigo&amp;#x2019;s Timeline featuring a cross-post&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;timeline&quot;&gt;Timeline&lt;/h3&gt;&lt;p&gt;The timeline is the heart of any microblogging app and it&amp;#x2019;s been the focus of most of our efforts since we started. You would not believe how complicated it is to take a scrolling list and make it update as new posts are fetched and merged from both services, media and link previews load in asynchronously, posts are deleted, your scroll position is synced between devices, and keep it all scrolling smoothly at 120 Hz. All credit to Aaron who worked on this tirelessly as I barged him with feature requests and bug reports. It&amp;#x2019;s not perfect, we&amp;#x2019;ll be the first to admit, but it&amp;#x2019;s close and continues to improve.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Posts from both services are displayed inline, using colour to indicate which service they&amp;#x2019;re from. It feels incredibly natural and you quickly stop thinking of them as separate.&amp;#xa0;&lt;/p&gt;&lt;h3 id=&quot;cross-posts&quot;&gt;&lt;strong&gt;Cross Posts&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Indigo will automatically detect when a post is duplicated across both networks. If the content is very similar and they both appear within a few minutes as each other, Indigo will merge them so you&amp;#x2019;re not seeing them twice. You can toggle between each version as well as perform actions like quoting or replying to both posts simultaneously. We&amp;#x2019;ve done a lot to make the experience of using two different services at once feel seamless.&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-gallery-card kg-width-wide kg-card-hascaption&quot;&gt;&lt;div class=&quot;kg-gallery-container&quot;&gt;&lt;div class=&quot;kg-gallery-row&quot;&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---7a---Thread.png&quot; width=&quot;1350&quot; height=&quot;2760&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Indigo---7a---Thread.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Indigo---7a---Thread.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---7a---Thread.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;div class=&quot;kg-gallery-image&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---7b---Thread-Expanded.png&quot; width=&quot;1350&quot; height=&quot;2760&quot; loading=&quot;lazy&quot; alt=&quot;Indigo&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Indigo---7b---Thread-Expanded.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Indigo---7b---Thread-Expanded.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---7b---Thread-Expanded.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Indigo&amp;#x2019;s Post Detail View, with a thread expanded to see replies&lt;/span&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;post-detail-threads&quot;&gt;Post Detail &amp;amp; Threads&lt;/h3&gt;&lt;p&gt;The post detail view is one of the most important for any social media client because it has to present the user with a lot of information and context at once. And complicated views create great opportunity to innovate. I looked around at other apps, not just microblogging clients, but apps like Slack and Reddit for how they handle threads. Any given post can have multiple replies branching out recursively creating an entire tree of branches. When you open a post, Indigo checks to see what users have been part of the conversation so far and checks the replies to see if that conversation continues, so it can display it all as a single thread. There&amp;#x2019;s even a handy little counter so you can instantly know if you&amp;#x2019;ve opened up a lengthy argument you have zero time to get involved in. Offshoot replies are still visible, you just tap the ribbon on the left to see them. It&amp;#x2019;s a little unusual at first but it quickly grows on you.&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---4---Compose.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo&quot; loading=&quot;lazy&quot; width=&quot;1350&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Indigo---4---Compose.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Indigo---4---Compose.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---4---Compose.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;figcaption&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Indigo&amp;#x2019;s Compose View&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;composing&quot;&gt;Composing&lt;/h3&gt;&lt;p&gt;We&amp;#x2019;ve iterated on the compose view we built for &lt;a href=&quot;https://apps.apple.com/ie/app/croissant-cross-posting/id6670288979%20Croissant%20-%20Cross-Posting?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Croissant&lt;/a&gt;, trying to simplify things a little bit and account for the fact that you&amp;#x2019;ll be replying and quoting in Indigo, rather than just creating new posts like in Croissant. In particular we&amp;#x2019;ve tried to make the audience options more obvious.&amp;#xa0;&lt;/p&gt;&lt;p&gt;One of the things we emphasised in Croissant was the importance of alt-text. You can type it without having to leave the compose view, and the app can also detect text in an image and copy that as the alt-text with a single tap.&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---5---Notifications.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo&quot; loading=&quot;lazy&quot; width=&quot;1350&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Indigo---5---Notifications.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Indigo---5---Notifications.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---5---Notifications.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;figcaption&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Indigo&amp;#x2019;s Notifications View&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;notifications&quot;&gt;Notifications&lt;/h3&gt;&lt;p&gt;The Notification View is another area we put a lot of time and thought into. Likes and Reposts are grouped, replies and quotes are tinted for more prominence.&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Image-2.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo&quot; loading=&quot;lazy&quot; width=&quot;1350&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Image-2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Image-2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Image-2.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;h3 id=&quot;messages&quot;&gt;Messages&lt;/h3&gt;&lt;p&gt;Bluesky and Mastodon have very different approaches to messaging. Bluesky has a proper direct message system, whereas Mastodon uses private posts. We wanted to add a little consistency, so Mastodon private posts also display as conversations, and you can tap to view the original post if necessary. There&amp;#x2019;s also a warning for Mastodon users to keep in mind that private posts aren&amp;#x2019;t encrypted and might be visible to your server admin.&lt;/p&gt;&lt;p&gt;On iOS, the notifications tab will also let you know if you have any unread messages, because you&amp;#x2019;ll probably be checking there more often.&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/IMG_8627-2.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo&quot; loading=&quot;lazy&quot; width=&quot;1350&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/IMG_8627-2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/IMG_8627-2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/IMG_8627-2.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;figcaption&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Indigo&amp;#x2019;s profile view&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;profiles&quot;&gt;Profiles&lt;/h3&gt;&lt;p&gt;For the profile view, we wanted to keep things clean and simple. So we did. For Mastodon&amp;#x2019;s custom fields, I included some fun custom icons. The menu in the top right includes controls to message, block and report accounts.&lt;/p&gt;&lt;hr&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img style=&quot;--ratio: 0.4891&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---8---Search.png&quot; class=&quot;kg-image&quot; alt=&quot;Indigo&quot; loading=&quot;lazy&quot; width=&quot;1350&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2026/05/Indigo---8---Search.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2026/05/Indigo---8---Search.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2026/05/Indigo---8---Search.png 1350w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;figcaption&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Indigo&amp;#x2019;s Search View&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;search&quot;&gt;Search&lt;/h3&gt;&lt;p&gt;The Search View features a few ways to help you find what you&amp;#x2019;re looking for, including recent searches, recently viewed profiles, and popular links among the people you follow. You can also tap on the magnifying glass in the tab bar to quickly focus the search field. We wouldn&amp;#x2019;t want you to strain your thumbs stretching all the way to the top of the screen.&lt;/p&gt;&lt;p&gt;Nuzzle was a source of inspiration for the popular links feature and it&amp;#x2019;s something we want to expand on more in future.&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;h3 id=&quot;platforms&quot;&gt;Platforms&lt;/h3&gt;&lt;p&gt;Indigo is built for iOS, iPadOS and macOS (using Catalyst). This was a pretty huge undertaking for the first version of the app, but we knew it was essential for how a lot of people engage with social media. I&amp;#x2019;ve been primarily focused on the iPhone version, while Aaron&amp;#x2019;s focused on the Mac. These means that the iPad version has had the least attention, so if you spot any weirdness, please let us know.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Indigo is not built for visionOS. If anyone at Apple would like to send us a couple of free Vision Pros, we&amp;#x2019;ll think about it (they&amp;#x2019;re probably just sitting around warehouses gathering dust, right?). Indigo is also not built for Apple Watch. You do not need social media on your wrist, we&amp;#x2019;re quite certain of that.&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;h3 id=&quot;pricing&quot;&gt;Pricing&lt;/h3&gt;&lt;p&gt;Indigo has a premium tier which we&amp;#x2019;re calling Ultraviolet. Without paying for Ultraviolet, Indigo is essentially in a read-only mode. You can see posts, but you can&amp;#x2019;t interact with them. The premium experience is very much the intended one.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Ultraviolet costs &amp;#x24;4.99 per month, &amp;#x24;34.99 per year, or &amp;#x24;119.99 as a one-time purchase. We&amp;#x2019;ve used pricing parity to adjust worldwide prices (thanks to &lt;a href=&quot;https://helm-app.com/?ref=benricemccarthy.ghost.io&quot;&gt;Helm&lt;/a&gt; for making this a breeze).&lt;/p&gt;&lt;p&gt;Please keep in mind:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Indigo is a third party client for Bluesky and Mastodon. We don&amp;#x2019;t control their APIs or product roadmaps and it&amp;#x2019;s possible that they could remove features at any point&lt;/li&gt;&lt;li&gt;While we have no current plans to limit features based on whether you subscribe or use the one-time purchase, we reserve the right to do so if necessary.&lt;/li&gt;&lt;/ul&gt;&lt;hr&gt;&lt;h3 id=&quot;we%E2%80%99re-just-getting-started&quot;&gt;We&amp;#x2019;re just getting started&lt;/h3&gt;&lt;p&gt;It&amp;#x2019;s been a long road to get here. I don&amp;#x2019;t think either of us knew when we started how big an undertaking this would be. We&amp;#x2019;ve had to juggle our work on Indigo with Aaron&amp;#x2019;s day job, my other apps, my move to London and y&amp;#x2019;know, everything else the world is just constantly been throwing at all of us. At a couple of points we almost completely thew away almost everything we&amp;#x2019;d built and started again from scratch. Once to try redo the timeline in SwiftUI (a terrible idea) and again after WWDC 25, when a lot of the custom UI behaviours I was trying to achieve suddenly became available by default, if we adopted the latest OS releases. It was rough, and progress felt almost non-existent for much of 2025, but it got us closer to the app I had envisioned from the start.&amp;#xa0;&lt;/p&gt;&lt;p&gt;At the start of this year, the core functionality of the app was finally in really good shape, and we realised it was time to start aggressively cutting planned features and focus on polishing what we&amp;#x2019;d already built so we could launch. After a few hurdles setting up a new business and a new developer account with Apple, here we are, finally ready to release Indigo into the world.&amp;#xa0;&lt;/p&gt;&lt;p&gt;There are a million features, big and small, that we decided to push back until after launch, many of which it pained me to delay. But the upside is we can now build more in public and get feedback from users about what matters most to them so we can grow Indigo together.&amp;#xa0;&lt;/p&gt;&lt;p&gt;And bringing people together is what it&amp;#x2019;s always been about.&lt;/p&gt;&lt;p&gt;Ben &amp;amp; Aaron&lt;/p&gt;&lt;div class=&quot;kg-card kg-button-card kg-align-left&quot;&gt;&lt;a href=&quot;https://apps.apple.com/us/app/indigo-for-bluesky-mastodon/id6763755310?ref=benricemccarthy.ghost.io&quot; class=&quot;kg-btn kg-btn-accent&quot;&gt;Indigo on the App Store&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>Obscura’s 10th Anniversary</title><link>https://benricemccarthy.com/blog/obscuras-10th-anniversary/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/obscuras-10th-anniversary/</guid><description>I don’t think anyone is more shocked than I am that it’s been 10 years since Obscura launched. I went to college to study graphic design, and while our course covered a broad range of design skills and applications, I…</description><pubDate>Mon, 30 Jun 2025 13:57:44 GMT</pubDate><content:encoded>&lt;p&gt;I don&amp;#x2019;t think anyone is more shocked than I am that it&amp;#x2019;s been 10 years since Obscura launched.&amp;#xa0;&lt;/p&gt;&lt;p&gt;I went to college to study graphic design, and while our course covered a broad range of design skills and applications, I always knew that user interface design was what I wanted to be doing as a career. I also grew up with parents who were self-employed for most of my childhood, so the vague idea I had in mind was that I would be designing apps while someone else would build them.&lt;/p&gt;&lt;p&gt;In my second year, about 11 years ago, I had a three week web design module in college that taught the basics of HTML and CSS. I was instantly hooked. Writing code had always seemed like a daunting task, but a little bit of markup was enough to break the seal and let me realise that it was both doable and enjoyable. I also realised that I was going to have a hard time convincing anyone to build my designs if I couldn&amp;#x2019;t afford to pay them or have an idea so earth-shattering that they&amp;#x2019;d leave their job to join my mission. Learning how to build apps myself seemed like the most viable option.&lt;/p&gt;&lt;p&gt;So I downloaded Xcode, spent far too long dealing with certs and provisioning profiles, and tried to follow the Stanford courses in iTunes U. Having absolutely no foundations in computer science, most of it went over my head. But I muddled through via trial and error and a lot of Stack Overflow, and after about 3 months, I released my first app, Agile onto the store.&amp;#xa0;Agile is a very simple game, inspired by the carnival staple Whac-a-Mole, where you have to tap on dots as quickly as they appear. It wasn&amp;#x2019;t a huge hit but it made back the &amp;#x24;100 developer license fee so I felt justified in continuing for another year at the very least.&amp;#xa0;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.4759&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/06/Frame-3-2.png&quot; class=&quot;kg-image&quot; alt=&quot;Obscura&amp;#x2019;s 10th Anniversary&quot; loading=&quot;lazy&quot; width=&quot;1520&quot; height=&quot;3194&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2025/06/Frame-3-2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2025/06/Frame-3-2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/06/Frame-3-2.png 1520w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;br&gt;&lt;strong&gt;Obscura&amp;#xa0;&lt;/strong&gt;&lt;br&gt;During my work on Agile, WWDC 2014 happened, in which Apple introduced the first manual camera APIs. It was now possible to take control of the iPhone&amp;#x2019;s camera hardware like never before, letting apps just things like focus, shutter speed and white balance directly. Better still, Apple chose not to adopt any of this pro features in their camera app, so it created a niche for the kind of pro camera app that more closely replicated the experience of using a DSLR.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Over the course of the next year, I worked away on the little camera app that would become Obscura. It&amp;#x2019;s working title was Gothm (a nod to the retired Instragam filter with a small cult following) and later I sat with a friend trying to think of a punny name based on some sort of &lt;em&gt;obscure&lt;/em&gt; camera terminology that the name hit me.&amp;#xa0;&lt;/p&gt;&lt;p&gt;In 2015 I spent the summer in San Francisco with a couple of friends. I&amp;#x2019;d been offered an internship at Apple on the Camera app team, but because of visa reasons, it didn&amp;#x2019;t work out. If it had, I probably wouldn&amp;#x2019;t have been able to launch Obscura that summer and I wouldn&amp;#x2019;t be here writing this blog post. Instead, I launched Obscura at the end of June with a little more fanfare than Agile had received, thanks to some of the connections I had made working at &amp;#xda;ll.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Obscura was originally free with in-app-purchases to unlock filters, but I later switched it to be paid up front, right before Christmas that year. It got featured on the front of the App Store, which meant Obscura went from having made about &amp;#x24;600 total in its first 5 months to over &amp;#x24;10,000 in the space of few weeks. This had a dramatic impact on how much effort I put into my remaining few months of college.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.4938&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/06/O2---X-framed-1.png&quot; class=&quot;kg-image&quot; alt=&quot;Obscura&amp;#x2019;s 10th Anniversary&quot; loading=&quot;lazy&quot; width=&quot;990&quot; height=&quot;2005&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2025/06/O2---X-framed-1.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/06/O2---X-framed-1.png 990w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Obscura 2&lt;/strong&gt;&lt;br&gt;I spent 2017 living in New York, interning at an app development studio and working on Obscura 2 in my spare time. One of the main goals with Obscura 2 was to better accommodate the increased screen sizes of the iPhone 6 and 6 Plus. That involved making many of the controls more gestural and introduced a Control Wheel for changing settings in a way that felt like the dials of a DSLR. The iPhone&amp;#x2019;s haptic engine really made this shine.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Given the lack of upgrade pricing on the store it made sense to release it as a separate app. I was honoured that Obscura 2 was awarded Editors&amp;#x2019; Choice on launch and it really started to become a more viable business.&lt;/p&gt;&lt;p&gt;I had help with the Control Wheel from my friend Adam and in 2019 we worked on a calendar app that never made it to launch. After a year of declining sales of Obscura 2, I decided to go back to what was familiar and started work on Obscura 3.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5075&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/06/Dropped-Screenshot.png&quot; class=&quot;kg-image&quot; alt=&quot;Obscura&amp;#x2019;s 10th Anniversary&quot; loading=&quot;lazy&quot; width=&quot;1419&quot; height=&quot;2796&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2025/06/Dropped-Screenshot.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2025/06/Dropped-Screenshot.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/06/Dropped-Screenshot.png 1419w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;br&gt;&lt;strong&gt;Obscura 3&lt;/strong&gt;&lt;br&gt;Much like Obscura 2 was designed for larger iPhone screens, Obscura 3 was designed for modern iPhones with no home buttons and multiple rear cameras. The rear cameras introduced a tonne of complexity in how camera apps operate as when both (or all three) cameras are active, you can&amp;#x2019;t use features like manual focus or white balance. So you have to make tradeoffs between speed and ease of use versus giving the user more control. Obscura 3 offered multiple modes that could be better tailored to specific needs, like shooting RAW or Live Photos.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5040&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/06/Frame.png&quot; class=&quot;kg-image&quot; alt=&quot;Obscura&amp;#x2019;s 10th Anniversary&quot; loading=&quot;lazy&quot; width=&quot;1530&quot; height=&quot;3036&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2025/06/Frame.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2025/06/Frame.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/06/Frame.png 1530w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Obscura 4&lt;/strong&gt;&lt;br&gt;Obscura 4 was in large part an opportunity to rewrite much the interface in SwiftUI, allowing for more seamless transitions between various controls and views. It placed greater emphasis on the zoom control, as iPhone&amp;#x2019;s with multiple rear cameras were now the standard.&lt;/p&gt;&lt;p&gt;It also marked the shift to a subscription model which has made working on Obscura much more sustainable, allowing me to experiment with new apps and take on design consulting work, all of which has been a huge success.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Working on Obscura has been a true labour of love and the fact that it&amp;#x2019;s been able to (more or less) support me financially has been a dream come true. I&amp;#x2019;m constantly striving to make it the best it can be, because I know the joy that can be found it creating art with tools you love. It&amp;#x2019;s why I fell in love with computers and photography and I am forever honoured that I get to build such a tool for other&amp;#x2019;s to use. &lt;/p&gt;&lt;hr&gt;&lt;p&gt;There&amp;#x2019;s simply no way that Obscura would be here today if it wasn&amp;#x2019;t for the support  of the whole ecosystem of the Apple community. From folks within Apple to the podcasters and journalists who&amp;#x2019;ve been covering Obscura, to the fellow designers and developers who&amp;#x2019;ve become some of my dearest friends. There are far too many people to thank individually but if you&amp;#x2019;re reading this, there&amp;#x2019;s a very good chance you are one of them. It&amp;#x2019;s hard to find the words to express how deep my gratitude runs, but from the bottom of my heart, thank you for making this possible.&lt;/p&gt;&lt;p&gt;Ben.&lt;/p&gt;</content:encoded></item><item><title>Introducing Obscura Studio</title><link>https://benricemccarthy.com/blog/introducing-obscura-studio/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/introducing-obscura-studio/</guid><description>The Studio If you’ve heard me talk about Obscura before, you’ve probably heard me mention that my dad is a professional photographer.</description><pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;The Studio&lt;/strong&gt;&lt;br&gt;If you&amp;#x2019;ve heard me talk about Obscura before, you&amp;#x2019;ve probably heard me mention that my dad is a professional photographer. For most of my childhood, he worked out of a former 18th century police station, affectionately known as The Studio. Many afternoons were spent there. While he worked, I messed around on his PowerMac, playing the handful of Mac games available at the time (Tomb Raider and Myst gave me a love of puzzles and Black &amp;amp; White gave me a god complex), and learning my way around Photoshop. You can trace a pretty clear path from those days to my work today. So &amp;#x201c;Studio&amp;#x201d; felt like a fitting moniker for an app that I expect to spend a lot of time in.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Write Accidentally, Edit Sober&lt;/strong&gt;&lt;br&gt;Obscura Studio is an app I&amp;#x2019;ve wanted to make for almost as long as I&amp;#x2019;ve been working on Obscura. An image editor is a natural companion to a camera, but it always seemed like a herculean task, a project I might eventually get to one day, but definitely not today. It was only in building most of it unintentionally that it began to seem possible.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Over the past year I&amp;#x2019;ve been working on a big refactor of Obscura, in large part to better accommodate the changes required for Lock Screen camera extensions. While I had hoped that would be ready in time for Obscura&amp;#x2019;s 10th anniversary, that has been looking less and less likely for a while now. I&amp;#x2019;ve been working on separating the app out into different components that have fewer dependencies on each other, making for cleaner, more reliable code. One of those components is Obscura&amp;#x2019;s whole image processing system, that handles the image filters.&amp;#xa0;&lt;/p&gt;&lt;p&gt;I&amp;#x2019;ve wanted to revamp those filters for quite some time. While there are a few gems in there, quite a few have limited utility or don&amp;#x2019;t differentiate themselves enough. Creating or tweaking the filters is a pain because they&amp;#x2019;re entirely written in code, and tweaking B&amp;#xe9;zier curves by setting coordinates isn&amp;#x2019;t fun. So I started work on a tool for my own use that would give me a bunch of sliders to tweak the parameters of the filters and then I could copy those settings back into Xcode.&amp;#xa0;&lt;/p&gt;&lt;p&gt;During that work, a customer emailed me asking if it would ever be possible for users to customise the filters within Obscura. Given that I was already in the process of building that, I figured why not try and make the whole process a little more user friendly. In doing so, I realised I had more or less built a photo editor, albeit one with just a few hardcoded images and a lot of rough edges. So this internal tool began to grow in scope, in complexity, and in polish. Needless to say, there was a lot of work beyond just the photo editing itself; it needed to integrate with user&amp;#x2019;s photo library, save and restore edits, and allow for filters to be created and saved within the app. Thankfully much of this was familiar territory and was work I had wanted to revisit as part of Obscura&amp;#x2019;s refactor anyway and it&amp;#x2019;s been very satisfying getting to think about these two projects in tandem.&amp;#xa0;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5128&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/06/IMG_1477-2.png&quot; class=&quot;kg-image&quot; alt=&quot;Introducing Obscura Studio&quot; loading=&quot;lazy&quot; width=&quot;1484&quot; height=&quot;2894&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2025/06/IMG_1477-2.png 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2025/06/IMG_1477-2.png 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/06/IMG_1477-2.png 1484w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Obscura Studio&lt;/strong&gt;&lt;br&gt;Obscura Studio features a bunch of tools to help you edit your photos. There are sliders for things like Exposure, Contrast, and Saturation as well as a Curves tool and HSL sliders for precise colour adjustments.&lt;/p&gt;&lt;p&gt;There are also a bunch of default filters, all built using the same editing tools available to users, so you can start with a preset filter and then continue editing to make it your own. Filters can be saved for repeated use, and in a future update, it&amp;#x2019;ll support sharing and importing those filters too. I&amp;#x2019;m also planning for those filters to be cross compatible with the next major version of Obscura, so you&amp;#x2019;ll be able to create your own filters and use them live in camera.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Given the integration with Obscura, if you&amp;#x2019;ve subscribed to Obscura Ultra, then your subscription also covers Obscura Studio. If not, you can opt for the cheaper Obscura Studio+ subscription for just the editing tools without the camera features.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Right now, Obscura Studio is just available on iPhone. Thanks to a frustrating SwiftUI bug, the iPad and Mac version has been delayed, but hopefully will be ready soon. And when those versions are ready, your filters and edits will sync between devices, allowing for great flexibility in your editing workflow.&amp;#xa0;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;And so here we are at Obscura&amp;#x2019;s 10th anniversary and I&amp;#x2019;m incredibly excited to share Obscura Studio with the world. While there&amp;#x2019;s a whole bunch of features I wish were there on day one, sometimes it&amp;#x2019;s better to ship and iterate, and a deadline can be a great motivator. Hopefully a decade from now Obscura Studio will have evolved just as much as Obscura has since its launch.&amp;#xa0;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;a href=&quot;https://apps.apple.com/us/app/obscura-studio/id6744744794?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Download Obscura Studio on the App Store&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Fuck Left AirPods</title><link>https://benricemccarthy.com/blog/fuck-left-airpods/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/fuck-left-airpods/</guid><description>Last November I had an issue where my left AirPod (second generation Pro) would occasionally fail to charge in the case and I’d wake up to find it dead.</description><pubDate>Thu, 08 May 2025 09:45:44 GMT</pubDate><content:encoded>&lt;p&gt;Last November I had an issue where my left AirPod (second generation Pro) would occasionally fail to charge in the case and I&amp;#x2019;d wake up to find it dead. Not every day, but it was happening enough that it was becoming a real nuisance.&amp;#xa0;&lt;/p&gt;&lt;p&gt;I contacted Apple support, who had me bring it to Select (an authorised reseller, we have no actual Apple Stores here in the Republic of Ireland). They replaced the AirPod, for over &amp;#x20ac;112, which is a ridiculous amount of money on top of the &amp;#x20ac;279 that the original set cost, but I just wanted the problem solved&amp;#x2026; but a few weeks later, I woke to a dead AirPod once again. It seems pretty evident to me that the issue is with the case, it seems highly unlikely that the brand new left AirPod would fail so quickly in exactly the same fashion.&lt;/p&gt;&lt;p&gt;I spent weeks being sent in circles trying to get Apple or Select to admit the issue was misdiagnosed and the repair had failed. Multiple calls in which I was asked to reset my AirPods to see if that fixed the problem (how could I possibly know, it happens intermittently, without any pattern). After taking hours out of my day on more than one occasion to visit Select, eventually a very kind Apple support guy said to send it to Apple directly. So I send it off, go another week without my AirPods, and returned to me is my original AirPods case and two fresh new AirPods.&amp;#xa0;&lt;/p&gt;&lt;p&gt;That was in January. I just sat down in front of my Mac to see the Battery Widget pinned to my desktop showing a left AirPod with a sad red arc above it.&amp;#xa0;&lt;/p&gt;&lt;p&gt;AirPods Pro offer an incredible experience when everything works smoothly, but my god, I have never owned a more frustrating Apple product in the 20 odd years I&amp;#x2019;ve been using them.&lt;/p&gt;&lt;p&gt;Right AirPod, I&amp;#x2019;m sorry you got caught up in this.&amp;#xa0;&lt;/p&gt;</content:encoded></item><item><title>Contabulation</title><link>https://benricemccarthy.com/blog/contabulation/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/contabulation/</guid><description>For a long while, I’ve felt that the design of iOS is too top heavy. While our phones seem to grow larger every year, our hands do not and so interface elements are pulled ever further out of reach.</description><pubDate>Wed, 23 Apr 2025 13:09:53 GMT</pubDate><content:encoded>&lt;p&gt;For a long while, I&amp;#x2019;ve felt that the design of iOS is too top heavy. While our phones seem to grow larger every year, our hands do not and so interface elements are pulled ever further out of reach. It&amp;#x2019;s a real micro-annoyance to have to shuffle your phone around in your hand to reach the top of the screen to activate a search bar, shuffle your phone back down so you can type comfortably and in doing so you accidentally touch part of the screen that deactivates the search field and you have to start again.&amp;#xa0;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5623&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/04/IMG_0200.PNG&quot; class=&quot;kg-image&quot; alt=&quot;Contabulation&quot; loading=&quot;lazy&quot; width=&quot;1552&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2025/04/IMG_0200.PNG 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2025/04/IMG_0200.PNG 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/04/IMG_0200.PNG 1552w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;Accommodations have been made for our larger phones. Reachability lets you momentarily shift the contents of the screen down, but it can be prone to causing accidental input and has gotten harder to activate as it conflicts with the Type-to-Siri gesture. Swiping from the left edge to navigate backwards is near ubiquitous, but implementing the more comfortable &amp;#x201c;sloppy swiping&amp;#x201d; that lets you navigate by swiping anywhere on screen is a pain to implement, and can lead to bugs where navigation state gets conflicted.&lt;/p&gt;&lt;p&gt;Working on &lt;a href=&quot;https://apps.apple.com/ie/app/obscura-pro-camera/id1579306989?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Obscura&lt;/a&gt; highlighted the importance of keeping all an app&amp;#x2019;s most important controls within easy reach, as having to adjust your grip or use a second hand to tweak a setting can cost you a photo opportunity. While a camera app is quite a unique use case, I think the principle that the most important actions of your app should be the easiest to reach is universal. When I consulted on &lt;a href=&quot;https://apps.apple.com/ie/app/callsheet-find-cast-crew/id1672356376?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Casey Liss&amp;#x2019;s Callsheet&lt;/a&gt;, I insisted that he put the search bar at the bottom, as it&amp;#x2019;s the element that almost every user is going to use almost every time they open the app. While Casey was reluctant at first, because it&amp;#x2019;s a lot more work to implement a custom search field at the bottom of the screen than to use the default system one at the top of the screen, attached to a Navigation Bar, he was convinced after trying it out, and the customer response was emphatically positive.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 2.0025&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/04/IMG_0204.JPG&quot; class=&quot;kg-image&quot; alt=&quot;Contabulation&quot; loading=&quot;lazy&quot; width=&quot;1600&quot; height=&quot;799&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2025/04/IMG_0204.JPG 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2025/04/IMG_0204.JPG 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/04/IMG_0204.JPG 1600w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;If search is the primary form of navigation, as in Safari, Maps, or Callsheet, it should be at the bottom. If a search bar is just used for filtering content already on screen, then it can make more sense to leave it at the top, as scrolling is probably the more natural way to find what you&amp;#x2019;re looking for (the Settings app is a good example of this). So I&amp;#x2019;m delighted at the rumours that iOS 19&amp;#x2019;s Tab Bars can adapt into Search Bars when needed. I think it&amp;#x2019;ll be big improvement and allow for more flexible navigation patterns with less code.&amp;#xa0;&lt;/p&gt;&lt;p&gt;But my frustrations with navigation on iOS and Tab Bars in particular go further than that, so here are a few things I hope to see improved:&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5623&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/04/IMG_0201.PNG&quot; class=&quot;kg-image&quot; alt=&quot;Contabulation&quot; loading=&quot;lazy&quot; width=&quot;1552&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2025/04/IMG_0201.PNG 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2025/04/IMG_0201.PNG 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/04/IMG_0201.PNG 1552w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Support for Actions &amp;amp; Context Menus&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Tab Bars have been around since iPhoneOS 1 and have evolved shockingly little since then, even as apps grow ever more complex. Allowing Tab Bars to do more than just switch tabs would create opportunities for more complex navigation and interaction without sacrificing screen real estate, and do so in a consistent and predicable way for users.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Currently Tab Bars can only switch tabs, and require workarounds to perform common actions like showing a sheet to compose a new email.&amp;#xa0;&lt;/p&gt;&lt;p&gt;For example, a social media client could have a New Post button that lets you long press to open your drafts or a Profile tab could show a menu showing all your accounts letting you quickly switch between them.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Toolbars behave similarly to Tab Bars and allow for actions and menus but you can&amp;#x2019;t mix and match TabItems and ToolbarItems, limiting the behaviour of these bars.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5623&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/04/IMG_0206.PNG&quot; class=&quot;kg-image&quot; alt=&quot;Contabulation&quot; loading=&quot;lazy&quot; width=&quot;1552&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2025/04/IMG_0206.PNG 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2025/04/IMG_0206.PNG 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/04/IMG_0206.PNG 1552w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Support for More Tabs&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Right now, Tab Bars support up to 5 items. Once you add a sixth, the fifth button gets replaced with a generic More button and tapping it shows a generic UIKit/SwiftUI List with the overflow. This overflow list can&amp;#x2019;t be customised (in SwiftUI at least, as it exists entirely within the Tab Bar&amp;#x2019;s implementation) and so looks incongruous to any app with a bespoke appearance.&amp;#xa0;&lt;/p&gt;&lt;p&gt;A very quick and easy solution would be to just use a context menu for the overflow items; that would at least keep things within easy reach and there wouldn&amp;#x2019;t be a concern about style conflicts. But I&amp;#x2019;d really love to see a more novel approach. Tab Bars on iOS are supposed to be interchangeable with Sidebars on iPadOS (and macOS) but sidebars naturally support any number of items, with collapsible sections, so you either optimise for 5 tabs, and limit the possible sidebar items, or deal with the overflow. Scrolling tab bars are one option, showing partial sidebars that don&amp;#x2019;t cover the whole screen (hamburger menus) is another.&amp;#xa0;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5623&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/04/IMG_0208.PNG&quot; class=&quot;kg-image&quot; alt=&quot;Contabulation&quot; loading=&quot;lazy&quot; width=&quot;1552&quot; height=&quot;2760&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2025/04/IMG_0208.PNG 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2025/04/IMG_0208.PNG 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2025/04/IMG_0208.PNG 1552w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;User Generated Tabs&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;So far I&amp;#x2019;ve been discussing tabs as a way of navigation between different views of the app created by the developer, but I haven&amp;#x2019;t mentioned tabs like how we think of them in a browser.&amp;#xa0;On macOS, document based apps (think apps like Pages or Numbers) can display tabs for a number of open documents on screen, letting you quickly switch between them. (I think this used to also be the case on iPadOS but isn&amp;#x2019;t any longer??). And switching between tabs is a great navigation pattern. A Wikipedia app could let you keep multiple pages open at once, quickly switching between them without losing your place.&amp;#xa0;&lt;/p&gt;&lt;p&gt;It&amp;#x2019;s baffling to me that there&amp;#x2019;s no system provided solution to this and as a result, so many iOS apps consist of going back and forth between lists and detail views, up and down the navigation stack, when lateral navigation would be more efficient.&amp;#xa0;&lt;/p&gt;&lt;p&gt;I built a simple version of this for my app &lt;a href=&quot;https://apps.apple.com/ie/app/ketchup-for-pok%C3%A9mon/id6477297968?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Ketchup&lt;/a&gt;, and while it doesn&amp;#x2019;t do everything I&amp;#x2019;d like (save scroll position, for example) it does let you quickly switch between recent pages, saving you time as you cross reference information.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Ultimately, I think the simplicity of Tab Bars as they exist today don&amp;#x2019;t account for the complexities of modern apps. I&amp;#x2019;m hoping the iOS 19 changes allow for much more flexibility and opportunities to experiment. I guess we&amp;#x2019;ll find out in June.&lt;/p&gt;</content:encoded></item><item><title>I Bought an iPad mini</title><link>https://benricemccarthy.com/blog/i-bought-an-ipad-mini/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/i-bought-an-ipad-mini/</guid><description>I didn’t want to, but it happened. It’s been a while since I last bought a new iPad (a 2018 12.9&amp;quot; iPad Pro).</description><pubDate>Thu, 07 Nov 2024 11:10:00 GMT</pubDate><content:encoded>&lt;p&gt;I didn&amp;#x2019;t want to, but it happened.&lt;/p&gt;&lt;p&gt;It&amp;#x2019;s been a while since I last bought a new iPad (a 2018 12.9&amp;quot; iPad Pro). The iPad is a really fascinating device, in many ways the most capable device Apple makes, and in others, the most lacking.&amp;#xa0;&lt;/p&gt;&lt;p&gt;That 2018 iPad is starting to get a little long in the tooth. Despite feeling overpowered when it was new, time and iPadOS updates have left it feeling a little sluggish, the battery is in poor shape, and its gorgeous OLED display is starting to yellow around the edges (the same is happening to our 2018 LG TV, so I&amp;#x2019;m feeling a little less enamoured with OLED these days).&amp;#xa0;&lt;/p&gt;&lt;p&gt;The device I really wanted to upgrade to is the 2024 11&amp;quot; iPad Pro (&amp;#x20ac;1229). I got to play around with Chris Lawley&amp;#x2019;s at WWDC this year, and was instantly smitten by the display, which made everything look like a high quality printed magazine. The downside is, to get the nano texture option, you need to buy an iPad with at least 1TB of storage (&amp;#x20ac;1959). The nano texture display itself brings that up to &amp;#x20ac;2089. If I&amp;#x2019;m spending that amount of money on an iPad, I want it to last a good few years. And if I want it to last a good few years, I think I want to add the cellular capability, because it will almost certainly come in handy at some point, right? &amp;#x20ac;2339.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Oh, don&amp;#x2019;t forget, there&amp;#x2019;s a new Apple Pencil (&amp;#x20ac;149) and I&amp;#x2019;ll need a cover (&amp;#x20ac;89) to keep it safe. &amp;#x20ac;2577.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Did I mention that the iPad doesn&amp;#x2019;t run Xcode or Sketch, the two apps I spend the vast majority of my working time in?&lt;/p&gt;&lt;p&gt;So I closed the tab and bought an iPad mini (256GB), with a pencil and cover for &amp;#x20ac;967. Still feels like too much, but a lot more in line with the value I&amp;#x2019;m likely to get out of this thing.&amp;#xa0;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Okay but is the iPad mini any good?&lt;/strong&gt;&lt;br&gt;Yeah, it rocks. It&amp;#x2019;s such a delightful little bundle of technology.&amp;#xa0;&lt;/p&gt;&lt;p&gt;I spent a good chunk of both Saturday and Sunday out taking photos of autumnal nature, and then editing photos on the iPad in the evening. Darkroom runs pretty well on it (it seemed to occasionally struggle with iCloud Photo Library changes), and working on a display larger than my phone, but small enough that it didn&amp;#x2019;t feel like work made for a really nice experience.&lt;/p&gt;&lt;p&gt;The Apple Pencil Pro is a nice upgrade. The hover effects really make these devices feel like they&amp;#x2019;re made for each other. &amp;#xa0;&lt;/p&gt;&lt;p&gt;It is the perfect size of device for playing Balatro while you watch TV in the evening.&amp;#xa0;This is a very important quality to have.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Downsides:&lt;/strong&gt;&lt;br&gt;I really wanted to buy a silver iPad. My laptop is silver, my Mac Studio and Studio display are silver, my Apple Watch is silver. I know a lot of people want more colourful devices, I just want mine to match. It&amp;#x2019;s baffling that Apple never seems to get all their product lines aligned in this. I absolutely love the white cover, though I expect it won&amp;#x2019;t age all that gracefully. Also, the margins on these smart covers must be absurd. I&amp;#x2019;m a sucker, I know.&amp;#xa0;&lt;/p&gt;&lt;p&gt;I&amp;#x2019;m very aware of the screen&amp;#x2019;s refresh rate. I&amp;#x2019;m not sure why it stands out to me more than on my Mac&amp;#x2019;s display, but it does (I guess iOS has a lot more animations?). It&amp;#x2019;s far from a dealbreaker, but I think this has pushed me into the camp that it&amp;#x2019;s time for higher refresh rates across Apple&amp;#x2019;s entire lineup. Thankfully jelly scrolling is not an issue. (I remain curious as to why it&amp;#x2019;s not referred to as Jello Scrolling in the US.)&lt;/p&gt;&lt;p&gt;Going back to TouchID feels like a real shame. I know it has its fans, but FaceID is far more reliable for me, and feels 100&amp;#xd7; more natural on the iPad. A big thumbs down here. The upcoming iPhone SE is expected to have FaceID and cost about as much as the iPad mini, just saying.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Widgets on the Home Screen feel comically small, they&amp;#x2019;re significantly smaller than on my phone. A medium widget on the iPhone takes the space of eight app icons. On the iPad, the same widget takes up two icon spaces. The same proportions are used across all iPads, but this feels boneheaded. The widget sidebar is an even worse offender though, as the widgets only take up half the screen. It feels ridiculous. And I have very good eyesight. If features like Stage Manager are going to be limited to larger iPads, then you have to put in the effort to optimise each device&amp;#x2019;s layout.&amp;#xa0;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img style=&quot;--ratio: 1.3333&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2024/11/IMG_0052.jpeg&quot; class=&quot;kg-image&quot; alt=&quot;I Bought an iPad mini&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1500&quot; srcset=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w600/2024/11/IMG_0052.jpeg 600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1000/2024/11/IMG_0052.jpeg 1000w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w1600/2024/11/IMG_0052.jpeg 1600w, https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/size/w2400/2024/11/IMG_0052.jpeg 2400w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;figcaption&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;My phone and iPad mini side by side, demonstrating how absurdly small the widgets are.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Taking a screenshot with all the buttons on the same edge feels surprisingly awkward. I&amp;#x2019;ve had to brace the iPad against my chest or use a second hand quite a few times. It&amp;#x2019;s not a big deal, but it&amp;#x2019;s something I never would have considered before running into it myself.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;The list of downsides seems longer because they&amp;#x2019;re a lot easier to write about, but don&amp;#x2019;t get the wrong impression, the iPad mini already feels like a really great addition to my life. I&amp;#x2019;m looking forward to using it more and more.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Also they should make the iPad Pro cheaper.&lt;/p&gt;</content:encoded></item><item><title>Croissant</title><link>https://benricemccarthy.com/blog/croissant/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/croissant/</guid><description>I’m very pleased to announce Croissant , a brand new app for cross-posting to Bluesky, Mastodon, and Threads. Over the summer, I began helping Aaron Vegh with the design of his blogging platform.</description><pubDate>Thu, 10 Oct 2024 10:36:46 GMT</pubDate><content:encoded>&lt;p&gt;I&amp;#x2019;m very pleased to announce &lt;a href=&quot;https://apps.apple.com/us/app/croissant-cross-posting/id6670288979?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Croissant&lt;/a&gt;, a brand new app for cross-posting to Bluesky, Mastodon, and Threads.&lt;/p&gt;&lt;p&gt;Over the summer, I began helping &lt;a href=&quot;https://mastodon.social/@Aaronvegh?ref=benricemccarthy.ghost.io#.&quot; rel=&quot;noreferrer&quot;&gt;Aaron Vegh&lt;/a&gt; with the design of his blogging platform. One of its features was the ability to post directly to Mastodon in addition to your own blog. That struck a chord with me and I was curious if it could be expanded to other social networks. I asked Aaron if that&amp;#x2019;s something he&amp;#x2019;d considered, but he wanted to focus on the blogging side of things for the time being.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Around that time, I found myself getting increasingly frustrated with the experience of trying to post to multiple social networks at once, especially from my phone. I&amp;#x2019;d started selling some photography wallpaper packs and was trying to promote them everywhere I could. But trying to write a post, attach multiple images, write alt-text descriptions for each image and then copy and paste everything while swiping between multiple apps felt much more tedious than it should be. And heaven forbid you make a typo, or want to rearrange the images, you almost have to start over from scratch.&lt;/p&gt;&lt;p&gt;So I thought, how hard can it be to improve on that? I had a few days where I was feeling a little run down. Not so bad that I should take the day off, but enough that I didn&amp;#x2019;t want to tackle anything complicated. So I opened up Sketch and began throwing some ideas together which quickly turned into a SwiftUI prototype. After a few days I showed it to Aaron and asked if he was interested in working on this together or if it was something I should just pursue myself. He immediately dropped everything else to focus on Croissant.&lt;/p&gt;&lt;p&gt;We worked incredibly quickly, motivated in part by &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/revenuecat-ship-a-ton/?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;RevenueCat&amp;#x2019;s Ship-a-Ton&lt;/a&gt; competition, but also because we didn&amp;#x2019;t want to invest a tonne of time into a project that might appeal to no one but ourselves. Once the app was somewhat presentable, I began showing it to a few close friends who immediately got it. Myke Hurley pushed me to get a TestFlight beta ready as soon as possible to make his life easier during the &lt;a href=&quot;https://www.youtube.com/watch?v=D-JZH0FX_TE&amp;amp;ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;12 hour long Relay Podcastathon&lt;/a&gt;. I couldn&amp;#x2019;t be more happy to have helped out in a small way. Myke also told me about Buffer (we were working so fast that market research wasn&amp;#x2019;t really a consideration!), a similar offering aimed at social media professionals. But Buffer&amp;#x2019;s pricing was almost 10 times what we had in mind for Croissant, and way outside what I think most independent creators would be able to afford. For many folks like us, social media is a very important part of the job, but it&amp;#x2019;s not our main focus, nor should it be.&amp;#xa0;&lt;/p&gt;&lt;p&gt;As we got closer to launching, we started teasing Croissant on social media (slightly hard to conceal when Mastodon shows the service you use to post!) and it started generating quite a bit of buzz that was a great motivation to get it out the door. Frustratingly, we were slowed down by Meta, who&amp;#x2019;s API for Threads requires a whole separate App Review (a shiver just went down the spine of any app developer reading this) as well as a whole business verification process. Not quite as an Open Web experience as Mastodon and Bluesky, but after a week or so we made it through the various hoops and were finally ready to launch.&lt;/p&gt;&lt;p&gt;I&amp;#x2019;ve always been a big fan of puns and wordplay, and many jokes cropped up over the course of Croissant&amp;#x2019;s development. As I started writing the announcement post, more and more puns kept jumping out at me and I couldn&amp;#x2019;t resist leaning fully into the bit. You should &lt;a href=&quot;https://mastodon.social/@BenRiceM/113232524624004676?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;check out the thread&lt;/a&gt;, I think it&amp;#x2019;s some of my best copywriting.&lt;/p&gt;&lt;p&gt;Working with Aaron has been a blast so far, it&amp;#x2019;s a great experience waking up each morning to see the progress he&amp;#x2019;s made. We both have big plans for how to improve Croissant going forward, and we&amp;#x2019;ve been &lt;a href=&quot;https://techcrunch.com/2024/10/01/croissant-debuts-a-cross-posting-app-for-threads-bluesky-and-mastodon/?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;thrilled&lt;/a&gt; &lt;a href=&quot;https://www.macstories.net/reviews/croissant-a-beautifully-designed-app-for-cross-posting-to-multiple-social-media-accounts/?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;with&lt;/a&gt; &lt;a href=&quot;https://sixcolors.com/post/2024/10/croissant-simplifies-social-media-cross-posting-on-ios/?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;https://daringfireball.net/linked/2024/10/07/croissant?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;response&lt;/a&gt; so far, we think it has a very bright future ahead.&lt;/p&gt;&lt;p&gt;If you haven&amp;#x2019;t already, you can &lt;a href=&quot;https://apps.apple.com/us/app/croissant-cross-posting/id6670288979?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;download Croissant on the App Store&lt;/a&gt;.&amp;#xa0;&lt;/p&gt;</content:encoded></item><item><title>SF Botanicals</title><link>https://benricemccarthy.com/blog/sf-botanicals/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/sf-botanicals/</guid><description>I spent Saturday afternoon walking around Golden Gate Park, taking over 1200 photos, all using Obscura. It was a really great experience and I just felt in the zone from start to finish.</description><pubDate>Wed, 19 Jun 2024 14:16:08 GMT</pubDate><content:encoded>&lt;p&gt;I spent Saturday afternoon walking around Golden Gate Park, taking over 1200 photos, all using Obscura. It was a really great experience and I just felt in the zone from start to finish. &lt;/p&gt;&lt;p&gt;The only downside was shooting a whole lot of ProRAW photos under the heat of the midday sun meant my phone was cooking itself and chewing through its battery. This meant having to stop several times, alternating between letting it cool down and plugging it into a portable battery to stay alive. I even resorted to dipping some napkins in a stream to help speed up the cooling. I guess I wouldn&amp;#x2019;t be too mad if the iPhone 16 Pro had a fan.&lt;/p&gt;&lt;p&gt;As I was shooting, I could tell that many of these photos would make great wallpapers and it motivated me to do something I&amp;#x2019;ve been thinking about doing for years: releasing some wallpaper packs.&lt;/p&gt;&lt;p&gt;So here they are, SF Botanicals Verdant and Monochrome. 15 photos in each, all shot with Obscura on a 15 Pro Max (mostly with the 5&amp;#xd7; lens) and edited in Darkroom. &lt;/p&gt;&lt;p&gt;SF Botanicals Verdant: &lt;a href=&quot;https://benricem.gumroad.com/l/sfbv?ref=benricemccarthy.ghost.io&quot;&gt;https://benricem.gumroad.com/l/sfbv&lt;/a&gt;&lt;/p&gt;&lt;p&gt;SF Botanicals Monochrome: &lt;a href=&quot;https://benricem.gumroad.com/l/sfbm?ref=benricemccarthy.ghost.io&quot;&gt;https://benricem.gumroad.com/l/sfbm&lt;/a&gt;&lt;/p&gt;&lt;p&gt;If you buy either or both of them, I&amp;#x2019;d love to hear what you think!&lt;/p&gt;</content:encoded></item><item><title>Ketchup</title><link>https://benricemccarthy.com/blog/ketchup/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/ketchup/</guid><description>Hello there! Welcome to the world of Ketchup! I’ve been playing Pokemon games for about as long as I can remember.</description><pubDate>Thu, 25 Apr 2024 14:08:06 GMT</pubDate><content:encoded>&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5040&quot; src=&quot;blob:https://benricemccarthy.ghost.io/6cd06705-0914-43e5-8e07-db2c100128b7&quot; class=&quot;kg-image&quot; alt=&quot;Ketchup&quot; loading=&quot;lazy&quot; width=&quot;1530&quot; height=&quot;3036&quot;&gt;&lt;/figure&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://storage.ghost.io/c/2e/09/2e09bfaf-4e37-4fd6-ad4c-d9b398e74392/content/images/2024/04/Artboard-Copy-112.png&quot; alt=&quot;Ketchup&quot;&gt;&lt;p&gt;Hello there! Welcome to the world of Ketchup!&lt;/p&gt;&lt;p&gt;I&amp;#x2019;ve been playing Pokemon games for about as long as I can remember. It all started for me with a copy of Pokemon Yellow on a translucent purple GameBoy Colour, and I&amp;#x2019;ve been hooked ever since. The Pokemon games are built around a rich sense of exploration, with vibrant worlds full of these fascinating creatures that captured the hearts and minds of so many children like me.&amp;#xa0;&lt;/p&gt;&lt;p&gt;They were the first open world games I ever played, and they instilled in me a deep desire to explore every corner, unearth every secret, and of course, to catch every creature (I blame Nintendo for making me a video game completionism and impacting my productivity for decades to come).&amp;#xa0;&lt;/p&gt;&lt;p&gt;The original Pok&amp;#xe9;mon games started with a roster of 151 creatures which has now grown to over&amp;#xa0; 1000, each with it&amp;#x2019;s own stats, evolutions, abilities and moves. And that&amp;#x2019;s only scratching the surface. There&amp;#x2019;s a huge amount of information to make sense and keep track of if you want to get the most out of the games and become a &lt;em&gt;Pokemon master&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;And that&amp;#x2019;s where Ketchup comes in. For years, I&amp;#x2019;ve wanted to build an app to help make sense of it all. A few other apps are out there, and of course all the information you could ask for exists on the web. But they each have some inherent flaws when it comes to navigation, and that&amp;#x2019;s a big part of what I wanted to address with Ketchup.&lt;/p&gt;&lt;p&gt;Websites like Seribi and Bulbabedia have a wealth of knowledge, but it can be tough to sift through at times, and can leave you with dozens of tabs left open that you have to jump between and eventually remember to close. These websites are also no help with in comes to things like tracking your progress at catching every Pok&amp;#xe9;mon.&lt;/p&gt;&lt;p&gt;The apps are the inverse, they can be nice to browse, and some let you track your captures, but it&amp;#x2019;s hard to view many pages quickly without popping up and down the navigation stack. It&amp;#x2019;s not that it&amp;#x2019;s a bad experience, but I wanted something that I could explore as quick as I could think.&amp;#xa0;&lt;/p&gt;&lt;p&gt;That&amp;#x2019;s no small feat. Here&amp;#x2019;s how I&amp;#x2019;ve tried to tackle that problem:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;A New Way to Navigate&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;When working on Obscura, and when helping Casey Liss with the design of Callsheet, I&amp;#x2019;ve always strongly emphasised having all the most important controls within easy reach of your thumb. I think it has an enormous effect on how comfortable and responsive the app feels. With Ketchup, I wanted to make it easy to navigate in a number of ways: search, recents, and pins to handle the information pages, and a standard iOS tab bar for accessing all the features of the app.&amp;#xa0;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 2.0706&quot; src=&quot;blob:https://benricemccarthy.ghost.io/97b75bc0-cf99-4392-84e1-782675ed3783&quot; class=&quot;kg-image&quot; alt=&quot;Ketchup&quot; loading=&quot;lazy&quot; width=&quot;1290&quot; height=&quot;623&quot;&gt;&lt;/figure&gt;&lt;p&gt;All these controls are contained in a system sheet that can be dragged upwards to see a full list of your recents. It&amp;#x2019;s fast, fluid and makes for a fun little fidget toy too. It looks simple, but it took a lot of work to get this to behave exactly the way I want to, and I hope none of that effort shows and it feels like a native UI component that&amp;#x2019;s been around for decades.&amp;#xa0;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5040&quot; src=&quot;blob:https://benricemccarthy.ghost.io/e0d0c2a2-1a6b-4838-b549-fd16de926e24&quot; class=&quot;kg-image&quot; alt=&quot;Ketchup&quot; loading=&quot;lazy&quot; width=&quot;1530&quot; height=&quot;3036&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Creatures Come First&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Enough about UI, let&amp;#x2019;s talk about the reason you&amp;#x2019;re here: Pok&amp;#xe9;mon. Ketchup has gorgeous pages for every creature, each tinted to match their type, full of all the most relevant information. You can see how creatures evolve and quickly jump to their evolutions, check their type matchups, see their hidden abilities and what games they can be caught in.&amp;#xa0;&lt;/p&gt;&lt;p&gt;You can track whether you&amp;#x2019;ve caught a creature, including its ultra-rare Shiny variant, and filter the list of Pok&amp;#xe9;mon by catch state, and also mark your favourites.&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5040&quot; src=&quot;blob:https://benricemccarthy.ghost.io/6843524e-b061-43c0-a72c-c8303818cc19&quot; class=&quot;kg-image&quot; alt=&quot;Ketchup&quot; loading=&quot;lazy&quot; width=&quot;1530&quot; height=&quot;3036&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Moves, Items &amp;amp; Abilities&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The creatures may be the star of the games, but they&amp;#x2019;d be nothing without the battles. Each move has a variety of stats and properties, can affect one or more creature and can have secondary effects. Making sense of the battles requires understanding all the possible moves and their effects. Ketchup&amp;#x2019;s got your back.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Ketchup also shows you items from the Pok&amp;#xe9;mon games. There&amp;#x2019;s still a little bit of work to do here to account for differences across the games, but I think it&amp;#x2019;s a good start and hopefully proves useful. Some items are required for a Pok&amp;#xe9;mon&amp;#x2019;s evolution into a new form, and those items will show the relevant creatures beneath.&lt;/p&gt;&lt;p&gt;Each Pok&amp;#xe9;mon also has an ability, most of which have some effect on battles, and there&amp;#x2019;s a list of all of them in Ketchup. You can also see a list of which Pok&amp;#xe9;mon can have a specific ability on the Ability&amp;#x2019;s page.&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5040&quot; src=&quot;blob:https://benricemccarthy.ghost.io/01bd7e9e-e34b-4525-a50d-f11aa0ded8c1&quot; class=&quot;kg-image&quot; alt=&quot;Ketchup&quot; loading=&quot;lazy&quot; width=&quot;1530&quot; height=&quot;3036&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Aether - Type Calculator&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Last year I launched Aether, a type calculator to see which Pok&amp;#xe9;mon types are effective against each other. I&amp;#x2019;ve rolled that into Ketchup to make it a one stop shop for all your Pok&amp;#xe9;mon needs. It was too perfect a fit not to include.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card&quot;&gt;&lt;img style=&quot;--ratio: 0.5040&quot; src=&quot;blob:https://benricemccarthy.ghost.io/c0df273c-77dd-428d-beb2-42b7db967086&quot; class=&quot;kg-image&quot; alt=&quot;Ketchup&quot; loading=&quot;lazy&quot; width=&quot;1530&quot; height=&quot;3036&quot;&gt;&lt;/figure&gt;&lt;p&gt;&lt;strong&gt;Who&amp;#x2019;s That Pok&amp;#xe9;mon?!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The Pok&amp;#xe9;mon anime used to have this little quiz during ad breaks (only 90s kids, etc), where the silhouette of a creature would be shown and you&amp;#x2019;d have three minutes to guess it while you were blasted with the most obnoxious ads imaginable. Inspired by that, and the craze for Wordle-like games over the last few years, I&amp;#x2019;ve built that kind of quiz right into Ketchup. It&amp;#x2019;s silly, but it&amp;#x2019;s fun. And if I can&amp;#x2019;t have a little fun making an app about tiny critters of mass destruction, what&amp;#x2019;s the point?&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Pricing&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Ketchup is free to use, and you can enjoy all the features of the app &lt;em&gt;but&lt;/em&gt; you&amp;#x2019;re limited to seeing data to just the original 151 creatures. To see the rest, you can pay for Ketchup+ which is &amp;#x24;9.99 (and there&amp;#x2019;s an optional &amp;#x24;19.99 option if you&amp;#x2019;re feeling generous. I feel like this is a pretty good balance of letting you get a good feel for what Ketchup is like to use, but still has a clear incentive of why you&amp;#x2019;d want to pay.&amp;#xa0;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;That&amp;#x2019;s It&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Ketchup has been such a delight to work on (some struggles with SwiftData aside) and it&amp;#x2019;s great to finally get these ideas that have been swimming around my head for years out into the world.&amp;#xa0;&lt;/p&gt;&lt;p&gt;So after all that, I hope you&amp;#x2019;ll dip your toe into Ketchup.. I mean give it a whirl. I&amp;#x2019;m not responsible for what you do with your condiments. Maybe consider buying Ketchup+, leaving a review, and sharing it with the biggest Pok&amp;#xe9;mon geek you know.&amp;#xa0;&lt;/p&gt;&lt;p&gt;Thanks,&lt;/p&gt;&lt;p&gt;Ben&lt;/p&gt;</content:encoded></item><item><title>Sneak Peek: Untitled Project</title><link>https://benricemccarthy.com/blog/sneak-peak-untitled-project/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/sneak-peak-untitled-project/</guid><pubDate>Fri, 02 Feb 2024 11:47:49 GMT</pubDate><content:encoded/></item><item><title>Agile 3</title><link>https://benricemccarthy.com/blog/untitled/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/untitled/</guid><description>When I first began teaching myself to code in 2014, I needed a project that was small, and easy to wrap my head around. Agile was inspired by the carnival game Whack-a-Mole, a simple game that tests your reflexes.</description><pubDate>Fri, 02 Feb 2024 11:14:51 GMT</pubDate><content:encoded>&lt;p&gt;When I first began teaching myself to code in 2014, I needed a project that was small, and easy to wrap my head around. Agile was inspired by the carnival game Whack-a-Mole, a simple game that tests your reflexes. All you need to do is tap the circles as quickly as they appear. It seems simple at first, but the higher your score, the faster they appear. It&amp;#x2019;s easy to understand, but devilishly addicting.&lt;/p&gt;&lt;p&gt;10 years later, Agile has been off the store for a while. But while I was sick with Covid a couple of weeks ago, I thought I would see if I could rebuild it in SwiftUI. During that, the release date for Apple Vision Pro was announced, and I began wondering if I could get Agile running on that too.&lt;/p&gt;&lt;p&gt;And now, with a decade passed since its first introduction, I&amp;#x2019;m very pleased that Agile is available again on iOS, iPad and now visionOS too. Naturally I haven&amp;#x2019;t been able to run it on a Vision Pro device, so it might be a complete mess. The good news is, the app is free to download, so hopefully no one will feel too upset if the timings are not quite right for the world of spatial computing. There are a few (self-made) ads that can be hidden by leaving a tip, and there&amp;#x2019;s Game Center integration, so you can show off your high score to the world.&amp;#xa0;&lt;/p&gt;&lt;p&gt;You can download &lt;a href=&quot;https://apps.apple.com/us/app/agile-3/id1289012427?ref=benricemccarthy.ghost.io&quot; rel=&quot;noreferrer&quot;&gt;Agile on the App Store&lt;/a&gt; now!&lt;/p&gt;</content:encoded></item><item><title>I’m Feeling a Bit Stuck</title><link>https://benricemccarthy.com/blog/im-feeling-a-bit-stuck/</link><guid isPermaLink="true">https://benricemccarthy.com/blog/im-feeling-a-bit-stuck/</guid><description>Obscura 4 has been doing pretty well since its launch in August. Sales didn’t stop off a cliff and the fact that at least some income is guaranteed this autumn is a huge relief, and is allowing me to consider working on…</description><pubDate>Wed, 03 Jan 2024 13:55:52 GMT</pubDate><content:encoded>&lt;p&gt;Obscura 4 has been doing pretty well since its launch in August. Sales didn&amp;#x2019;t stop off a cliff and the fact that at least some income is guaranteed this autumn is a huge relief, and is allowing me to consider working on some more experimental projects for the next couple of months.&lt;/p&gt;&lt;p&gt;In November, I released Freckle, and while it was a fun diversion, it made a negligible amount of money. I never expected it to be a huge revenue generator, but a little ongoing boost would have be nice. Who knows, maybe it will cross the path of some TikTok influencer and go viral.&lt;/p&gt;&lt;p&gt;I&amp;#x2019;ve had a few ideas that I&amp;#x2019;ve been toying around with, but I&amp;#x2019;m just not sure what I should invest my time in, and I&amp;#x2019;m really at the point where I should just commit to one. So here&amp;#x2019;s what I&amp;#x2019;ve been considering:&lt;/p&gt;&lt;h2 id=&quot;a-bluesky-client&quot;&gt;A Bluesky Client&lt;/h2&gt;&lt;p&gt;While Mastodon is my preferred microblogging service these days, we&amp;#x2019;re already spoiled for choice with great Mastodon clients these days. Threads also seems to be taking off and perhaps reaching critical mass, but lacks the openness to build on top of. Bluesky is open, and I think there&amp;#x2019;s still room for third party clients to stand out, but I&amp;#x2019;m just not sure if the audience is there and will grow over the coming years.&lt;/p&gt;&lt;p&gt;I did put together a little prototype, and I think one of the biggest benefits to working on a social network client would be to learn a tremendous amount about how to build an network API-driven app, completely unlike Obscura.&amp;#xa0;&lt;/p&gt;&lt;h3 id=&quot;pros&quot;&gt;Pros&lt;strong&gt;:&lt;/strong&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Great learning experience&lt;/li&gt;&lt;li&gt;Good contender for subscriptions&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;cons&quot;&gt;Cons&lt;strong&gt;:&lt;/strong&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Uncertain future for Bluesky&lt;/li&gt;&lt;li&gt;Likely, a big, complex app&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;a-pinpoint-successor&quot;&gt;A Pinpoint Successor&lt;/h2&gt;&lt;p&gt;Marco Arment&amp;#x2019;s Pinpoint was a clean and quick utility app for marking up screenshots with arrows, annotations and redactions. As Marco worked on more time-consuming apps, and Apple added some of its features in the form of Markup (though it&amp;#x2019;s less nice to use), Pinpoint languished and was eventually handed over to Lickablity, who maintained it for a while, but as OS releases caused it to be less functional over time, it was pulled from the store.&lt;/p&gt;&lt;h3 id=&quot;pros-1&quot;&gt;Pros:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;(Relatively) simple utility app&lt;/li&gt;&lt;li&gt;Lots of experience with PhotoKit&lt;/li&gt;&lt;li&gt;Reviving Pinpoint is a fun narrative that Apple blogs would love&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;cons-1&quot;&gt;Cons:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;This app has failed &lt;em&gt;twice&lt;/em&gt;&lt;/li&gt;&lt;li&gt;If I do revive it, I might have to offer it for free to pre-existing customers&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;a-pokedex-app&quot;&gt;A Pokedex app&lt;/h2&gt;&lt;p&gt;An app I&amp;#x2019;ve wanted to build for a years, because the existing offerings on the App Store are just not great experiences. Pokemon is a huge franchise, with an incredible amounts of information to keep track of, across numerous games. Being able to track Pok&amp;#xe9;mon you&amp;#x2019;ve caught or where to find, check move lists, and type advantages, etc. Presenting all this info in a clear and accessible way would be a fun challenge.&lt;/p&gt;&lt;h3 id=&quot;pros-2&quot;&gt;Pros:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Tied to a franchise people are passionate about, and spend a lot of money on&lt;/li&gt;&lt;li&gt;Fairly straightforward informational app&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;cons-2&quot;&gt;Cons&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;App Review &lt;em&gt;hates&lt;/em&gt; apps tied to intellectual property&lt;/li&gt;&lt;li&gt;Very bifurcated audience of kids and adult players makes pricing models complicated&lt;/li&gt;&lt;/ul&gt;&lt;hr&gt;&lt;p&gt;Naturally those aren&amp;#x2019;t the only options, but they are what&amp;#x2019;s bubbled to the surface. But I&amp;#x2019;m curious to hear what you think. Do any of these ideas seem like the clear winner? Am I barking up entirely the wrong trees? Please help me make my mind up.&lt;/p&gt;</content:encoded></item></channel></rss>