Every time an AI agent asks me if I want to proceed I am obligated to say this out loud
Posts by Greg Gardner
My first Deep Dish Swift was such a great experience. I am again reminded how friendly and interesting iOS/Apple/Swift folks are. I had so many great conversations with new and old friends in such a short time.
Thanks so much to @joshdholtz.com and Kari for organizing it!
In the attached video you can watch me iterating to make something similar to the Messages app icon in under 2 minutes.
Icon Composer is only available on the Mac, but my app is a native Mac and iPad app. It is also great for people who aren't experts at Icon Composer because you can just describe the changes you want in plain English and the LLM can figure out what to do.
The easiest model would be to have the user enter an API key so they are charged directly for the LLM costs as they go. Since the target market is developers, that is probably viable, at least initially.
One possible business model would be to offer consumable token packs so the user can pay as they go, but that adds ongoing friction and backend accounting.
I could try a pricy subscription to cover the LLM costs, but it would have to be rate limited to avoid heavy users making me go bankrupt.
Determining the right business model for this app is challenging. Using an LLM to generate icons, read existing icons, and all of the interaction eats through tokens quickly. The longer the conversation, the more it costs. In some of my testing it was pretty easy to spend a dollar or two per icon.
If you've worked with LLMs to produce code, you know that when the output is good, it is totally amazing. And when it is bad, it can be super frustrating. Much of the effort on this project has been testing and iterating on it out to figure how to reduce frustration as much as possible.
That's where my new app comes in. It is similar to Claude Code in that you can chat with it (by voice or typing) and iterate on generating icons without dragging and dropping over and over. It is similar to working with a designer that gives you almost immediate results.
To produce high quality app icons you should still hire a good designer. But for personal projects or placeholder icons, it is fine to use ChatGPT to output decent icons. But this takes some iteration that can be cumbersome, especially if you are trying to make icons composed of multiple layers.
Last year Apple released a tool called Icon Composer which you can use to create app icons for the new Apple liquid glass world.
Icon Composer supports multiple layers and you can add SVGs or PNGs and put them together and add liquid glass 3D effects as well as other basic image tools.
My final #BuildInPublic post this week is an app that I think has the most potential. This is just an MVP, but with some polishing, I think it could be ready to release soon.
I like to this of this app as "Claude Code meets Icon Composer".
So I have an app that solves my specific need, which is one I suspect not many other people have. And for those who do share my navigating preferences, I doubt this is something they would pay for on an ongoing basis.
But in this age of AI-generated personal apps, that is perfectly fine with me.
The Google Maps directions API doesn't throttle, but every API call costs a fraction of a cent. There is a decent free tier before you are charged, though.
This is fine for personal use, but the costs could add up if the app is used regularly by lots of people, especially the widget.
The Apple Maps directions API is free to use, but it gets throttled quickly when you ask for many different routes in a short period of time.
This is pretty limiting if you want to set up multiple trips and have the traffic data be fairly up to date.
Screenshot of widget showing the fastest route
I've been using this app for a few months and it works well.
I added a widget which I find to be the quickest way to glance at the different routes and choose which one I want to take.
It has a button that opens your favorite navigation app to the fastest route.
Screenshot of the app showing an ETA for each route
So I built an iOS app to answer this question. You just create a new trip and then add different routes using waypoints.
Then the app checks Apple and Google Maps traffic conditions and lets me see the expected travel time for each route and which is currently the fastest.
If I use Apple Maps or Google Maps to check their recommendations, they offer 3 different routes they have determined are the best options. But the options change and are sometimes really odd.
I just wanted a way to see quickly if should I take 101, 280, or city streets based on current traffic.
For instance, I need to drive downtown at least twice a week. From home I can take one of two freeways or drive through city streets if the freeways are congested.
Without traffic, 101 is the fastest option, 280 is second, and driving through the Mission is the slowest. But there is often traffic.
I think most people just follow whatever route their chosen navigation app chooses for them every time. I do this when I'm unfamiliar with where I'm going.
However, when I'm driving somewhere I'm very familiar with, I usually have preferred routes that I choose based on current traffic conditions.
My 3rd #BuildInPublic post this week might be a bit more boring than the others. It is a unique navigation app that I made for myself to scratch a very specific itch that I don't think most people have, so it isn't likely I will release it.
So WalkStar for Spotify remains completed but unreleased to this day.
Maybe someday I will just release WalkStar with all features for free with support for Apple Music and Spotify for fun.
But from my #BuildInPublic posts this week you will see that I have many other projects I am working on.
By this point, WalkStar had not taken off and I was working on other things.
The idea of releasing WalkStar for Spotify as a separate app with no monetization, and a decent, but not flawless Spotify integration that would likely result in support requests from its few downloads was not appealing.
WalkStar for Spotify app icon
During the review, I found out that they will not allow any app that controls music on Spotify to monetize in any way. So if you want to play music on Spotify you can't make any money. No ads, no IAP, nothing.
So my only option was to make a separate WalkStar for Spotify free app with no IAP.
I first submitted WalkStar for Spotify integration review in early December 2024 hoping I could launch the app with both Spotify and Apple Music support in February.
Long story short, my app was rejected twice and finally approved in... August. Eight months after my first submission.
Apple's App Review used to take a week to review your app, and if anything was wrong, you had to resubmit and wait another week. Apple has reduced its review time to 1-2 days which is much improved.
But Spotify? Their app review turnaround is 6 *weeks* minimum. If you get rejected, it is brutal.
It took me weeks of testing and fixing and polishing to overcome all of the technical challenges in order to release it.
Then came the biggest challenge of all: Spotify App Review.
You might think Apple App Review is a nightmare (it is), but Spotify's is even worse.
Spotify has an SDK that can be used to launch their app and send messages to the app on the device to play/update the music, but it is super flaky.
So in WalkStar I used this SDK, but if it failed, I had to call the Spotify Web API as backup, which meant you had to be connected to the Internet.
This was a problem for WalkStar because it only plays music while you are walking. So if it tells Spotify to pause music, the app will be killed by iOS.
I solved this by creating a 10 hour silent podcast on Spotify. So instead of telling Spotify to pause, it switches to the silent podcast instead.
You can't just call out to Spotify to start playing music in the background like you can with Apple Music. You can only launch the Spotify app in the foreground and tell it to start playing music and jump back to your app. But then Spotify is in the background and has to play music to stay running.