Behind Cheddar’s Server
So, tech doesn't matter. Tech is interesting though. Here's some of what I use to make Cheddar's server. A lot of Cheddar is on the server. I've spent way more time writing Ruby than writing Objective-C when it comes to Cheddar.
The Cheddar web app is written in Ruby on Rails. I choose Ruby on Rails because I already have a lot of experience with it and it let's me work quickly.
For awhile, the API and the web app were two separate Rails apps. The web app simply used the API. This quickly became hard to manage and test. I ended up merging them back together before launching. The API is still very separate from the web app. At some point, I would like to split it out once I have more time to work on my internal tools.
All of the realtime aspects are powered by Pusher. I considered building something from scratch to do all of this, but was focused on shipping. At some point, it would be easy for me to replace Pusher with my own stuff, but honestly they are awesome and very affordable. I doubt I ever will.
All of the API documentation I did from scratch. I wrote a little Ruby gem to do code coloring and truncation of example responses the way I wanted called Pizzazz. I really love Stripe's API documentation. They use your real data in all of the examples and give you example commands for each method. It was actually a lot easier than I thought to implement this and people seem to really like it.
All of the OAuth stuff I did from scratch as well. There are a few solutions out there but I started to spend more time customizing them than it would take to write my own. I've written OAuth clients and servers before so it wasn't a big deal.
Here's my Gemfile. I added lots of comments so you can see what everything is for.
Everything is hosted on Heroku. I use Heroku Postgres for the database, their memcached add-on, and the RedisToGo add-on. Here's a recent post about lessons learned while scaling.
Update 06/22/2013: I no longer own Cheddar. More info.