Weekly Indie Log #15

Weekly Indie Log #15

Topics: Reaching 100k downloads, home screen widget rewrite and trying out new things

Check out my apps: HabitKit, WinDiary and Liftbear

Again, let's start this week with celebrating the wins: The Android version of HabitKit reached over 100,000 downloads on Google Play. That's an incredibly huge number for me and I'm super happy that it happened this fast after reaching the last milestone (50,000) in December.

It's no surprise that this number is increasing that quickly because the statistics on Google Play reveal that the app currently has 5k-10k impressions per day and 1k-4k of them actually download the app. I'm super happy with this conversion rate because I didn't even put a lot of effort into optimising my Google Play store listing. One thing that's on my todo list for the upcoming months: Redoing the apps' icon and App Store / Google Play screenshots. Hope to increase these numbers even further by tackling these things.

Home Screen Widget Rewrite

I'm currently working on a huge rewrite of HabitKits' home screen widgets. One of the most requested features I get is that the widgets should be interactive. Users want to check off their habits directly from the home screen instead of having to open the app. I totally get it and as a regular user of HabitKit myself, I'm determined to make this happen.

So, to implement things like interactivity I have to dabble with the native side of code: Swift on iOS and Kotlin on Android. As a Flutter developer that's always a big challenge for me and involves a lot of learning and try-and-error programming. This week I completely focused on the iOS side, but I already made good progress this week:

  • I extended my widget data structure to include much more information about the users' habits, completions and intervals. This way the widget can compute different computed values on its' own.

  • I managed to import a custom font (Roboto) inside the Swift code. That was a little bit tricky because I wasn't sure in which target (the main package or the widget extension?) I had to import it.

  • Another fun thing I did: Imported FontAwesome to display the habits' icons and created a mapping between the names of my icon enum (used in my Flutter code) and the hex values (which I need to use in my Swift code).

  • I coded the basic UI shell of the widget: Displaying the habits' name, description, icon, the completion button (which will be interactive soon) and the grid underneath it.


On Trying New Things

This week something cool happened: My "Year In Review" blog post was featured in a video of the popular iOS YouTuber Sean Allen. I've been admiring Sean for a long time and usually watch all his videos (especially his Startup Vlogs). Because of that it felt like a great achievement, he said pretty nice things about me (and my journey as an indie app developer) and that gave me a really great motivation boost.

This would have never happened if I didn't write this article. I get so many messages asking me "Does it make sense to write a blog post? Nobody ready blogs anymore." I can't really tell you if the numbers (people who read this blog converting to app downloads) add up, but you never really know what positive side-effect a small experiment like writing an article can have.

And if you always try to justify your effort with cold hard numbers, you will probably never try it and never reap the benefits of it. Here is another example of this mindset:

Sure, if you just look at the numbers, it's probably a bad idea to trade your freelancing time agains developing your own apps. But you never know where the indie app journey will lead to without trying. I would have never been able to quit my job and work on my passion projects if I had this mindset when I started. I would still be an employee who never takes risks. Anyway, I don't want to sound like a motivational guru, I know life is complicated and taking risks is always dependent on your life-situation!

That's it for this week, see you in the next one 👋

Did you find this article valuable?

Support Sebastian Röhl by becoming a sponsor. Any amount is appreciated!