I have been programming for a while now. I graduated in summer of 2011 and since then I have used a lot of different languages, frameworks, databases etc. I have a good understanding of programming languages and I can pick up a new language/framework in a day or two.
I remember having started a lot of side projects just to play around with a new language or framework. I scrapped almost all of them before they could be finished. I don't regret killing them but I wish I had documented my experience of working on new exciting things just so I could look back from time to time and see how I got to where I am. Unfortunately during that time, the thought never crossed my mind. I would have loved to read about what I was doing two years back. But dwelling over the past is futile. I have now made it a point to write about everything of importance to me right here on my blog. And in that spirit I am going to write about another little project of mine, wrinq.
Like with most of my projects I started wrinq to create something in language that I was learning at that time,erlang. I stumbled upon erlang while reading a random post in hacker news. I have this terrible habit of switching programming languages on a whim. I just can't seem to stick to one. Introductory tutorials on the language impressed me a lot. I was at once taken in by the simplicity of erlang and I was eager to use it in a real world scenario.
For long I have had this idea of a messaging app that was simple to use and valued privacy. Where I was in control of my data and which allowed me to engage with my customers in a personal way. Basically I wanted a system that worked like email but could double as IM if needed. Why I wanted this?
Because I have been meaning to run an independent, small business of my own for quite some time. The only salable skill that I possess is programming so the natural course for me would have been to turn into a freelancer. Which I did. However after working on grossly under payed jobs I figured it would be a lot better if I could go completely independent and focus on inbound marketing rather than go through the ordeal of underbidding on jobs in hopes of landing a contract. A recurring thought that came to me was "wouldn't it be nice if a potential client could just message me instantaneously over the internet and discuss an arrangement?". Sure there are other ways to message like skype etc but they present a barrier in communication. Which is, a connection must be made before active discussion can take place.
Taking this simple idea a bit further I came to conclusion that there must be several one man businesses that would have encountered the same problem. The popular CRM platforms are too focused on providing a solution to large firms with big sales teams. When it comes to small one/two person businesses these solutions do too much. I for instance have no need to follow up leads, track their activity on social networks or need an automated email system. All I want is an easy and cheap way that allows my potential clients to communicate with me privately.
So with a burning enthusiasm to do something in erlang combined with my real need for a product that did not exist I have set to build wrinq. Since wrinq is entirely web based there is a lot of cool HTML 5 goodness that I use. I am using web sockets for the delivery of messages. For this purpose I have created a library wrinqle that allows me to use erlang events in conjunction with web sockets. Which makes sending messages to individual sockets on the web a painless process.
With the support of indexed db in all modern web browsers I should have no trouble in persisting the messages without sacrificing the privacy of the user. A hidden benefit of this decision is that it could help me take off the load from the server. Since I will be storing messages client side I will have fewer things to index and store on my server. Win win situation.
But I won't sacrifice convenience for privacy. Storing messages on the client will only work when the sender and the recipient are both online. What happens if the recipient goes offline? Remember what I said earlier. "An app that switches between email to IM" . Well this is where the email like properties will come in handy. In case the recipient is offline all of the messages will be stored on server. Once he/she comes back online the unread messages will be transferred to the client and deleted from the server.
Chrome and firefox apps make it easy to port a web application to the desktop environment. So running wrinq on desktop should not be a problem. I have already experimented a bit with chrome apps and it seems that they support web sockets so things are looking good on that front, though it will be a while before I start actively working on this. I am also keeping my fingers crossed for rumored chrome and firefox apps for android which could provide an easy way to run wrinq on mobile.
So you are probably asking yourself when you can get your hands on wrinq. Well pretty soon. I have already tackled the biggest problem, that is the delivery of messages from one user to the other. All that remains now to work out the kinks and tune the application to make it a joy to use. In the mean time follow @getwrinq on twitter for updates.