My Photo

Hi, I’m Manuel

Maker of terrible puns and delightful apps

App Showcase

Latest Blog Posts

My most recent blog posts. Head over to my blog to see all posts and filter them by topic.

A picture of me sitting on a meditation cushion listening to calming background sounds on my HomePods during a meditation with my app Zenitizer.

Guided vs. Unguided Meditations - My Journey

Tuesday, 23 May, 2023

In this article, I am sharing my own thoughts about guided and unguided meditations and a few details about my own meditation journey which led me from the former to the latter and eventually to building my own app for unguided meditations.

Start Of My Meditation Journey

After growing up in rural Germany (we’re talking really rural… population of my village being ~500, if you count the cows, that is), I moved to London (population: ~9 Million) for my first full-time job after university. Suffice it to say, it was a very exciting time of my life: both the “good kind of exciting” but I also got my fair share of the “overwhelming and stressful kind of exciting”.

I remember the day, I was sitting on a bench in Queens Park, London thinking to myself: “maybe you should try one of these meditation apps that seem to be all the rage these days. Certainly could use something to calm you down in this hectic big-city lifestyle you’ve gotten yourself into”.

So that’s what I did. I went straight on the App Store and downloaded one of the “big meditation apps” and got started with an introductory mindfulness course consisting of short, guided meditations. This was a key moment for me, because as I was continuing the course over the following weeks, I learned strategies that would help me be more present and balanced and made a notable difference in my life.

Transition To Unguided Meditations

As I kept up a semi-regular meditation practice over the years, I noticed that I naturally wanted to use guided meditations less over time. The app that I was using at the time was designed around providing a large catalogue of guided meditations and similar content but it also had a few “unguided” sessions with just interval bells or very few spoken instructions every couple minutes.

I learned to appreciate the simplicity of those but the problem is that everything about the way the app was designed tried to nudge me towards a new series of guided content while the “simple timer experience” I’ve come to appreciate felt very limited.

In Search Of An App

This is when I started looking for more simple alternatives that focus on the core timer experience instead of guided content and there certainly are a number of great options out there. However… (and I know this sounds cliché and is the start of literally every “scratch-my-own-itch I should build an app for that” story ever) none of the existing options quite worked, looked and felt the way I had envisioned them.

One thing I really liked about the “big meditation app” that I got started with is that it had the notion of a “streak” feature. This was always very motivating for me to keep up a regular practice so that’s something I was looking for in a minimal meditation timer app, too. In addition to that, while I often meditate silently these days (just using haptic notifications on my Apple Watch), I also really enjoy a calming background soundscape from time to time so backgrounds sounds was another important feature for me.

Lastly, I wanted my ideal meditation timer app to be deeply integrated with the Apple ecosystem. Storing and retrieving data from Apple Health, for example. I know some apps allow storing mindful minutes in Apple Health but will not take minutes recorded by other meditation apps into account for their own in-app streaks feature. This forces users to keep using one particular app if they want to keep up the streak - which is of course what these apps want you to do but it always felt bad to me. I felt locked-in and I did not like that.

Another area of system-integration that is extremely well-suited for meditation apps is Shortcuts support. If you know me, you’ll know that I’m a big Shortcuts fan and I certainly use Shortcuts in totally over-engineered and weird ways but for a meditation app it really makes so much sense. Just being able to ask Siri to start a meditation, for example - or automatically doing so when you wake up - or setting a scene in your smart home during a meditation - or automatically turning on the “Do not Disturb” Focus Mode… The list goes on and once you think about these opportunities it feels so incredibly limiting not to have them.

Building My Own App

Unable to find an app that ticks all the boxes and has the right look and feel for me, I arrived at the conclusion that… well: I just gotta build it myself. How hard could it be (famous last words 😅).

It’s been an ongoing project for over half a year, now. As I was also involved in freelance projects, I did not work on it 100% full time, but I definitely spent a significant chunk of my time on Zenitizer. I needed to learn all of the steps involved in building and shipping an app for the first time (basically everything except the coding part and even that involved many new learnings due to using so many frameworks and APIs for the very first time and diving much deeper into SwiftUI than I ever did before).

During that time I learned a lot and had the incredibly rewarding experience of interacting with wonderful beta testers who have given me thoughtful, constructive feedback and so many kind words of encouragement along the way.

Launch Date Confirmed 🚀

As of writing this, the app has been approved for submission on the App Store and the launch date is confirmed: May 25th 2023 - that’s just two days from now. I am very excited to finally be able to share with the world what I’ve been working on all this time and keep growing and improving Zenitizer from here (hopefully for a very long time to come).

Unguided vs. Guided Mediations - Which One Is It Now?

