Stuff I've Done

Stripe Invoice Generator

Stripe Invoice Generator is a somewhat half-assed flask application that solves a very specific problem I encountered recently. I'm sure there's other people that need it too.

My favorite part about this app is that it stores everything as Stripe metadata, meaning I don't have to maintain a database or worry as much about securing peoples' payment information (save implementing Stripe Connect competently).

Stripe Invoice Generator does exactly one thing: lets you produce really basic invoice documents from Stripe subscription transactions, with extra fields as required.

I made it because a customer for one of my other services had specific requirements regarding the contents of their invoices, and I thought it might be useful. The dumbest subscription service is a little subscription box service powered by Stripe and a small Compojure app processing payments and serving it. I'm afraid there's not too much interesting about it technically. is a subscription box service wherein you pay me $15 per month and I send you an object of some persuasion or another that I guarantee you won't expect. A curated selection of fun items awaits, from hobby items to costumes to... I don't know, whatever you call a balisong bottle opener.

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.


(Unfortunately, this site is now defunct)

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.


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.