Lucy Merriam recently put together a collaborative spreadsheet to track NYC city council members’ positions on defunding the NYPD. I put together a little web app that lets you look up your council member’s position, contact info, and public statements. For example, here’s speaker Corey Johnson’s position.

Under the hood, this uses a Google Places widget to look up addresses, the NYC Geoclient API to look up representative information for each district, and the google-spreadsheet package to fetch information about each representative from the collaborative spreadsheet. Initially, the rendering code was just a big template string, but now I’m using Vue to make data binding simpler and less error-prone.

The source is on GitHub here.

Because I have a number of friends who enjoy wordplay and are huge nerds, the concept of Levenshtein distance—the number of single-character deletions or insertions necessary to make two strings match—comes up in conversation more frequently than you’d expect. This prompted me to put together this little app (source) a while back, which lets you visualize the edits required to turn one string into another.

April 20, 2020

My partner was working on a legal research project that required him to look at the search result pages for a long list of product names. Because copying and pasting each name from Excel into the browser was the most tedious part of his workflow, I made a little web app so he could paste a list of search terms and open the search results in new tabs. Also features some nice-looking widgets courtesy of my batch-mate Miles’s spiffy little component library.

Should this have been a React app? Should it have been a single command (IFS="\n"; for i in $(pbpaste); do open "$i"; done)? Tell us in the comments.