I’ve worked on lots of projects over the years. Here are a few of the fun and interesting ones:


OffSite is a bolt-on tool on top of Google Ads that allows companies to run ads to new audiences via retargeting. Instead of retargeting to their own site’s traffic, other site owners can make their own audience available to trusted parties for a monthly fee. In addition to doing a huge amount of programming on this app, I designed and illustrated its latest iteration.

Connect a Google Ads Account - OffSite

Under the hood there are some interesting ideas. OffSite generally abstracts some parts of Google Ads’ UX where we thought it could be improved, and in other places offers a 1:1 replication of features. It took a good deal of refactoring to land on an elegant modeling, especially where OffSite introduced concepts that had no corollary in Google Ads. It’s a bit hard to grasp at first, but the app itself ended up nicely refactored and relatively small considering the complexity of what it does.

Multi-asset Responsive Display Ad form - OffSite

I’ve worked on many apps where the source of truth is a third party service, like Salesforce, Google Ads, and Stripe, among others. Each time I feel like I’ve gotten closer to striking a good balance between storing what we know to be true locally and also making sure we’re in tight sync with the external datastore, but until OffSite I’ve never felt fully satisfied with any approach. The bulk of the Google Ads API’s weirdness is tucked neatly into Martin Fowler’s gateway pattern. Models backed by remote data have a simple Rails concern with a handful of methods intended to be supered. All-in-all, it required surprisingly little code to handle a tricky problem. Interestingly, the first pass at this in OffSite involved some metaprogramming, but because the junior programmers couldn’t easily understand it, we refactored into something even more elegant without resorting to metaprogramming.

Stack-wise, OffSite is a pleasant mix of Rails and React. The approach is probably slighly unorthodox in that we’ve tried to let Rails do what it already does well and not reinvent the wheel. In most cases, this means replacing individual inputs with React components rather than reimplmenting entire forms or views in React.


Sentio is an small, tightly scoped app that I had the privilege of working on for a few years. It’s mostly Ruby with some React and R, mixed with some external APIs. It allows job candidates and team members to take simple surveys. With some statical analysis and input on which team members perform the best, it gives ratings on who is most likely to fit well with the team. The app generates nice reports and has some compelling insights.

Candidate Profile - Sentio

This was an exercise in finding the fastest way to quickly run R scripts from ActiveJob on Heroku. Heroku does have R support via custom buildpacks, but the deployments and performance were pretty slow. Eventually we settled on Docker and some clever Ruby that wrapped up all of the Docker-based R evaluation into an small, elegant class.

Success Profile - Sentio

SC Codes Online Platform

Home Page - SC Codes

SC Codes is a South Carolina statewide initiative to facilitate free online and in-person programming courses. I worked on the online platform that supports this effort. The educational component is hosted on Pathwright which was built by a few local friends. My team and I took the custom CSS feature to an extreme the Pathwright team didn’t think possible, and we acheived a pretty nice looking custom feel.

Courses Index - SC Codes

We also built a corresponding Rails app that stitched together SAML2 authentication, hosted a job board, and supported an embeddable code eval widget that was embedded directly into the content on Pathwright. The result is a cohesive system that feels like a single app, when it’s really a set of tricked-out Pathwright courses, a Rails app, and a Wordpress for marketing. My team and I also created all of the content and all of the illustrations.

A Ruby Lesson - SC Codes

You can find the site at https://sccodes.org.

Overworld 3

Between jobs, a few friends and I got to hack on a weird game for learning JavaScript using Phaser.js, Rails, and the graph database Neo4j. It was a hilarious mess and frankly it was more fun to explore the map and sail around and talk to wizards than it was to solve the JS puzzles. I learned a ton in the process and really enjoyed building a game.

Overworld 3

All of the maps were built in Tiled using a modified spritesheet from Open Game Art

Overworld 3 - Sailing

An early version of an open world map with tons of small details was laid out with different JavaScript topics.

Overworld 3 - Map

There was a plan to progressively enable editor highlighting for different language features by splitting the CSS into smaller files that could each be loaded when unlocking treasure chests. An amazing bug actually just rewarded the player with bones instead of improving syntax highlighting 🤣

Overworld 3 - Whoops!


I co-founded and ran The Iron Yard, which for a while was the largest code school in the world. After years of teaching and managing the instructors, I moved over to build a learning management system for the school. With a team that was comprised of TIY grads, a senior designer, and a senior developer, we built a polished app. My product team also wrote a great deal of content for Newline that was used for online courses and in-class lessons.

Code Challenge - Newline

Lesson - Newline

Haberdash Fox

Screenshot of the Haberdash Fox hompage

This was the first Rails app I built end-to-end on my own, and I had a blast. Having been doing JavaScript for years inside of Rails apps, I had never been responsible for the database, deployment, and general backend programming in a Rails app. I learned a ton and we got quite a few page monthly page views. We even ended up in two “Best of UI Design” print books.

It’s no longer online but the source is on GitHub


Paused Listing Card - Component example from Hammer

At Zaarly I worked on a styleguide and component system called Hammer. By today’s standards it’s a bit dated, but back in 2011 this was quite exciting.

Getting To Know Notifications - Component example from Hammer

You can still find it at http://hammer.zaarly.com.