Back in the early days of .NET there were not so many open source .NET projects out there. I remember playing around with .Text which was a blogging application (blogging was a new thing around that time) and the ASP.NET Forums which had source code available but wasn't really under an open source license, and there were things like IBuySpy Portal, DotNetNuke and Rainbow Portal (actually both DotNetNuke and Rainbow were based on IBuySpy, DotNetNuke was based on the VB.NET version and Rainbow was based on the C# version of IBuySpy but they both evolved way beyond the original IBuySpy). I gravitated towards Rainbow Portal because it was in C# and in 2003 I contributed the first Blog module to the Rainbow Portal project and was using Rainbow to host my own sites.
Not long after that I learned about the Mono Project which aimed to be an implementation of the .NET stack for Linux/Unix systems and I got pretty excited about the ability to be able to run ASP.NET on linux. I got to know another Mono enthusiast, Joseph Hill, from his GotMono forums (today he works for Novell directly on the Mono team). Joseph had managed to get IBuySpy (and a bunch of other .NET sample applications) working on linux with Mono, so I tried that out and somehow it just seemed magical and almost miraculous to see it actually running on my linux machine. Since I was a Rainbow enthusiast at the time I got the idea of trying to make Rainbow work with other databases like MySql and getting it to work on Mono. After reviewing the architecture of Rainbow it seemed like it would really need a re-write to abstract the data layer in a way that could support other database platforms and I ran into lots of issues trying to get it running on Mono. So ultimately I decided to start over working with the original IBuySpy code.
I changed the architecture to abstract the data layer away from the business layer so that I could plugin different data layers, then I implemented a data layer for MySql and managed to get it working on Mono as well due to the work Joseph Hill had already done. That was essentially the birth of mojoPortal, but it was very rudimentary at that point, it did not have a lot of features, so I began work on a blog and then an image gallery feature and then I migrated my data from my existing blog that was using Rainbow portal and MS SQL into mojoPortal using MySql on linux/Mono. The first official release of mojoPortal was in November of 2004, and for the next year I ran www.mojoportal.com and www.joeaudette.com hosted from a linux/Mono machine at first over a cable modem internet connection from my house and then later moved to linux hosting at GrokThis.net. Joseph Hill contributed data layers for PostgreSql and Sqlite back in those days, so we were supporting a more database platforms than other CMS projects from very early in the project, and later added support for Firebird and most recently for SQL CE (SQL Server Compact Edition). In 2005 after .NET 2.0 came out it became problematic to continue hosting under Mono because I wanted to be able to move forward with new features and improvements in .NET 2.0 and the Mono project was going to take a while to catch up. So I moved back to Windows hosting and maintained separate branches of mojoPortal under .NET 1.1 for Mono and 2.0 for Windows until the Mono project implementation of 2.0 .NET could catch up. Of course that was a long time ago and now we support only .NET 3.5 SP1 and .NET 4.0.
I continued working on mojoPortal nights and weekends for the next few years all the while working full time as a developer in the corporate world but in the back of my mind I had some vague notion that maybe someday I would build a business around mojoPortal. I didn't really have a concrete plan but I thought that if you keep doing good things eventually good things will come of it. Working full time and nights and weekends does take its toll over time and after several years of doing this I found myself wishing I could just work on mojoPortal full time because I enjoyed it much more than the things I had to work on for my day job. I had been getting inquiries about consulting projects related to mojoPortal but was turning them away because I was already working full time. Finally in the fall of 2006 I decided to sell my house in Tennessee to get my equity out of it and use that as money to start my own business. In 2007 and most of 2008 I did consulting work and some sponsored development where organizations using mojoPortal would sponsor development of specific improvements they needed. The ability to host multiple sites based on folder names was one major feature that was developed under sponsorship. But consulting was not really turning out to be the job I wanted, generally it took me away from making improvments that I wanted to work on and kept me busy working on things for specific customers that did not really advance mojoPortal. I was also running into a lot of issues where customers wanted me to sign contracts that said they owned the source code I produce for them and I could not sign these contracts because as an open source developer it would put me at risk of them suing me if they see some code in mojoPortal that looks similar to code I developed for them and since I was using the same patterns most code I did write for customers was similar to other code in mojoPortal. So I passed on projects that wanted these kind of contracts and it limited my ability to make revenue. It was actually much easier for other developers to do consulting around mojoPortal than it was for me because of this.
In early 2008 I decided to change my business model from consulting and try to build a business mainly selling add on products for mojoPortal as this would make it possible for me to work on mojoPortal full time and not have to keep chasing after consulting projects. It was July or August before I got my first add on product Event Calendar Pro on sale, and late October 2008 I put Form Wizard Pro on sale. Of course no-one will buy my add on products unless they are using mojoPortal, so I have to continue improving the free core feature set of mojoPortal to grow market share and gain potential customers while at the same time coming up with compelling add on features that can provide revenue to sustain me and make it possible to continue working on mojoPortal full time long term. So there is some trade off in my time between working on premium add on features and working on goals for mojoPortal and its free feature set, but obviously the future of mojoPortal also depends on my ability to make a living and the availability of premium add on features also makes mojoPortal more appealing in the market.
As of late 2010, even with still only a few add on products on sale my business model is working well enough to cover my living expenses (though I still live frugally and keep my expenses low). Going into 2011 I expect to continue improvements to mojoPortal and existing add on products as well as a number of new add on products to increase my revenue. I am completely free of debt and not interested in venture capital or investors. I am happy building my own business and being my own boss and I have the freedom to live anywhere that I can get a broadband connection. I feel very fortunate, it has been a lot of work but I have created the job that I want which is a much different feeling than taking an available job.
Update February 2012
2011 was a very good year for my business, with 100% growth in revenue over 2010. My business model is growing more secure and prospects for the coming year are very good. I have lots of planned improvements both to the free core feature set of mojoPortal and add on products. Actually the hard part is always choosing which of the possible things I could build are the best opportunities. I've got several new products and ideas in the pipeline and I see some real opportunities for additional products that expand on the functionality of Event Calendar Pro to meet specific needs for use cases such as hotel booking, equipment rental, appointments, selling tickets to specific seats in a venue such as for concerts.
2012-02-27 Joe Audette