Web apps, bots, hardware hacks, and other miscellaneous coding projects.

Goodreads Integration

NPR Pitched and developed the integration of Goodreads into the NPR Books Concierge to allow users to bookmark books that they're interested in. This was achieved by developing a Fabric task to take the ISBNs from the Google Spreadsheet the book list is stored in, using the Goodreads API to convert them to a Goodreads-specific ID, and then using Jinja to inject that ID into a URL template within the HTML.

Fabric, Flask, Python, Jinja, Goodreads API


Side Project Worked with Eunice Lee and Bomani McClendon to design and create Waves, a Raspberry Pi project centered around transforming the transience of the spoken word into something concrete and physical. This project was debuted at the Segal Design Expo, and featured on the Raspberry Pi blog!

Python, JS, Flask, Raspberry Pi

Check Mark

Meedan Worked with Meedan to build a browser extension that allows users to use Check - Meedan's crowdsourced news verification tool - without navigating to the Check webapp itself.

JS, React, Redux, GraphQL, Chrome Web Tools

Self Care SMS

Side Project Built a SMS bot that sends crowdsourced self care messages to people who participate. Text 1 (530) 212-6073 to join! (May not be currently functional due to API/server costs.)

JS, Twilio, AWS, MySQL, Flask

Copyedit Automation

NPR Pitched, developed, and wrote documentation on an automation task to automate sending copyedit notes for NPR-developed graphics.

Fabric, Flask, Python


Side Project NEWSounds is a data sonification experiment that imagines what the news sounds like. Using features including random seed generation, sentiment analysis, and topic categorization, I mapped headlines from the New York Times into music and an accompanying visual display.

HTML, CSS, JS, Tone.JS, Node, Express, NYT API

Chicago Marathon Visualization

Research Worked with a team of researchers to develop a data visualization system for the Chicago and Houston Marathons using the LAMP stack. I was involved with the design and development of the entire system, which features race simulations from previous years, real-time data incorporation (I built a separate Selenium scraper for the Houston Marathon), and the visualization and display that would be shown in forward command on race day. This research project is still ongoing.

JS, d3, PHP, Python, MySQL, BeautifulSoup, Selenium

Pigeon Soundscapes

NPR Designed and developed mobile and desktop interactions for a collaborative All Things Considered / Visuals piece on Indonesian pigeon racing.

JS, Modernizr.js

NYPL Tweeter

Side Project I created a Twitter bot to post hourly images from the New York Public Library's public domain.

JS, Python, Twitter API

Texas Redistricting

Texas Tribune I worked with reporters to design and produce an interactive visualization, which demonstrated how Texas's 35th Congressional District violated the Voting Rights Act.

QGIS, Mapbox, d3, ArchieML


Side Project Built at the Propublica Vital Signs Hackathon, Eunice Lee and I created a Facebook messenger bot that helps college students find mental health specialists nearby. This project won best use of the Better Doctor API and the Yelp API! We also wrote a writeup of the project here.

JS, Node, Express, FB Messenger API

Vote Tracker

Texas Tribune I helped create an app that allowed reporters to easily track and visualize votes on Texas legislation from a Google Spreadsheet.

Nunjucks, Google Spreadsheets, Flask

Javascript Frameworks

Side Project I trained a neural network to generate new Javascript framework names. Some of them were pretty neat!

Torch, Amazon EC2, BeautifulSoup


NPR Helped develop interactive quizzes to accompany NPR/Ipsos poll stories.

JS, d3


Side Project Built a Chrome Extension that replaces monetary values on web pages with the equivalent number of avocado toasts, since that's what millennials are all into these days.

JS, Chrome Web Tools

Northwestern Soundscapes

NBN A collection of the everyday sounds on Northwestern's campus. I led the design, development, and audiovisual components of this piece.


This is Not (a) Normal Todo

Side Project Chrome extension experiment on motivating myself and others to participate more in civic engagement, in wake of the 2016 election.

HTML, CSS, JS, Chrome Web Tools


Side Project A dumb Slack bot to make bad goat puns. It's pretty easily modifiable to other text replacement applications, though!

Python, Slack API


Class SnailPost is a mobile communication app designed to bring back the sense of slow, thoughtful satisfaction of snail mail, in an era where most communication is built upon instant gratification. Three classmates and I co-developed this app in conjunction with clients from Northwestern's Masters in Product Design program.

AppGyver Supersonic, AngularJS, Firebase

Lost in translation

NBN I worked with a writer to develop a story focused on students for whom English is not their primary language.


Radio Drama - Influential Friend

NBN Developed an audio/text piece with NBN's Writing Section focusing on influential friendships in college.


Valentine's Day Emojis

NBN Made a fun little Valentine's Day page with NBN's Life and Style Section.


Northwestern Eateries

NBN Helped the current NBN Interactive Editors develop and compile a guide to campus eats.