A week ago I have publicly launched an iOS app called Ticket Holder. It’s an app where you can import tickets in PDF file format. This has been my side project for a few years already. Here is the story of how it came to be.
I have always been interested in dedicating my free time to some kind of a side project. I am interested in either solving some sort of a problem of mine or doing something that is in the field of my interest. With the side project, I want to work differently than I am used to in my daily work. It can be different technology development or something completely different from engineering (like recording and producing a podcast).
Problem and Solution
Ticket Holder is an app that is solving my struggle to organize tickets to the events. At any given time I have tickets to events that I will be attending in a week or a month's time. It can be tickets to a theater performance, movie tickets at the festival, music concert or even basketball game.
In recent years I have forgotten about tickets and I have missed at least two events just by not being well organized with my tickets. It was an even more awkward moment to come to the concert and learn that I have purchased a single ticket even though I was going with my wife. Because of all these problems I believed that an app that I can build will be of great help.
Apple Wallet support is getting more popular but it’s still not the main format of how I get tickets after the purchase. Even when Apple Wallet is supported, all the tickets are provided in PDF format. That’s the most common for any type of tickets. That’s is also what I have built my app upon - importing PDF tickets.
Even when you get your tickets to Apple Wallet, it’s still a great mess:
- Wallet tickets are not automatically archived
- You can’t get a glance at what are upcoming events
- It’s rather challenging to see the event date
- It does not integrate with your Calendar
- There is no easy way to share the ticket before the event
Overall, I find only three key features in Apple Wallet that are super valuable for tickets when it’s used: getting automatic full brightness for barcode scanning; providing a fixed view for good barcode scanning; getting the ticket to appear on the lock screen at the right time.
With my plan what I can do with Ticket Holder, I knew I can replicate two of the three earlier mentioned key features. But with all other key functionality may be Ticket Holder can give more overall benefits. However, there is one feature that I can’t compete in easiness — Apple Wallet tickets come in a well-predefined structure (title, date) with all the right metadata (seat, row, etc.).
Here is how imagined Ticket Holder working:
- You can use the Share Sheet to export PDF file to Ticket Holder
- Ticket Holder scans for barcodes and tries to predict the type of event, title, and date. You can quickly add ticket as key information is well predicted
- All tickets are listed sorted by its upcoming date and time
- Ticket Holder automatically creates a calendar event
- At the time of the event, you open the ticket and you get a key call to action button - Zoom to scan. It automatically gets your screen brightened and zoomed to the barcode. Arrows forward and back let you iterate through all the barcodes
In my previous career gig, I had an opportunity to lead the development of a mobile app. The mobile side of the product was a great success and I really enjoyed working on mobile platforms. Since I do not get to work on consumer-oriented products nowadays I felt nostalgic about getting to work on a mobile app.
As a had great experience with React Native technology in the past, I also used it for Ticket Holder. To my surprise, along the way, I did get to write quite some Objective-C code. For things like Cloud Sync for the tickets or privacy-oriented Calendar suggestions, I had to work with the latest APIs. I see that my next step could be contributing a little bit back to React Native community at least with writings on how to take the benefits of the iOS ecosystem.
I got an early version working on my phone rather quickly. However, it took more than two years to get the app publicly launched. Along the way I had abandoned the project several times but I kept coming back. Ticket Holder was the greatest learning project on how to manage myself. When I was stuck with code I tried to design; when I was stuck getting the feature to work I had to strip it out from the roadmap. Eventually, I got the whole app designed, programmed and launched by myself. Next step is to learn how to promote it.
There were few important features of Ticket Holder that might not seem to be a big deal but were very important for my app vision. I don’t want to rely on my own built backend. I don’t want to protect anyone's valuables in my server. Also, I want to make this app long-living even when I will get bored with it. There is no user registration in the app but all the tickets are synced with iCloud so you can access it on two different devices. Also, I can’t get access to the tickets you have imported to the app. The storage and sync are managed by Apple and not being transmitted to my nor any third-party infrastructure.
I would love to see Ticket Holder get viral success but the probability of it happening is very low. Therefore I will try to go slowly listening to other people how this app can be useful for them. At least until Apple gets to improve the Apple Wallet app.
One key feature that has been already part of version one is the possibility to export already imported tickets to Apple Wallet. This is the biggest expectation I heard from people trying out the app. This app is already solving my problem but I believe it can help many others. Even if it’s a tiny community of users would love to know people are having the app on their home screen.
Getting people to signup for TestFlight and getting positive feedback was very uplifting. Launching it and getting it public was a great sense of achievement. This has created a new experience that I have expected from side projects. There are still new experiences that I can get with Ticket Holder so will try to dedicate some of my attention-loving this project.