Spotify to Youtube converter : My first web app
The past year, I have created my first piece of software from scratch. And I know that even though it is ugly and has no coverage at all (and doesn’t deserve it) it works.
More lately, my first android application came out (it has reviews, but in french :)). I learnt a lot during this one, as it involved reverse engineering a POST Request based protocol and I had no knowledge about the Web concepts at all. In fact I didn’t even know know what POST was :). And even though I have updated it only once since then, I have around 270 active users and 2 to 8 more coming a day. (And people are really happy!)
Those last weeks, I have been working on spo2tu.be, a simple spotify to youtube converter and could finally release it this week end. So I can officially say that I also created my first web app!
The concept is really simple:
Spotify users can share songs via facebook. But I hate facebook, and I hate the facebook integration in other parties even more.
The other aternative is a http link. Thing is this link is only playable for spotify customers. And this is boring!
So comes spo2tu.be, that takes your spotify url and tranforms it into its best youtube equivalent so that you can share it with your friends without any problem! I must say I am quite happy with the app, but it seems like I am the only one having this problem because the website had no traction at all, whether it be on hacker news or reddit. What I am really thrilled about though, is that this was the first time I have scratched my own itch, and not someone else’s. Since the app is up, I already used it 4 times a day to share songs.
As usual, I tried to do something I had no experience about at all, and it has been quite a mess.
But let's talk about the way the magic happens
Once you enter the spotify web url, spo2tu.be queries spotify’s webplayer and extracts the name of the song and the group from the page. I know I could have used the api, but I already had some experience of webscraping with Brestram and I didn’t want to query the spotify api a lot with my own customer name. Once the name of the song is known, I simply query the youtube API and retrieve the most likely candidate. Finally, the server sends the results back to the client which display everything to the user.
This was the first client/server app I developed from scratch, so I spent quite some time trying to figure out how everything had to work :). I wanted to get my hands of node for a long time, so this was my requirements for this project (even though Flask would have probably been simpler). For the client side code, I decided to take backbone as a basis. I wanted something low level, so that I could grasp as much concepts as possible. This is why I decided to avoid meteor, for example. I use bootstrap for the rendering. I started with purecss, but having no idea at all of what I was doing I backed up after a few hours to an easier choice. I use mongodb in the server, which is really convenient because you can feed it with json objects directly.
I thing I said it all.
The first real difficulty for me was to understand the concepts behind node, and especially the asynchronous programming part. At the very beginning, it even made it difficult to understand the docs, because the prototypes of the methods looked strange! But after a few hours everything started to feel easier. And I was more than happy to let go of the threads and other queues :). I also had quite a lot of trouble setting up the server environment. I spent hours trying to understand ec2, to finally find my instances destroyed or my security groups lost for no reason (or at least I couldn’t find them!). On top of that, I was quite scared about the whole automatic billing/scaling stuff so I decided to stop with that. I finally found digitalocean, and everything became (way) easier! Backbone and boostrap were easier to handle that I would have expected. Maybe it’s not that difficult after all :).
But the app is finally up, and I hope some people will find it and start using it. I don’t plan on making anything special with it, but it is still cool when the stuff you build with your hands is useful to someone :).