NinePlaces

I've just open sourced an old project of mine, NinePlaces, and I wanted to write a quick blog post about it - so that, at least, there's some small record somewhere of the work that I put into the project.

What is NinePlaces?

I worked on NinePlaces between 2008 and 2010. It's a Silverlight based travel planning/journal website that has a bit of a unique interface: the interface is entirely based around a timeline ribbon.

The basic idea of NinePlaces was to create a simple and fun travel planning site. When I started working on it, my girlfriend and I had been planning a vacation to Thailand, and I found that existing travel planning tools tended a bit too far in the direction of 'lists and forms' for me. I wanted something that was fun to use.

I also wanted something that would be more than just an itinerary. I wanted to create a site where the itinerary that you create before a vacation would transfrom into a simple travel journal while you're on vacation, and once you've returned, would transform again into a visually appealing travel log that you could share with your friends.

How did it work?

NinePlaces was kind of born out of the first iPhone, in a sense. I remember seeing the announcement of the iPhone, and being blown away (as most people were), and thinking 'yes, this is an important step in interface design'. I knew that touch would be important. Unfortunately, I didn't have an iPhone or a Mac: I had a PC, and I had the web. So, I started building out something very much touch-oriented in Silverlight. Everything about NinePlaces stemmed from that - it's very, very much oriented around dragging, dropping, etc.

For example, all of the icons at the top are dragged into position on the timeline. The timeline is panned by dragging and zoomed by mousewheel. You can easily imagine this translating to a touch device: tap and drag, pinch to zoom.

So, to construct out a vacation, you drag icons to their position, tap them to open their editor, and then fill out information. There are three icon types, Transportation, Lodging and Activity, and each activity has it's own line above the timeline. At a glance, you can look at a timeline and see when your next flight is, or what you had done on February 15th.

Additionally, there's a photo line: as with icons, you upload photos and then position them on the timeline. I had planned on using EXIF to auto-position them based on when they were taken, but I never made it there. Nevertheless, it gives you a quick, visual way to see the photos that you took on your vacation, and what activities they corresponded to.

On top of the basic timeline features, I added a few other useful features: itineraries and lists. Lists are useful in planning - creating a list of things to do before leaving, clothing to pack, etc. The itinerary section translates your timeline into a printable itinerary that you can easily carry with you - it includes all of the information associated with each event (flight numbers, addresses, etc).

Technical Details

NinePlaces is built around C#/Silverlight on the front end. It has several modules (and actually has a quite interesting solution for dynamically loading the smallest possible xap file up front, and then loading in other parts as needed).

On the back end, NinePlaces is built around Amazon S3, Amazon SimpleDB and MemCacheD. Persistence is actually done using tiny xml files in Amazon S3. SimpleDB is really only used for user login details, if I remember correctly. Overall, it's a pretty immature design, but: this was 2008. At that point, 95% of my development experience was in native (C++) Windows app development, so I was kind of flying blind in building out the backend of a web service. It's not pretty, but it's functional (and, anyway, I always de-prioritized the back end on this project - for me, the front end was the interesting and important part).

Why Stop?

Somewhere in 2009, when I had a functional-if-rough site working, I realized that NinePlaces wasn't really going to fly. I believed, and continue to believe, that it is a interesting interface, but 'interesting' interfaces do not get users. And interesting interfaces are not always simple interfaces. In the little user testing I had done, I found that people were quite confused.

Nevertheless, I continued working on NinePlaces for quite awhile. I used NinePlaces as a test bed for interface ideas, and to improve my C# / Silverlight.

It was really 2010 that I stopped working on it, largely because I could see that Silverlight was not getting the adoption it needed to get, and was very much starting to feel like a dead end. Besides that, I felt that I had brought NinePlaces to a complete-enough state. It's a fully functioning site, relatively clean code, etc... I looked at my list of things to do, and decided that I had gone deep enough. There were new projects to look for.

At any rate, the code is up on GitHub now. https://github.com/astalwick/NinePlaces. I'm pretty certain that no one is ever going to make use of any of that code, given that Silverlight is well dead, but: it was a pretty significant project for me. Might as well put it up, if only to show that it existed.