Well, as someone who has developed an app for unguided meditations I am - of course - biased. I personally think that spoken instructions can be a source of distraction and may result in actually being less in the present moment. On the other hand they can be a great learning resource and act as a great ritual to get into the right mindset.

Ultimately, it’s a very personal choice and I encourage you to try for yourself to see what works best for you. And you should keep evaluating this along your journey. Maybe you prefer unguided meditations right away? Or, like me, over time you learn to appreciate them and prefer them over guided meditations? Or you will simply always prefer guided meditations?

Whatever you find to be effective and enjoyable for yourself, Zenitizer will take your mindful minutes in Apple Health recorded by other apps into account (so you can use multiple meditation apps and still grow your Zenitizer streak) and even allows manually logging meditations so you could, for example, visit a guided session in your local meditation/yoga studio or watch one on YouTube and later just record 15 minutes in Zenitizer. I want you to be able to mix-and-match meditation styles, tools, techniques and apps in whichever way works best for you ❤️

Trying Zenitizer For Yourself

Now, if you’re interested in Zenitizer you can find out more here or head straight to the App Store to download and try it for yourself.

A composition showing screenshots of the new streaks feature on both Apple Watch and iPhone.

Streaks Feature, Updated Widgets and Core Data

Tuesday, 18 April, 2023

I just pushed a Zenitizer update to TestFlight earlier today which includes a brand-new feature that I hope to be a great source of motivation for your regular meditation practice: “Meditation Streaks”

Each day you hit your meditation goal, your streak grows. In order to keep your streak, it is sufficient to simply meditate as little as one minute a day - even if this is below your goal. While this will not increase your streak it will prevent breaking the streak. Only if you do not meditate at all on a given day the streak will be reset to 0.

With this behaviour, I was hoping to find a good compromise between motivating you to build a regular practice but without putting too much “pressure” on “achieving goals” (mindfulness meditation should be calming and not adding more stresses to your life, after all 🧘).

I’d love to know what you think about this approach and how the feature works for you personally, so please don’t hesitate to reach out and let me know!

New Streak View + Updated Widgets & Complications

The screenshot above shows the new UI elements for displaying streak progress in various forms and contexts. The “week view” is a custom SwiftUI view that can (and will in a future update) be extended to show larger time spans (e.g. one month at a time). This will allow revisiting the meditation history laid out like a calendar.

Design Considerations

I wanted the StreakView to have a “call for action” title like “Grow your 42 Day Streak” or “Keep Your 42 Day Streak” (unless you already reached your daily meditation goal). The week view primarily serves to see at a glance how you’ve been doing this week (+ may allow revisiting previous days’ meditation history details in the future) and there’s a small indicator of your personal record to date.

After a couple of design iterations I’m pretty happy with the result but I’m sure I’ll make tons of tweaks before Zenitizer makes it to the App Store 🙈 Please let me know if you have any suggestions or questions about the feature as well as the design!

Under The Hood & New Learnings (Core Data)

The majority of the work, however, was focussed on what is not visible: the underlying data and persistence layers! So far, all of Zenitizer’s persistence needs were covered by NSUserDefaults as all the meditation history itself was exclusively written to and read from Apple Health.

Now in order to properly support streaks and efficiently query meditation history and streak data I needed my own on-device persistence solution and after a bit of research I decided to go with Core Data.

You can tell that the framework has its roots in the “Objective-C days” and I personally prefer Swift structs and other value types as well as Swift’s strict handling of Optionals in favour fetching and passing around NSManagedObject references because the former will often force you to address issues at compile time instead of (hard to find?) runtime issues you may get with NSManagedObjects and NSFetchRequests… In the end of the day though, each framework, tool or solution has its pros and cons and, all things considered, CoreData is working really well for me and I am definitely starting to embrace it… 🤓

Donny Wals’ book Practical Core Data was a fantastic resource on my journey to familiarize myself with Core Data. I bought it quite a while ago and it was just sitting in my Gumroad library because I never got around to reading it… Finally, I was forced to work my way through it and it has really helped a lot!

In addition, I would also highly recommend this Apple developer video to anyone getting started with Core Data in modern apps!

A screenshot of my conversation with ChatGPT that taught me how to use evaluateJavaScript to click elements inside a WKWebView

Building a ChatGPT App With the Help of ChatGPT

Thursday, 29 December, 2022

When I started prototyping Chatterbox for ChatGPT, I decided - as an experiment - to utilize ChatGPT in the process. I know, so meta, right? Here are some of my observations, thoughts and takeaways from that experiment.

Getting Started

