Writing about feature creep a few months ago made me want to go all out with an app concept. So instead of my minimal, keep it as simple as possible, donât overdo it, aesthetic, I wanted to really open up the floodgates and go against everything I said in that post.
A habit tracker
What I came up with is a habit tracker, but instead of just tracking your days with a checkmark, you can mark them with any emoji đ¤ˇââď¸. So you can still mark a day âď¸ and track progress. But it becomes more interesting when you start marking days with more diverse emoji đď¸đĽĄđ. What these emoji mean is up to you.
If the emoji set is too limited, you can create your own with Genmoji. And if Genmoji wonât make what you have in mind, you can replace an emoji with an image.
Each emoji can have its own meaning for maintaining a streak. So one emoji can break it, another maintain it, and some are ignored. You decide.
To mark a day, hold down on it and a dial blooms under your finger with your emoji on its petals. Rotate it to the one you want and let go. You can mark any day, so if you already have something going, itâs easy to bring it into the app.
Customization
A lot of apps allow customization by tweaking a tint color or changing a font. I wanted to go a bit further, so you can customize almost anything except the font.
Is this really useful? đ
Will this be interesting to anyone? Out of the box the app looks rather simple, so you will have to think about what you would like to track. Maybe in the future I will have to build in presets and more examples, but letâs first see if this will gain a couple of users. I still donât know if this idea will match how people think about and use their phone.
I also wonder if the effort might help. Once youâve spent time on a routine, picking the emoji, choosing a background, playing with the styling and changing the sounds, you might have an ever so slightly better reason to keep the habit going.
Your kind of habit tracker
Just like my other apps: no account, no tracking, and your days stay on your phone.
If there is anything you want to track in your life and you feel like trying something different đ¨âđ¤: AllDaysOn
With the announcement of Apple HomeView a lot of the online discourse I follow has been about talking to your computer. Ben Thompson mentioned in a podcast that he wants his house to be controllable through APIs, and I agree with him. But what the tech companies seem to be building on top of that is voice control. My house at one point had all lights controlled through apps, but I disliked the interaction so much that I installed Hue wall switch modules so I could move back to my traditional switches. For something as simple as turning on the lights, or raising the temperature on the thermostat, I like the hardware we already have. I have no problem with the API underneath, I just donât want to have to talk to it.
The same event brought a new Apple TV. My first-generation Apple TV 4K now no longer updates to the latest tvOS and I had already prepared myself for a new one being expensive. At the last price increase it had gotten to âŹ300 ($337). But with the announcement for the new hardware it is now âŹ350 ($393) and even though I spend âŹ50 on random purchases almost without thinking, this price increase has mentally done something that will make me just stick with tvOS 26 till something stops working. Whatâs sort of triggering is the main justification for the price increase: microphones, so I can talk to my computer.
When I updated my phone to iOS 27, somehow Siri got disabled. I donât remember doing that, but probably skipped a step that should have kept it enabled. The first time I got into my car after updating and connected CarPlay, I got a warning that without Siri (talking to my computer) my car would be unable to play music or show my navigation. I think I barely even listen to what the navigation voice says. For me the voice is just a trigger to glance at the screen to see what I should be doing. But apparently nothing can work without enabling talking to my computer.
On iOS 27 I was trying to get Image Playground working (please donât ask why), but the app kept saying that because my Siri language did not match my phone language, it could not download the model required to do anything. My phoneâs primary language was set to âEnglishâ, but Siri was set to âEnglish (US)â. But Siri doesnât have an âEnglishâ option. So the solution was to change my phone from âEnglishâ to âEnglish (US)â. It worked. I still donât know why I had to.
I feel that Apple goes all-in on talking to my computer, but with every step they force me to take I just feel less and less at home in Appleâs ecosystem. But itâs probably just me. I also donât like talking with people, so maybe that explains something.
For my meditation app ZenSpan I was considering adding a setting that would allow the user to set a volume level to start the meditation with. This would avoid the user having to change their volume before a meditation session. I came to the idea because before every meditation I start, I almost always adjust the volume.
Implementing this feature would be next to no work with the current state of AI in development tools. But after some consideration I decided the best action is no action.
The Feature
Setting the volume at the start of a meditation would be very little effort. But what about all the edge cases? For example if the user adjusted their volume just before starting the meditation, should we still let the app override it? And what about when the meditation ends, should the volume be reset to the previous volume? What if the user adjusts the volume during the meditation? And this meditation volume, should the user be able to set it to zero? Should the home screen of the app somehow indicate that the volume is going to be adjusted?
None of these questions are technical, but I also think there is no single correct answer.
The AI
I could discuss all these considerations with the AI and probably come up with a pretty good compromise on all the questions surrounding the feature. I or it could spend some time to implement and then test the known edge cases.
Considering this feature made me think about all these easy to add, no one clear solution, should be tested on actual hardware, features that come up in so many projects. It seems that the easier it becomes to build the feature, the better the reasoning should be before adding the functionality. In past work projects when a feature request came in, and there wasnât a straightforward solution, you could always balance the amount of effort it would take versus the clarity of the requirements and when the whole endeavour seemed too murky not build it at all. But when the friction of building it becomes near zero, the balance of the decision shifts.
The question whether it should be implemented at all has become a lot more important. The AI wonât push back no matter how bad the implementation details get. Once Iâve invested time in it, how bad would it have to be before I would reconsider?
The Conclusion
For ZenSpan, the volume level is already visible on the home screen; the user can adjust it before or during the meditation. Maybe the current situation is good enough.
But it made me wonder how much of my future work will hinge on these kinds of questions, as the cost of building keeps falling.
With the advent of AI, I thought we would get a personal app revolution. It has become ever easier to create an app that scratches a personal itch. The two apps(š,²) I have released on Appleâs App Store are very much my interpretation of a personal itch. Both apps are in no way novel for the App Store. I think the biggest difference between my apps and their counterparts is that I can just keep them really simple and only match my needs. That does not mean they could not be useful for other users, but the starting point is personal.
I have experience with software development, but present-day AI would enable just about anybody to recreate their personal interpretation of an app. So I expect this to advance further and open up more niche apps.
For this weekâs WWDC I was not expecting Apple to just open up everything to some vibecoded future, but I was interested to see in which direction they would take things.
On June 8, 2026, Apple updated its review guidelines and I think the change in 4.3(b) is sort of worrying.
From Appleâs App Review Guidelines 4.3:
(b) Donât submit apps that are indistinguishable from whatâs already widely available. Opportunistically creating variants of existing app categories or popular apps degrades App Store discovery, reduces overall app quality, and harms both users and developers. Certain kinds of apps, such as dating, flashlight, sound effects, wallpaper, simple timers, and fortune telling, are well established on the App Store and we will not accept new submissions unless they offer a meaningfully different or improved experience. We may remove these apps from the App Store going forward if they are not updated, improved, or do not attract customers. Other kinds of apps, such as drinking games, Kama Sutra, fart, and burp apps, are mediocre, low-quality, or low-effort and do not add value to the App Store. Repeated submissions of this kind may lead to removal from the Apple Developer Program.
I understand why this point is in the guidelines, but the following seems problematic for this personal app revolution:
[âŚ] or do not attract customers.
Both my apps have no monetization strategy, therefore there is no money to spend on marketing. I donât have a social media following to promote these apps and I do not have the skills or ambition to do anything about this. Until now this hasnât felt like a problem. The apps are on the App Store, and if somebody discovers them and finds them useful, awesome. What matters most to me is that I get to use them on my phone. But am I now going to have to put money into the promotion of my apps just so they wonât be thrown off the App Store? My apps do not track users, have no advertising and do not require a subscription. But if I have to start spending money to stay on Appleâs platform, will I have to start doing these things? I understand that for Apple it would carry some really tiny advantage if I start putting in subscriptions and funneling back subscription revenue into marketing. But I really donât want to do any of that.
You could suggest I just use TestFlight and be the only user of these apps. It would be simple to write a script that triggers a build on Xcode Cloud every three months, and I could keep using these apps this way. But that loses some of the magic of being able to share your app, to hear back from somebody who discovered it and liked it. So maybe another option would be to look into alternative app stores, but my feeling is that Apple also does not want developers to go in that direction.
Building your own app has this IKEA-like effect; it makes my phone feel more personal to me, similar to how some people decorate their phone or case with stickers. A widget from one of my apps is on my home screen and really makes it feel like my own. I think it would be awesome if more people got to do this and might even find traction before having to invest a lot into marketing dollars.
I hope AI opens up a world for people to scratch that personal itch. But my worry is that this new wording in 4.3(b) pushes things the other way. If staying on the App Store means attracting customers, then every app needs a business model. That will just create more apps designed to squeeze users into subscriptions or harvest their data.
P.S. Please do not suggest using Android, Google is the worst đ.
In 2024 I wrote this short article about remapping the caps lock key to backspace. I still use this mapping and am really happy this works this way, no virtual keyboard software, just a simple remapping of this key at the OS level. But today I was typing on my Mac keyboard and wished I had a delete key. I have this key on my external keyboard, so why not map the original backspace key to act as forward delete?
To update the original to also include remapping the backspace key, I updated the script to become:
#!/bin/zsh
/usr/bin/hidutil property --set '{"UserKeyMapping":[
{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x70000002A},
{"HIDKeyboardModifierMappingSrc":0x70000002A,"HIDKeyboardModifierMappingDst":0x70000004C}
]}'
This script combined with my custom Colemak keyboard layout is đ
Over the last couple of months I have found my way back to meditation. At first I just used a kitchen timer, no sound, no fuss. But I really wanted an interval reminder to help refocus my attention whenever my mind had wandered off. Looking at the existing options, nothing quite fit what I had in mind.
So I built my own.
Building it has been, somewhat ironically, quite the distraction from meditating. But now that everything is working, itâs become a good companion to my practice.
ZenSpan is deliberately simple: set a duration, set an interval, and go. There are no streaks, no statistics, no nudges to keep a streak alive, just a timer that gets out of your way. The interval sound is a singing bowl that picks a different sample each time, so it never becomes repetitive or predictable. And I had a lot of fun with the UI, the interactions feel smooth in a way that I think suits the mood of the app.
If that sounds like what youâre looking for: ZenSpan
Really vibe with this post from Mike Swanson. In the post Mike goes into some of the history and motivations why software has become so obnoxious and why the problem has become so wide spread. His term for software that stays away from this trend is backseat software, I like to think of it as quiet software.
Iâve started to think of this as backseat software: the slow shift from software as a tool you operate to software as a channel that operates on you. Once a product learns it can talk back, itâs remarkably hard to keep it quiet.
One of the comments below the post nails, in my view, the reason: advertising. Not just in the sense of promoting the product directly, but promoting either a feature or the users action resulting in the product being promoted.
Everytime I get the popup to ask for a review, I feel that they are not at all interested in my opinion, but the only reason for me to review is that it will help with App Store ranking.
I see no quick or easy solution to getting back to software that is more quiet. If anything, I think for the next couple of years with vibe coded apps it will only get worse.
But I really like this concept and I will try to keep my software as quiet as I can.
Ever since I got my first iPhone (a white 3G) Iâve wanted to build my own iOS app. I tried a few times and even got quite far, but I never ended up shipping anything to the App Store. Last month I decided to finally change that. I got back into SwiftUI, and while my original app idea turned into a side quest (which itself became overly complicated), I realized the best approach was to just build something simple. Not wait until iOS 26 is out, just build something I wanted, and see what it takes to get it into the App Store.
It took me about 10 days, but here it is: PeekCard
PeekCard
The primary goal was to store loyalty card barcodes so I could show them on my home screen via a widget. I know plenty of apps already do this, but I didnât want one that bombards me with ads or harvests my data.
While building PeekCard, it quickly became more than just scanning a simple 1D barcode. The app supports most 1D and 2D barcodes, lets you edit the data, and even convert between barcode types. For example, if you want to know what URL is hidden in a QR code, you can scan it, inspect it, change it, and generate a new QR code to share; even via a home screen widget. Or if youâve ever wondered whatâs inside that complex barcode on your parcel, now you can just scan and see.
You can find the app in the App Store or on its landing page.
Now I can finally go back to working on my original app idea đ.
I just migrated this site from Tailwind 3 to 4, and because I ran into some breaking issues, I started with a freshly generated Astro project and copied in the content. This took surprisingly little effort, so I am happy with that.
When migrating, I ran into some old code that I used to render the markdown files to HTML as a string, to include in the RSS output. But for this task, I used a separate package and yet another package to sanitize the html.
But I noticed in the Astro docs that there is a new (and as of now still experimental) way to generate the html for the content in Astro: Astro Container API
To use this new API, you can do something like:
const container = await experimental_AstroContainer.create()
items.map(async (item) => {
const { Content } = await render(item)
const html = await container.renderToString(Content)
return { ...item, html }
}),
Or check out the code to generate the RSS feed for this website: feed.xml.ts
Wow, I never knew I could do this. I donât know how often, if ever, I will use this. But it is really impressive that it works.
Appjeniksaan is my personal software development shop, where I create sites and apps that I find delightful or simply fun to build. On this site, I share interesting information I discover while exploring the web.