Stuff I've Made

ExtSearch: The easy, customizable custom search Screenshot of ExtSearch

ExtSearch Custom Search is a project to provide custom search via Javascript snippet. The other components are a spider, and a backend API in front of the search server.

ExtSearch Custom Search is a project to provide a premium alternative to other search solutions. It combines ease-of-deployment (a simple Javascript snippet) with full customizability and integration with your property and brand.

Open Recipe Search is an Angular.js application that interfaces directly with an Elasticsearch backend, which indexes the Open Recipes database (proxied to prevent external access to endpoints other than search).

The database and static assets are hosted on a DigitalOcean instance. Seems to be holding up. indexes the recipes from the Open Recipes database and makes them available for easy, straightforward searching.

Your Personal Dot Com

Your Personal Dot Com is a Clojure app that generates permutations of your name and lets you know which of them are available as domain names. (It also provides my Namecheap affiliate link for you to register them, if you so desire). The frontend is driven by Angular.js, which has become my favorite library for making lightweight javascript applications.

Your Personal Dot Com generates permutations of your name and lets you know which of them are available as domain names. (It also provides my Namecheap affiliate link for you to register them, if you so desire).

Learn X in Y Minutes

LearnXinYminutes is a static site (via Middleman) featuring short coding tutorials for a variety of languages. Nothing too interesting in the stack, but it has survived some good traffic storms for being a straight Nginx+static deployment, despite living on a 512mb virtualhost that also serves a bunch of other sites (this one included).

Learn X in Y minutes is a site for short programming language tutorials designed for professional programmers to get up to speed quickly on a new language. It started as a blog response to a Lua tutorial I saw on HN. I made my own Clojure version, and was encouraged to set up a site and accept contributions via Github.

As of this writing (a month later), features over 20 community-contributed language tutorials, excluding translations, all accessible and editable via one public Github repository.

Address Bin: Easy Email and Drip Marketing

This one is Clojure, enlive, middleman, and mongo again -- same stack as Redditlater, so you can read about it there.

Addressbin is the easiest way to start building an email marketing list. You sign up, get some HTML, drop it on your site, and start building a list. Then, you can send newsletters, contacts, etc. to your list right from your email client.


This is a Clojure Ring web application. I used Middleman and Enlive to generate HTML, and Compojure for routes. The datastore is MongoDB.

A notable feature if this site is the lamina queue it uses for messages. On startup, it spins up a separate thread consuming from a lamina channel of incoming posts. As people schedule their posts, they get added to the queue. This architecture decouples the work of posting to reddit from the rest, but more importantly spares me from paying Heroku for a separate worker dyno. It also justifies the use of Clojure by actually utilizing its concurrency features for once.

Unlike LadiesChoiceVictoria, this project eschews a framework like Noir. Noir contains a lot of abstractions to make things more stateful, which I wanted to avoid.

RedditLater is a free service that lets you post to Reddit on a schedule. I often finish my wee projects late at night and want to post about them right away, but this turns out to be a poor strategy for actually getting picked up by Reddit. Turns out there are certain times to post that just work better.


Wagr is the first application I made using Enlive and Middleman with Clojure. It's a simple, auth-less form that accepts fields constituting a wager with some date of resolution in the future. On that date, it sends an email to both parties reminding them.

The email sending is a pretty simple cron job. I used Mongo again as the data store. Email sending is done by the excellent Mailgun service, via the SMTP interface. The date input is parsed using JChronic, a Java port of Ruby's Chronic natural-language date parser.

Wagr is a really minimal site I made to facilitate gentlemanly wagers between friends. You enter your email address, your friends' email address, the details of your bet, and a date in the future,

It never really went anywhere, but it was pretty fun to make.


LadiesChoiceVictoria is the first and most major site I wrote in Clojure. I used the Noir framework, with Mongo as a datastore and Mustache for templating.

I learned a lot from writing this site, mostly that I'd better keep Clojure to myself unless I was working with someone similarly enthused. Still, Clojure managed to be fast to develop in and performant, even as I worked through the problems of translating what I knew about other frameworks to the functional paradigms underlying Clojure.

LadiesChoiceVictoria is a dating site with a simple but innovative premise; only women can browse profiles and send initial messages. I made it with my friend Paul Ripley. Within a week of releasing the site, we'd been featured in a local news and interviewed by CBC Radio, the latter of which was a first for me.


Nurblizer was a little project I did in response to an SMBC comic back in 2012. It's done using Sinatra in Ruby. The whole app code, sans HTML, is 30 lines long.

It's not too notable technically, but I did use it as a reference application for an article I wrote comparing and contrasting implementations of the nurblizer in PHP, Python, Ruby and Clojure.

The Nurblizer is another toy app I made. It takes a bunch of text, and replaces everything but nouns with the non-word "nurble". Here's the reference.

Franslate is a really lightweight Sinatra app with a Backbone.js layer doing most of the work. The actual frontend code is written in CoffeeScript.

The original vocabulary lists were built up with Google Translate. They're simple text files featuring the 20,000 most-used words in each of the supported languages, and their english equivalents. The wordlists are available in a Github Repository to facilitate contributions from people who might be better sources than Google Translate.

Franslate is a multi-language vocabulary quiz. It currently has wordlists for French, German, Spanish, Polish, and Russian, although only the first three can be said to be particularly high-quality; direct translation in Polish and Russian is a bit more difficult.


Resumatic is a Django project, and the last of these projects I made before I got sick of setting up WSGI and the like and started using Heroku.

It's got LinkedIn integration, although unfortunately only for import; I didn't implement the Linkedin OAuth as a login method.

Resumatic is a tool to give folks more control over the presentation and formatting of their resume, to give it a bit more personality than a stock LinkedIn profile. Users can customize colors, layout, and fonts

I made it about the same time as Zerply came out, which I was pretty proud of. They pretty quickly pulled ahead though; I get the feeling at least one person was working full-time on it.