Wednesday, October 20, 2010

Stribe

It has been quiet on my blog for some time.
That's because i've been busy with my biggest and most important project so far: Stribe.
This article is meant to tell a little about project and the company behind it and moreover to shine some light on the technical details.

Stribe is a company i started together with a good friend under the wing of my former employer Colours.
In january i started the development on a platform for social shopping; a website that offers a huge catalog of products from lots of big webshops and allows users to create profiles showing what they like, sharing it with friends.
Make wishlists while shopping for goods, compare prices between shops and tons of more functionality... that we eventually did not use in the end result... :P

As it goes with these kind of projects, we have changed the concept along the way and eventually ended up with two very cool websites:

Stribe.nl
Offers discounts on online fashion for a huge amount of brands and webshops.
We also organize "collective discount" actions where users receive a higher discount if more people sign up for the action.
Users need to create a profile that reflect their brand and shop preference so that they will only receive updates for those discounts that are relevant for them.

Boetiek.nl
Is basicly an online catalog that hold all fashion products for over 25 webshops (and growing) which comes down to over a 100.000 products.
It's an easy tool for those who are looking to buy fashion online and don't want to search through all those websites individually.

Ok, so that's the functional (for us tech-geeks, boring) part of the story.
What is behind these sites that makes this all possible?

We use:
- .NET 4.0 Framework, developing in Visual Studio 2010
- C#, MVC 2, jQuery
- MS-SQL 2010
- Spark View Engine
- Xapian search engine
- NHibernate (2.something i think)
- Fluent NHibernate
- NHibernate Lambda Extensions
- NUnit
- Umbraco (for very basic content storage)
- GitHub for sourcecontrol with GitExtensions as the client
- FogBugz for issuetracking
- Yourzine's Footprint for outgoing mailings
- a lot more of small helper utilities

.NET 4.0 and MVC 2 were still in beta when we started.
That's one big advantage of running your own project: you may decide to use techniques that are so new they are not even final released and there is no one there to stop you! :)
Before the start i did not have any experience at all with MVC which made it even more exciting!

I got to develop some pretty cool components during the project.
First there is the whole custom site framework with connections to Umbraco to retrieve content (we did not use umbraco rendering, just for simple content storage) and of course connected to our SQL database (which at some point contained close to 100 tables).

Then there is the Importer Tool, a tool that imports all product feeds from the webshops we offer in our catalog and adds them to our database.
This also includes all related brands and product properties such as color, size, material, etc.
As most shops offer the feed in their own format, each one needs to be converted to our own standard, then added to our database and finally each product needs to be placed in a category which was a huge challenge on it's own.

Another interesting task was implementing the Xapian search engine that crashed when used in combination with 4.0 .NET framework.
This had to be solved using WCF to isolate the search service from the rest of the solution.

Last but not least, the automated build process.
With one push of the button i can build the solution and generate a deployable output that can be dragged and dropped to the production server.
It takes care of merging and minifying of css and javascripts and generating the correct configuration files for the production environment.

I can go on like this for hours, but you get the point: it was a project full of challenges and also with all freedom to solve them.
Every software engineer's wet dream 8-)

We're currently running the sites on 2 loadbalanced Windows 2008 webservers and one dedicated SQL Server.
There is 24h monitoring that alerts me immediately when any of the systems fail.
I'm happy with the result so far and believe that we now have a steady base for future development.

If i get more time and feel like writing, i would like to go more into the specifics of some of the sections and choices i've made.
One subject that deserves some more attention is the Spark View Engine we used, which has a lot of potential (although i suspect that Razor might replace Spark alltogether in the future...)
Also the Fluent NHibernate and Lambda Extension made things so much easier for us.
Hopefully more about that in the future!

For now, i'd like to invite you to check out the end result and see for yourself.
If you have any questions, suggestions, free drinks or marriage proposals, feel free to reply!

/BruuD