I wanted to build the native UI with SwiftUI (+AppKit where necessary) and I knew I’d want to embed the actual ChatGPT website in a WKWebView. I asked ChatGPT how to interact with HTML elements from the surrounding Swift code and learned about the evaluateJavaScript method of the WKWebView class. This allowed me to prototype the app and start experimenting with different ideas and features.

ChatGPT as a Mentor 🧑‍🏫

As I was building the prototype, I continued to ask ChatGPT in order to learn about topics, I have not encountered before (while most of my SwiftUI experience was transferable to macOS, I did learn quite a few new things about AppKit in the process). In a way, ChatGPT played a role in the development of Chatterbox - it helped me learn the skills and techniques I needed to bring the app to life. When it worked, it got me there faster than searching Google and/or Stackoverflow, but I will say that, quite often, it gave results that were either slightly wrong or completely wrong and made up.

The first case is not an issue (IMO) because I only consult it for pointers on “how to get started with something” rather than copying and pasting whole blocks of code verbatim, so fixing minor issues on the fly while implementing a solution is easy enough most of the time. The problematic part is when ChatGPT gives a completely false and made up answer but does it in a way that sounds fully confident and professional. On some occasions it hallucinated completely non-existent APIs (which sounded plausible enough). There’s something particularly disappointing about that experience because I always get my hopes up about this “super convenient magical API that would be a perfect fit for my problem” 🥲

ChatGPT as a Rubber Duck 🐤

Are you familiar with the term “rubber duck debugging”? If not, you should read up on it because it is an absolutely brilliant technique! While developing Chatterbox, sometimes I would ask ChatGPT for help when encountering errors or problems. While the responses where often pretty generic and not too helpful, sometimes the mere act of formulating my question and seeing it reflected in ChatGPT’s response was enough for me to realize what the problem is 💡

Will ChatGPT become my go-to rubber duck debugging companion? No, because:

  1. Formulating questions in writing is tedious (I enjoy typing and think I’m pretty fast too, but just “talking to myself” is quicker)
  2. Anika the Radar Plushy (one of my dearest “souvenirs” from my time at Apple) would be really sad to be replaced by an AI chatbot. She’s such a loyal coding companion, never complaining and always listening to me blabbering on about all the random issues I encounter during my work ❤️

“A photo of Anika, an ant-eater plushy sitting on my desk acting as my “debugging rubberduck”

Summary

Ultimately (like many of you, I’m sure), I have come to the conclusion that ChatGPT is quite impressive and can be very useful, but it is just a tool after all - and a flawed one at that. Used as a research, learning and debugging companion (while reflecting critically about its output) it can speed things up and make you more effective. But it can also be distracting and outright confusing by “teaching you” things that don’t actually exist while sounding absolutely confident, often requiring to “manually double check with Google” after all…

It has certainly earned its place in my toolset (and is always at hand with Chatterbox’s global hot key) and I’m curious to see how it develops and how I and others will continue to find creative uses for it and ways to integrate it into our workflows. Feel free to reach out if you’d like to share any cool use cases for ChatGPT that you discovered for yourself.

A screenshot of the main window of chatterbox depicting an example conversation

New Side Project: A Native Mac App for ChatGPT

Thursday, 29 December, 2022

I’m excited to share with you a new side project that I recently launched: Chatterbox, a native macOS app that makes it easy to interact with the ChatGPT website from your desktop*

It all started when ChatGPT was released. Like many of you, I was excited to try out the new website and start chatting with the Open AI’s Chatbot. But as I was using it, I found myself frustrated by the fact that I had to stitch together multiple screenshots to share conversations with my friends. I also wanted a more convenient way to use ChatGPT on my Mac, with better OS integration and a global hotkey (kind of like “Spotlight for ChatGPT”). That’s when the idea for Chatterbox was born.

Features and Design

One of the standout features of Chatterbox is the ability to easily take screenshots of your entire conversation with a single button press or keyboard shortcut (⌘ S). And if you want to quickly delete or export those screenshots, the in-app screenshot manager makes it a breeze with drag-and-drop functionality.

But that’s not all - Chatterbox also comes with a global hotkey (⌥ Space, or a custom hotkey of your choice) that allows you to summon ChatGPT from anywhere, just like Spotlight. Plus, there are convenient keyboard shortcuts for all the important actions, such as ⌘ N for “New Chat.”

The app’s UI elements are fully designed to look and feel right at home on your Mac and it even includes automatic dark mode switching based on your system settings.

I’m sharing Chatterbox for free on Gumroad. If you feel like supporting the app, you can share it with your friends or on social media, or consider leaving a tip on Gumroad.

I hope you enjoy using Chatterbox as much as I enjoyed creating it. Stay tuned for more updates on this and my other projects.

