MyPhotoExhibits.com: 2010 - 2011
Tamron decided to build an online community for it's customer to share images. The concept was to create a virtual gallery, in which users can arrange photos on the wall and customize the frames and many aspects of the gallery.
I found the challenge interesting because it involved image management and composite rendering. Together with long-time friend and designer, David Schafer, we set off on producing prototypes.
Galleries are rendered by combining several layers of transparent images. The user's photos are then transformed to fit on to the wall. Because a room can be rotated 90 degrees, four sets of each asset were produced.
I knew right away that ImageMagick would be up to the task, and set about making a prototype. I worked out the dimensions of the room with the designer, and wrote some code to tranform the images using 3D projection. The photos were manipulated server-side with ImageMagick, using scaling and free transforms.
To manage images and do the needed transformations on the fly, the Dragonfly Gem turned out to be ideal. Through a custom generator, it was possible to specify image transformations as jobs which would be rendered when requested. Dragonfly was also used to serve resized web images on-the-fly, for things like thumbnails and photos.
I built the web site using HTML5, jQuery, and Rails. Dave provided the design, and together we paired on the interaction. The first version of the website was produced in about six weeks. It allowed user logins (via Facebook or created accounts), gallery creation and image uploads. In addition, I built an admin area to manage things, using scaffolding and simple views.
The gallery editor was a fairly complex front-end application. There were a lot of options for materials and colors that the user could choose.
To handle the communication and storage, I designed some simple Restful API endpoints. The database was MySQL and the search was provided by Solr. Rather than model the complexity of the galleries, I treated a them as a documents, stored as json. For searchable metadata, I was able to map solr fields to parts of the document. This design made the web application easier to develop.
For managing images, Dave came up with a drag-and-drop interface. Images could be uploaded in bulk and quickly arranges. Upon save, the images re-generated in their new positions on the wall.
After the launch of the web site, I set to work on building an iPhone application. It was first solo iOS project, so I had a rough time in the beginning. But the app was fairly simple, and most of the issues were with device rotation and things like that. The app made it into the store, and we actually saw quite a lot of activity from mobile users within a few months.
I made a lot of features in the iPhone app work with web views. Dave designed nice, mobile-friendly CSS that was included and cached when a gallery was loaded. Searching and browsing was left to the native application, using TableViews and standard navigation controls.
I left the project at the end of 2011, when I started working full-time at local.ch. The web site is still running, with a healthy number of users that enjoy competing in photo competitions for prizes.