In the past I have blogged about the Treefort 2015 Lineometer, well the Lineometer got such great reviews that I felt inspired, I felt like we could do more. So shortly after Treefort 2015, a group of friends and I reached out to the people who were working on the app last year and asked if they wanted some help. They graciously accepted and furthermore, gave us full control of the app!
Based on feedback from users and Treefort stakeholders, this years app (v.4.0.0 – v4.4.0 in the App Store and on Google Play) has been a great success! We haven’t been without our bugs (see What Went Poorly).
What Went Well?
From the get go all the people who helped with this project gave it their all, everyone brought their best skills to the table and we really made some great software.
Matt worked his ass off on the client portion of scheduling and I worked a bit on the back end storage/sync functionality. We ended up writing a NodeJS script that requests data from Google Drive (managed by Treefort HQ) and transforms it into what the app expects for an event stream. We run this update whenever data changes and it is still a manual process due to the sensitive nature of the event data.
Daniel was the lead for this feature and he really kicked it out of the park. We started out with a handful of static playlists that we hard coded into the client app and quickly realized the potential we had by moving the playlists into the back end. Daniel and I started by moving the same hard coded playlists we had on the client into the back end.
After we informed Treefort HQ of the potential we had here, they grabbed onto the idea and started supplying us with curated playlists! Long story short, they curate the playlists, we run a script, and push playlists to all our client apps whenever we want.
To top it all off, just a month before Treefort Daniel finished coding up an entire custom playlist feature! Now users can create and manage their very own Treefort playlists; so badass.
- Audio Streaming
What Went Poorly?
- Push Notifications
- Losing LocalStorage
The previous version of the application (developed by Phil Merrell) was written with Ionic and PhoneGap if I remember correctly. Even though we were starting from scratch with version 4.x.x, we decided to use Apache Cordova and Ionic because of the distinct benefits writing code once and building to separate platforms offered us. For a small team, with limited time and plenty of web dev skill, Cordova and Ionic was definitely the way to go.
Special thanks to Blake for all his hard work getting us setup in a new framework and providing us with the technical guidance through this phase of our design.
- Apache Cordova provides cross platform functionality allowing us to write code once and compile to different targets (iOS and Android currently)
- Ionic Framework is the front end SDK we use to customize the look and feel of our app, Ionic also provides some of the advanced functionality through Ionic.io (e.g., User Management, Push Notifications)
- AngularJS and ngCordova, to build our client side MVC code
- GitHub + CircleCI to automate build/test/deploy cycles. Since a Cordova app is really just a static website, deploying with CircleCI to an AWS S3 bucket makes smoke testing new builds a breeze.
Early on in our process we found out that we would need more flexibility with our back end data provider than what was available from the Azure site that drives the main Treefort Music Fest website’s data. Near the end of 2015, Wade led the charge on setting up our Elastic Beanstalk and NodeJS solution and we have run with this infrastructure configuration ever since.
Splitting off our own back end solution and proxying certain calls back to Azure was easy and provided a clean way for us to valmorphorize our data. It also allowed us to write some custom functionality in our middle tier that isn’t required by the website (e.g., Lineometer, Playlists). Additionally, we can cache and scale at different rates than the website as our traffic patterns are different.
- AWS Elastic Beanstalk NodeJS environment configured with auto scaling and a MySQL RDS database instance
- GitHub + CircleCI to automate build/test/deploy cycles
Shareable Schedule, Shareable Playlists, ideas?