This article is re-posted from my (now repurposed) Medium blog. Original post date: Dec 13, 2013
This is an article I’ve been wanting to write for quite some time and now I finally got the time. There are several reasons why I wanted to tell people, especially the local web development community, about Ohdio.fm’s tech stack. First of all, I wanted to share the technologies we use, so that other aspiring/established startups might gain some insight, or perhaps inspiration, from what we’re doing. Secondly, I personally am quite proud of what we have achieved in Ohdio.fm,- technology-wise -, from the backend technologies to the front-end development.
For you who haven’t heard us, Ohdio.fm is an online radio that let you listen to curated playlists of Indonesian music. We are currently available via the browser (desktop/mobile), a Windows Phone app, and a newly launched Android app.
When I first started planning for the development of Ohdio.fm, there are 3 important issues that I must address:
- The web-app needs to be developed as a Single Page Application (SPA). This was a number #1 priority because we need to let users browse the web app without interfering with the music player.
- A loosely-coupled system that will support the web app as well as future mobile apps.
- A streamlined development environment. Because I will code most of the app, I need to develop it without having to change mindsets between the backend and front-end.
Given the situation that we needed to develop the web-app as an SPA, obviously I started to look into Backbone.js. But being new to this framework, I started to search for its documentations and “getting started” articles on the web. I was a bit surprised that my search returned no good results.
For the mobile browser version we opted to use jQuery Mobile as the framework of choice.
I wanted Ohdio.fm’s backend server to work not only with the main web applications, but also for our future mobile applications. So I decided early on to develop the server as a REST API server. I used Express.js as the middle-ware between the API requests to the database models written using the Mongoose library (*thanks for the info, @ziyadbazed*).
I also wanted the CMS to be served by a web server separated from the main Ohdio.fm servers. So we developed the CMS using Code Igniter (PHP) hosted on a separate Apache machine.
At first we wanted to develop our own streaming server, but time (and budget) wasn’t on our side. Ohdio had use Java-based proprietary Wowza Media Server software as its streaming server before. It has an excellent performance and work seamlessly with our media player of choice, JWPlayer. So Wowza stays.
Currently there are two Ohdio.fm mobile applications, each for the Windows Phone platform and the Android operating systems. All these native mobile applications uses the API also used by the main web application.
Development-wise, there are still many things we needed to work on at Ohdio.fm. I personally think there are many parts that we can optimize further in terms of efficiency and security.
“If you are not embarrassed by the first version of your product, you’ve launched too late.” ~Reid Hoffmann
After the launch, we did have some glitches with the streaming server. There were also problems with RTMP ports. Not to mention working with Node you can easily found yourself inside a callback nightmare. But we managed to overcome those obstacles in time, re-factored the codes, and used better libraries. We even had the time to add some new features on Ohdio.fm since its inception on late June 2013.
Like the words of LinkedIn founder Reid Hoffmann: “if you are not embarrassed by the first version of your product, you’ve launched too late”. At the time, we believe that Ohdio.fm was ready, and we were so excited to share it with the rest of the world.
So when the CEO said “fuck it, ship it”, Ohdio.fm was born, and so was our technological scion.