Web Development Craft

Project Launch and Lessons Learned

A little while ago I finished up a project developing a calling card website and store for my friend Evan Calkins at Hoban Cards. The business creates hand-made calling cards on one of several vintage presses he has in his shop.

This project turned out to be a great learning experience in several ways and the fact that I didn’t have to design the site, but only work on development as Evan is a designer himself was really nice.

Deploy, Deploy, Deploy

The first thing I tackled when working on the application was to get it deployable right off the bat. Even if it was nothing but a shell.

We were going to be hosting this on a Rackspace virtual server which I manage myself. Getting everything set up in a quick and easily deployable form took more time upfront but payed off quite a bit in the long run.

I was surprised at the benefits gained by simply having things easy to push out and be live. The largest noticible difference was that Evan and I could literally work side by side and quickly have our changes live as we iterated over the site. No messing with copying files, making sure permissions worked, database migrations, etc. Either of us could deploy at any given moment and rollback if things messed up. That opened things up for us to work on what was important at the time and not having to wait on each other to finish.

We found quite a few bugs earlier that only would have cropped up in production. Building our deployment meant we found these issues right away and could deal with them in the context of the release rather than as one big ball of ugly to fight with at the end of the project when things are really tight.

Use Pre-Existing Tools, Replace Later

One item I found to be very helpful was to utilize Twitter Bootstrap for both the frontend and backend UI. This allowed me to focus on the code and how things worked rather than dwell on where to put things and why they didn’t do what I want.

Once we were far enough along Evan was able to slice up his design and completely replace the frontend easily. Since bootstrap worked so well, and there was no driving reason to replace it we decided to leave it for the backend.

Git And Friends

The project would have definitely died without Git It allowed us to work separately on the application without stepping on each others toes. Should something come up that we both had worked on, merging took care of the differences and life was good.

Since this was a non-opensource project we hosted it privately using Gitolite If you don’t have the desire to store all your private code in Github, hosting your own is relatively easy and the fined grain permissions make Gitolite a great asset in your toolbox.

Stripe and Paypal

The previous incarnation of Hoban Cards was a simple site with Paypal. While Paypal has served Evan well he despised the backend and having many international customers there was some concern about his options if Paypal decided to contest something.

So we decided to integrate both Stripe payment processing and Paypal, giving the customers the choice.

Since launching we’ve been pleasantly surprised that most customers chose the custom card processing and those that chose Paypal replied they only did it because it was easier than getting their credit card out. Most expressed that they did not care one way or the other.

Moving forward, Evan may choose to remove the Paypal option altogether.


This was not a big site or application by any means, which actually turned out great for developing a process of constant iteration. At the end of the day, the project was fun for both of us to work on, customers got a great purchasing experience, and Evan got a backend to manage orders and keep things organized.


  • Rails 3.2
  • Postgresql
  • Twitter Bootstrap
  • Stripe
  • Paypal
  • RapidSSL
  • Ubuntu
  • Rackspace Cloud Server
  • Capistrano