The journey of the development of my apps

Jam Maestro

guitar tab music sequencer

Jam Maestro was my first app and the app idea that inspired me to learn iOS development. Frustrated with the serious options for writing guitar-centric music on my iPhone, I decided to try and bring my dream app to life. Three years, many late nights, and lots of learning later, the app was finally released. I then spent another year developing it full time to lift it to the success that it is today. First released in 2013, it continues to be my most popular app with a very passionate fan base. 

Technologies used:

Objective C C MVC Manual Referencing Counting
CoreAudio StoreKit CoreMotion Inter-app Audio MIDI cocos2d Audiobus Ableton Link AudioCopy Dropbox SDK

physical flip memory game

Wanting to learn multi-platform development I created Flippit using the multi-platform computer game framework cocos2d-x, which uses C++.

Flippit is an innovative memory game where your physical device is part of how you play the game. You’re shown a grid of colours, then you have to flip your device down and back up again. When you flip it back up the grid is greyed out and you have to indicate where all squares of a certain colour were. 

Flippit is available on both iOS and Android. I am still the best in the world at Flippit by a large margin.

Download on Google Play

Technologies used:

C++ Objective-C Java MVC
StoreKit CoreMotion cocos2d-x ChartBoost SDK AppLovin SDK GoogleAds SDK
Icebreaker dating app startup

dating app startup [discontinued]

Icebreaker is a dating app startup I did with my twin brother. The idea behind Icebreaker was to try and make initial chat conversations in dating apps more varied and interesting by getting participants to complete random icebreakers before they chat. Icebreakers could include such types as Questions, Polls, Draw them a picture, Sharing music or videos, Deface their profile picture to look like X, Two truths and a lie, Would you rather, and many more. Users could also complete a daily global icebreaker and see all their existing matches responses and reconnect with them. 

We utilised the power of the Texture graphics framework (created by Facebook/Pinterest), to create a world class app with an infinite scrolling newsfeed and seamless image loading that could run on even the most basic devices. I handled the app and my brother (a talented full-stack developer) handled the backend server. 

Icebreakers Achilles heel? Its unique selling point happened after you match. So unless you match with someone, you don’t get to try all its unique features. Dammit.

Technologies used:

Objective-C MVC
CoreAudio CoreGraphics AVFoundation Networking StoreKit CoreLocation MessageKit Push Notifications Facebook SDK Texture IGListKit Couchbase Lite PINCache Giphy API Instagram API Youtube API POP Animations
Bit Maestro

innovative AUv3 bit crusher

Bit Maestro was my second foray into music apps (well, not quite true. I was working on making a synthesiser app before I started Icebreaker, but due to priorities it never got finished). Bit Maestro is a digital distortion which can take sound and give it that 8-bit retro feel. Its a class of digital distortion called a bit crusher which takes an audio signal and reduces its sample bit rate and frequency is a very forceful way (hence the name crusher). The end result is it can imbue audio with a 8-bit retro quality and create a lot of harmonics along the way.

Bit Maestro takes this concept of a bit crusher and goes even further by allowing you to selectively mute or invert specific bits in your audio signal. This can be subtle to dramatic effects on the distortion depending on which bit you affect, and gives you a sound and level of control not possible with ordinary bit crushers.

I built Bit Maestro using Audio Unit V3 (AUV3) technology, meaning it can be opened and used as an independent module inside other apps. Say you had a music sequencer app with many different audio tracks – you could open up multiple independent copies of Bit Maestro inside the app and have each one apply a different distortion to each track. Very cool and very handy when it comes to a utility such as Bit Maestro. 

Technologies used:

Objective-C Swift C++ MVC
CoreAudio Audio Unit V3 MessageKit
Gym Rest Timer

multi activation timer

Whilst at the gym I was getting frustrated with how many steps I had to go through to take my phone out, unlock it, find the timer app and start a timer to time how long I should wait in between my sets. 

I built the aptly named Gym Rest Timer to overcome this issue, with the goal to make it as easy and frictionless as possible to start your timer. It provides many ways for you to do this:

  1. Notification Mode – Sends you a notification to your Lock Screen when the time is complete. You can tap and hold this notification on your Lock Screen to simply restart the timer
  2. Media Player – Use the iOS media player to control your timer. This means you can control your timer from the media player shown on your Lock Screen, or restart your timer with a click of your headphone remote.
  3. Volume Gesture – The coolest way. Just do a simple up and down volume press on your device and it will automatically restart your timer. No need to even take your phone out your pocket!
  4. Widget  I created a ‘Today widget’ (those widgets that used to live to the left of your lock screen) so you can easily control your timer from there. 
  5. Siri – Simply say “Hey Siri, start rest” and it starts your timer

I used the building of this app as an opportunity to learn a few new technologies, languages and paradigms. Namely this was my first app using built using MVVM and reactive programming with RxSwift. I also recreated this app in Android so I could learn native Android development. Android came with its own set of problems but also allowed me to the freedom to go even further with ways to start the timer that aren’t possible on iOS. 

Download on Google Play

Technologies used:

Swift Java MVVM
CoreAudio Notifications Siri 'Today' Widgets (Pre iOS 14) App Intents MessageKit RxSwift Hero

shared digital photo frame widget

With the release of iOS 14 came an exciting new technology – Widgets. Oooooo. Now people are able to put widgets on their Home Screens.

I came up with an amazing idea for a widget app and once again convinced my twin brother to collaborate with me. I handled the app and he handled the Go backend. We weren’t going to make the same mistakes as Icebreaker – getting a MVP out as soon as possible was our top priority. We brainstormed ideas and got to work.

As speed was essential this seemed like a perfect opportunity to learn SwiftUI. I spent 2 weeks learning that and got to work. SwiftUI really delivered here and we finished the whole app production ready in 4 weeks after that. 

The concept of Ekko is a shared digital photo frame widget that you share with your friends and family. Any photo that is uploaded to the Ekko widget on your device also appears in the Ekko widget on the Home Screen of your friends and family. Think of it as a little portal on your Home Screen that others can control. As you use your phone you discover new photos on your Home Screen that people have left for you. You can also like and comment and have multiple Ekko streams, making it a rich social experience. 

Technologies used:

Swift SwiftUI MVVM
Combine WidgetKit StoreKit Share Extension Networking App Intents Rich Notifications MessageKit

instagram layout planner

I’m an avid traveller. Or at least I was. The life of app development and digital nomadism afforded me many opportunities to see the world. On my travels I took many photos and liked to curate their display on Instagram, making a little picture board of my favourite memories. 

Seeing how those pics will look together before you upload them however is not possible on Instagram, and there are many Instagram layout planner apps which can help you do this in advance. I used to use these, but felt most of them had poor UX and functionality. Worst of all, almost all of them were subscription based. This seemed crazy to me, and after a year or two of frustration I decided to disrupt the market with my own non-subscription offering, and that is how Curated was born. 

Technologies used:

Swift MVVM
CoreData CloudKit StoreKit Networking RxSwift Instagram API