About Me

I am a full-stack software developer who finds beauty in simplicity. My mission is to create useful, meaningful, and socially positive experiences for end users and for other developers.

I am experienced in both dynamic web application programming and static site generation. My work is primarily in the React/Redux ecosystem, as well as with Angular, jQuery, NodeJS, and other full-stack web technologies. My experience ranges from implementing prototypes in the financial technology industry to rewriting Ruby on Rails in modern, serverless JavaScript.

I obtained a certificate in Full-Stack JavaScript Development from Code Fellows. In addition to my technical background, I am an expert in ancient languages, particularly Semitic, Greek, and Latin, and I play the viola.


Front-end MV* development
Data visualization
D3VictoryOpen Data
Site generation
GatsbyWebpackStateless component architecture
RESTful API and database programming
NodeJSRuby on RailsSQLMongoDB
Test- and behavior-driven development
Agile developmentEnzymeMochaKarma


Code Fellows — codefellows.org

Code Fellows logo - a red shield with text characters on it

The website for Code Fellows, a coding school in Seattle, is statically generated in React with Gatsby, pulling data from a remote content management system, and rendered in serverless JavaScript by Webpack and Aerobatic. This project involved migrating a Ruby on Rails web application to React, thereby reducing the codebase size from 7,000 to 1,400 lines, as well as coding new software to handle tasks like calendar filtering. It also involved close work with the marketing team to maintain the website specification, produce content management models that can be user-edited without delving into the codebase, and follow design prototypes in Bootstrap and Sass.

The Extraterrestrial Birthday Calculator

Extraterrestrial Birthday Calendar logo - a planet with a birthday candle stuck in the top

Find out your next birthday…if you had been born on another planet! This application is written in responsive client-side jQuery and Moment.js for doing calculations on past and future dates. The front-facing layout is written in Sass.

The Universal Wishlist App

Universal Wishlist App logo - an outline of a gift-wrapped box

The Universal Wishlist is a web app to create customized wishlists of items from any site on the web. Its backend is written in Node, which is used to do API routing as well as send email regarding wishlists. The app’s frontend is written in React with JSX, with Gulp used as a build handler to bundle all client-side code.

Safety Dance

Safety Dance logo - a toilet decorated with the transgender symbol

One often underappreciated challenge in the lives of transgender people is the need to find washrooms that are as safe as possible when out in public. This app crowdsources and collates information about local facilities in a Mongo database, and presents it using a responsive interface in Angular. Safety Dance can plot the safe washrooms nearest to a user’s location on both desktop and mobile. It has an extensible API with comment moderation, written in Node and Express.


Painting the Data Picture with D3.js

A miniature graph showing two lines.

The D3.js data visualization library allows you to create fast, dynamic, customizable, and incredibly powerful SVG, HTML, and CSS straight from your data. It is one of the most popular technologies on the Web for complex data visualization, used by the New York Times, Square, YouGov, and many other organizations. In this workshop, I teach the basics of D3, showcasing some interactive visualizations based on open access data, and explore integrating D3 with popular front-end Web frameworks such as React and Angular.

Learn to Love the JavaScript Ternary Operator

A question mark followed by a colon.

The poor, misunderstood ternary operator comes in for a lot of hate. In this lightning talk, I show why you need not be afraid of it and how it can help programmers write better, cleaner, more functional JavaScript. This talk was presented at Code Fellows during Seattle Startup Week, 27 October 2015.