*Footnote:

The app has actually been available for over two weeks, but I have not gotten around to writing an appdate blog post for it yet 😅. I’ll try really hard to post here more regularly going forward (#newyearsresolutions 🙃)

A view of our balcony in our Bonn apartment where I'm watching the sunrise and writing my first blog post for the new website. There's a cup of freshly brewed espresso next to my Laptop.

Hello World. Anyone Still Out There?

Sunday, 04 September, 2022

Wow, a blog post - must’ve been a while since I wrote one of those… In fact, I had to go back and revisit my old blog to find the last one was from September 2016 - six years ago!

Someone call pest control, cause we’ve got a serious infestation of Time Flies! 🕰 🪰 🪰

Seriously though, as I’m typing these lines and chuckling about my brilliant joke (sorry not sorry; the terrible puns are gonna be a thing ‘round here 🤷‍♂️) while enjoying a fresh morning brew and watching the sunrise from our balcony, I’m thinking to myself that I’ve really been missing this whole blogging thing and I definitely don’t want to wait another six years to write the next post - I promise (more to myself than anyone else because at this point I expect my regular readership to be… nil)

Quick Intro

So, you’ve not only somehow stumbled on this post but for whatever reason are still reading despite the time flies pun? Well, I have a feeling we might get along pretty well, so let me introduce myself 🤓

Background, Interests and Experience

My name’s Manuel, I’m originally from Germany (where I now live again) but have lived in Scotland, England and California over the last seven years. I’m a software engineer and designer but also a hobbyist musician (guitar, singing) and like to dabble in “the arts” and explore the outdoors (especially hiking and mountain-biking).

Some of the topics I’m most interested in are “Tech” in general (both hard- and software; specifically iOS, macOS, watchOS, smart home, automation and app development) but also “lifestyle topics” like outdoor adventures, travel, mindfulness, productivity and many more. Expect random posts about all sorts of things on this blog but rest assured I implemented a category filter so you can only read what’s interesting to you and ignore the rest.

For the five years prior to my relocation back to Germany, I’ve been working as a software engineer at Apple, where I had the exciting opportunity to help build some of the software that I personally use on a daily base and learn so much about software development in general and the Apple ecosystem in particular. Most importantly though I got to work alongside very kind, passionate and brilliant folks - many of which I have the honor to call my friends today. If one of you is reading this, I really miss y’all 🥲

The Road Ahead

After moving back to Europe, I decided my next step will be working as an “independent iOS & macOS developer” doing a mix of freelance work and my own app projects. So far this has been a lot of fun and quite a wild ride to say the least. Starting a business for the first time can be challenging, starting one in Germany (where we love bureaucracy) even more so, and doing this while still dealing with the aftermath of a transatlantic relocation with all that it entails? Well, let’s say, there’s been a bit of “admin overhead” going on over the last half year and I cannot wait until the dust has fully settled so I can really get into my groove and have a bit of a “routine” again for a change 🙃

I will say though that I have been spending more and more time doing the things I love (building cool stuff) lately, with this new website being one of them! Expect more to come going forward; in particular, I am hoping to launch a beta test for my first app Zenitizer on TestFlight soon. Stay tuned for Appdates.

Why the Radio Silence?

You might be asking why it took me such a long time to write a blog post? Well, “it’s complicated” and ultimately due to a number of factors, but in a nutshell mostly because Apple had fairly strict policies around any kind of public speaking or publishing of content related to Apple itself or “The Tech Industry” and while there was not a blanket ban on blogging/social media, I definitely would’ve needed to be careful about what I write online and how it’s worded so I decided to play it safe and just not post anything for a while.

About This Website

If you are reading this, it means I have finally published my redesigned website 🎉 As I pointed out above, I’ll be blogging about a number of topics and, of course, this will be the primary channel to learn about My Apps and get any Appdates about them.

Feel free to reach out (via Email, Twitter, Mastodon, or LinkedIn) if you have any thoughts or questions, whatsoever. And please let me know if there are particular topics you would like me to blog about. I will certainly follow up with a more technical post about the design and architecture of this website in the coming weeks.

For the curious and impatient: I’m still using a static site generator but I switched to Hugo in the meantime. This time, I completely designed and implemented the theme myself using the lightweight and highly flexible CSS framework Bulma which has been a joy to use.

But I’m getting ahead of myself here… Coffee’s empty and the sun is up, so I’ll stop writing for now.

Until next time ☕️ ☀️

“A view of our balcony in our Bonn apartment where I’m watching the sunrise and writing my first blog post for the new website. There’s a cup of freshly brewed espresso next to my Laptop.”