I started working on MommaZoo with Catheryne in June and I’ve been meaning to describe the technology stack that powers it for some time. Before I do, knowing about MommaZoo may be helpful. And I can’t really put it better than our website (given that Catheryne wrote it):

MommaZoo helps moms and dads with the craziness around parenting school-aged kids. We remind you when your kid’s homework is due. We tell you the morning you need to bring a car seat for a field trip. We help you instantly contact other parents who can cover 15 minutes if you are running late. We connect you with other parents who live close to you, or whose kids are in similar activities, to share a ride or a walk-to-school.

We have a messaging part, a simple task management thingy (optimized for volunteering because schools do a lot of that) and class rosters. We’re also working on using location and activity matching to get parents who live close to each other to find one another. We want to encourage carpooling, walk-to-school and “let’s all help each other” connections. We’re at the pilot phase at the moment and are testing and tuning it with one school. We’re still pretty small so don’t expect some hardcore traffic numbers here. But I’ll give an update when we reach a million users (*cough*)

One major challenge we had was we wanted to optimize for mobile delivery but also wanted a website. We’re bootstrapping (yes, we like challenges) and wanted to be out quickly (for the start of the school year, so only 2.5 months). So I decided to try a website that’d work for all devices (the “HTML5″ thing). That has worked much better than I initially expected. Of course there’s been some pain but all things considered, rather minimal given the time saved.

So without further ado, going from bottom to top, here is our stack:

Amazon EC2. Right now, a micro instance. Yup, micro. We don’t have that many concurrent users yet and we’re pretty lean an mean. And I love EC2.

Ubuntu server. I’m just very familiar with Ubuntu.

MongoDB. As already mentioned, development time is rather important. Developing on top of MongoDB is really pleasant. It’s not really a NoSQL storage, it’s much more conventional than what is talked about, but it’s also pretty frictionless. So I like. We’ll go fancier when we’ll have much more data.

Amazon SES. Takes a POST, sends an email. Simple as in the name.

CoffeeScript. That’s the programming language. And we use it everywhere, top to bottom, left to right, client to server. Okay, I haven’t tried to get the Coffee compiler in the MongoDB shell yet but someday… Anyway if you haven’t checked CoffeeScript out yet, you definitely should, it’s doing yourself a disservice not to. And even more so if you’re using node.js…

Node.js. You can bitch all you want about callback oriented programming but with a few good habits (CoffeeScript), it’s just fine. I thank Ryah Dahl every single time I don’t need to use a thread pool, have locks or use synchronization. And Javascript is just Scheme after a long acid trip so it can’t really be bad.

Mongoose. To interface with MongoDB. Honestly, I’m not totally seduced. I don’t necessarily like all the choices, there’s a little bit too much magic and it has some kinks. I’d rather have something thinner. I mean to check out Poutine when I have some time.

Underscore.js. Simple library, with a few good utilities. Used both in the browser and on the server.

Express.js. It’s thin, doesn’t get too much in the way, handles your resource routing and integrates connect.js (for cookies, request logging, etc.). Overall I’m not fully convinced but it does the job well. So I keep for now.

Amazon ELB. Just for failover and SSL termination at the moment.

Skeleton. We’ve now crossed the network and are in the browser. Skeleton has been working really well in handling all the layout differences between devices and screen sizes. It’s basically a CSS with a lot of media queries. Very nice.

jQuery. Just because. With a few plugins.

jQTouch. Originally intended for its good iOS support but it’s probably the piece I’m regretting the most right now. It seems a few best practices and tricks with a CSS animation library would serve us better. It’s not very well maintained and the code isn’t that clean.

Backbone.js. The third piece of software by Jeremy Askhenas we use. We definitely owe him his weight in beers. The good of backbone is that it’s simple and lightweight (notice a trend?). The less good is that it tends to orient you toward fat views. Of course YMMV.

Total bill? $31 a month right now. And we have 2 copies of everything, one for a test environment and one for production. Overall I’m very happy with our node.js+ec2 stack. It’s been stable, very tractable and will support our growth in the coming years.

So if what we’re doing sounds exciting, if you’re interested as a parent or as a technologist, drop me an email (matthieu at mommazoo dot com). We’re not hiring yet but I’m always up for some interesting email exchanges. Or a beer if you live in San Francisco or are passing by.