Plango

  4 mins read  

Plango

Summary

Plango is a travel planning app founded by former Apple employees. It doesn’t try to compete with the many booking or travel info services such as orbitz or trip advisor, but rather be the glue that connects all those dots together. The idea is to create and share travel plans to easily plan trips and inspire other travelers. I was hired as a contractor to build the iOS app as the sole iOS developer. I built everything from scratch in Swift and connected it to their node.js backend. The UI was designed by their CEO / designer, and I worked with her to tweak various aspects to deliver the final look and flow of the app. The main APIs and frameworks I used were SwiftyJSON, Alamofire, Alamofire Image, GooglePlaces, Mapbox, and Realm.

plango1

Explanation

After finishing my time at a previous start up, one of the founders, who I knew previously, asked if I would want to help them build their mobile app. She is the CTO and was in charge of building the web app. I agreed and we negotiated the terms to build a complete 1.0 app. It does not have all the features the web app does, but we agreed that would require a larger team and more money. After I finished the agreed scope of the project and shipped the app to the app store, I moved on to another endeavor as they had not located any further funds to continue to pay me.

plango2

Problem

While the web app and database were already set, there were no mobile apps of any kind. It was agreed that I would just do the iOS app, and an Android version would be built by a different developer at some other time. As such, I had the freedom and the necessity to architect and build the entire app by myself. Some key problems to overcome was how to hook into the existing REST api’s and parse the JSON correctly. Because the web app already existed and was in production in beta form, sometimes there were inconsistencies in the way the data was delivered and I had to write the adaptations and work with what was there. I worked closely with the CTO to deliver a proper connection to the node.js backend which connected to a MongoDB instance.

Solution

It is written in Swift and uses cocoa pods to implement 3rd party libraries. My approach is to use as few libraries as is reasonable, to prevent bloat to the project. As such I build large portions of UI code and such myself, but use standard network libraries like Alamofire to not reinvent the wheel in other places. Furthermore, the UI elements all follow sound iOS principles using existing solutions provided by apple in UIKit, for example UICollectionView and the like, so the code is easily readable and maintainable. There are no super custom controllers or views for example, as Apple’s solutions can be tweaked to provide the desired effect. In addition, much thought and work went into the naming of the classes and methods. There are several helper methods and enums to provide common access across the app to key elements like specific colors or image dimensions to provide easy consistency.

plango1

Results

I delivered the app, provided QA support to bug test and make sure it worked as intended, conducted a simple test flight beta test, and then shipped the app to the app store. All in all they were happy and my contract concluded. The app is live and you can try it out. It matches their UI target and functions as intended with no known major bugs at this time. All together I am happy with my work and the result, and would like to continue work adding features if funding allowed for it.

Conclusion

The app was shipped and does what it was intended to do. It does not have the features the web app has, but I would like to continue working on it. Some immediate needs to address now would be updating the code to Swift 3, and adding the ability for user to create and modify plans on the device without needing the web app. Furthermore, there can be some refactoring in the view controller classes to more proper MVC format, and reworking of the Realm implementation for data persistence in a more elegant fashion.