Lotus Timer - The Beginning
Tags: ios, swift, coredata, cloudkit
Published: 2020-11-23 06:35:54

# Another meditation timer?

This is a project that I've wanted to do for a long time, but things always tend to get in the way for one reason or another. But I'm finally diving in fully, and I'm excited about it, even though it's an app that's "been done" (what hasn't?).

I've been meditating off and on for... well, forever. When I manage to make it a regular practice, its benefits are clear and notable. That's without the years of continued practice that serious meditators achieve, so I know that it's an incredibly worthwhile undertaking. If I can contribute to that in some small way, or make it easier for someone else to engage in their practice, I will be honored.

As someone who meditates, I've obviously tried some of the apps that are out there. And I've found **literally all of them** lacking in some way. The one that I loved best I got around the time I got my first iPhone. It was called Soto Timer, and it was created by an indie dev who didn't keep updating it, so it's long-since stopped working. I don't remember the dev's name, but I thank him for building that app 🙏🏻

## What's wrong with meditation apps?

Obviously I haven't tried all of the apps. But I have two main issues - for the lack of a better term, because they really aren't problems except that they aren't providing what I'm looking for - with the ones that are out there that I'm aware of.

### Meditation that's not even meditation

The most popular meditation app I know of is Headspace. I know a lot of people who love it, and I won't discount it. I've used it a little and I can see the appeal. But, like... meditation is one thing, and Headspace is not that.

I may get some blow back on that, so, just know it's my opinion based on what I've learned over the years. But _meditation_ is the practice of focusing on one thing - your breath, a flame, a mantra, a sound, a white wall - as a way of training your mind. There's more to it, obviously, but that's not the point of this post.

What Headspace and similar apps do is sometimes called "guided meditation." Some of them are better termed "visualizations." They can have positive effects, can help you learn new ways to handle things, etc. But it isn't what I mean when I say "meditation."

**What I don't like about these types of apps:** they tell you how to meditate.

### Meditation timers that are literally just a timer

The second thing is that we all have a timer built into the Clock app. There are some pleasant alert tones that you can choose to call you make to your normal mental state without being jarring. If a meditation timer doesn't do anything else, then, what's the point?

# Making the app I've wished for

The thing I liked about Soto Timer was that you could set up different intervals and choose a tone to sound between them along with how many times it would sound. At times when my practice involved more than just silent sitting, this was helpful as a way to transition between one phase to the next. If I need to pick up my phone and set the timer again for another session, that can really take me out of the mental space I was trying to cultivate - especially if there are notifications on the screen.

Lotus timer is going to be different because **you will tell it how you want to meditate.** And here I kind of go back on what I said before, because if you _like_ guided meditations or visualizations, **great!** Add one in! This app will give you that option.

# Product features and parameters
Okay, so now let me get to the real stuff. What are the features I want this app to have? Not all of these features will be developed all at once. This is just the wish list.

1. **Simplicity.**
  * I want this app to be feature-rich but also dead simple. Minimal annoyances.
  * Controls should be large and easy to use with intuitive gestures.
2. **Customization.**
  * Users should be able to determine as many aspects of their meditation session as possible. Limits should be kept to a minimum. The app should be able to adapt itself to whatever meditation or other spiritual practice/mental discipline the user wants to use it for.
  * Users will be able to save as many different sessions as they'd like so that they can quickly choose the one that fits their needs when they open the app on any given day.
3. **Cross-platform.**
  * Saved sessions sync across devices.
  * Will definitely target iPhone, iPad, and Apple Watch.
  * Apple TV and macOS are secondary considerations.
4. **Multi-media.**
  * Segments can utilize audio and visuals.
    * Music.
    * Pre-recorded audio clips. This is where guided meditations can come in. Users can record themselves (or someone else) reading a guided meditation and play it back during a session, or import from an audio file.
    * Text can be added for display or scrolling playback. This allows the user to add prayers, chants, sacred texts for recitation or contemplation, etc.
    * Anything recorded should be exportable.
5. **Sharable.**
  * Routines can be shared with other users. I can see two possible ways for this to work.
    1. Direct sharing between people who know each other.
    2. A limited social aspect to the app that allows for sharing more broadly.
  * This should include recordings created by the user.
6. **Accessible.**
  * The app should follow accessibility guidelines as much as possible.
7. **No forced/coerced subscriptions.**
  * The app will either be a one-time purchase or free.
  * Will provide the ability for users to express gratitude through subscription or one-time payments.

That last point just feels right for this particular app. I don't have anything against being paid for my work.

## Tech stack

How do I plan to execute all of this? Luckily most of it can be accomplished with existing Apple frameworks!

* **Swift 5**
* **SwiftUI 2** for user interface
* **Core Data** and **CloudKit** for persistence and syncing
* **Core Audio** for audio recording and playback
* **MusicKit** and **Apple Music** for music playback
* **Catalyst** for macOS compatibility (I know nothing about this, so it will be an adventure!)
* And more...

# Next steps
I've already begun coding the app. In my next post, I'll discuss what I've done so far and link to the GitHub repo for anyone who is interested.

My plan is to get the bones of the app in place first and then work on beautification and additional features next.

I hope that someone enjoys coming along on this ride with me! Even if not, I'm glad to be documenting what I'm doing and my thought process around it to reference back to later.