Hi, my name is Luke

I love open source software and work at &yet.

I also have a resume. (that I accidentally overengineered, but its a funny story)

I also like to share thoughts, write about code, and talk, and listen to music.

When I'm not sitting down, I like to run (or race or try longer races) and ride my bike.

I make projects

My philosophy around personal projects tries to walk the intersection of fun, useless, and interesting. For all of these, I've put far more work into them than people who have used them, and I'm really proud of that.


I run a NCAA Bracket Challenge that requires you to tweet your entry. I call it, get this, Tweet Your Bracket! It's a whole big thing, so I made a GitHub org around it.


Imagine if someone took an unflattering picture of you every time your played a chess move. That's the GifChess Club! A finalist at the 2015 Static Showdown and I published the base component for the state and the view separately.

one at a time

My 2016 Static Showdown entry, One at a Time, is a play on those "Word at a time" stories except you can throw in emojis or animated webcam gifs of yourself too. Coded in 48 hours, and then I took a 12 hour nap.


So yeah, .club domains were on sale for $2.88 a year, and who doesn't want to be part of a club? So I made the repeatone.club for people who want to show that they listen to the same song on repeat. Pulling data from last.fm with a webtask acting as the API, it tries to make the output pretty by blurring the album artwork and pulling high contrast colors from it for the text.


Host your own static Instagram site with USI! Why? Well, reasons. Built to be a fully universal (aka isomorphic) JS app with React and Webpack. I think it's pretty neat. If all you want is your Instagram data and pictures, check out the backing library instagram-download.

cubs world series tracker

Ever wondered how long it's been since the Cubs won the World Series? Or were even in the World Series? Well it's been awhile, but in case you want to be reminded of this second after second while staring at a ticking clock symbolizing over 100 years of futility, you're in luck.

mlb slack status

Another baseball project, this little server will keep your Slack status synced with an MLB team! Your teammates will thank you when everytime they go to DM you and they see that your favorite team lost again.


I write a lot in Day One, and some of that I wanted to share on the Internet. metalsmith-dayone is what I use to do that, and you can use it too! Be on the lookout for the blog of cute things my daughter says and does.

strava bulk edit plugin

I used to be a private Strava person, but then I realized I loved trying to get on segment leaderboards so I wanted to make them all public. So I built a bulk editing plugin because I wanted other people to be able to do the same (and I don't like clicking a mouse over and over).

twilio secret santa

My siblings and I are not all in the same place but we still wanted to do Secret Santa so I setup Twilio Secret Santa! For probably less than $2 (unless you have hundreds of siblings) you can use it too!


Emojis are important. We all know that. Emoji Fortunes really drives that point home. Featured on time.com and washingtonpost.com (on a listicle of weekly Internet gems right after pictues of babies with drawn on eyebrows, so yeah, I've made it).


If you thought I would only have one emoji related project, then you'd be wrong. The less popular (although I think much cooler) sister of Emoji Fortunes is Emoji Haikus! Also it's built on the same two modules which basically single-handedly validates the tiny modules philosophy.

geohashing cli + iOS

Geohashing, introduced by xkcd #26, is a spontaneous adventure generator based on the stock market and md5 and graticules (oh my!). I've been fascinated by it since it was announced in 2008, but it took until 2015 for me to write a geohashing CLI and React Native iOS appto find the day's coordinates. This is exactly as cool as it sounds. Both projects are backed by the same set of modules.


If you've been releasing modules on npm for awhile (especially if you started before npm@2.0.0) you might have a bunch of modules at v0.x.y and you might want to change that. Well I did, so I made the npm-v0-finder (catchy, I know) to help find the offending modules. Note that this was awhile ago and now npm lists all versions on a user's page, but if you have more than 1 page of modules this can still save you some clicks.


Tell someone they are Awesome! Hackily served at all paths of the domain by using a GitHub Pages custom 404 page, but if there's one thing I've learned, it's that it's OK to abuse HTTP for single page novelty sites.


One time I spent a few weeks figuring out Asterisk and ordering parts so I could make a socket.io signaling server ring my R2-D2 telephone. It remains one of my proudest achievements that I never use.

coffee calculator

I love coffee. Also an old place I lived had terrible Internet in the kitchen. This confluence led to adapting an existing coffee ratio calculator for my needs, which were custom presets for my wife and I, and an appcache file so it worked offline.

I write modules

As I said above, I love open source. I've created and contribute to a bunch of other modules outside of ones for the projects above. I try to publish everything to npm with good docs and put the source on GitHub.


A CLI utility to take a series of interconnected GPX files and output them as a single GPX file with instructions to cover the shortest path through all the routes. In graph theory language that would be the shortest closed circuit that visited every edge of the unidrected graph, but as someone who never learned much graph theory I prefer to think of it as a way to run a see a whole bunch of different stuff while I run in one area.


A CLI utility to quickly create Day One entries based on text files templates anywhere in your filesystem. I use it to more easily tracks runs and workouts. But you could use it for whatever!


This is an over-engineered attempt (hey, at least it has tests) at taking photos bulk exported from our family phones and cameras, and organizing them. It works, but I probably wouldn't use it if I were you.


There are a lot of different Ragnar races, and one day I got semi-obsessed with sorting them based on criteria like elevation gain and total mileage. There wasn't an easy way to do that on their website, so I built ragnar-data so I could fetch, format, filter, sort, and cache all that data.


I keep a workout journal, so I wrote this CLI to easily grab text descriptions of ROMWOD workouts. It's as easy as romwod date 2017-05-15 --markdown | pbcopy.


Run this as part of your continuous deployment workflow when using Surge to teardown merged branches. Works great if you deploy to feature branches, but don't want your Surge account littered with the ghosts of features past.


A fun learning experiment (that I actually use) with ES6's tagged template literals syntax. Useful helpers for minifying and unindenting HTML inside template strings.


My personal ESLint config. Probably useless to anyone except me, but I use it when I need some illusion of control in a project. Everything else uses Standard.


Single page apps (or native web apps as I like to call them now), don't lend themselves to crawlers very well since the markup is generated clientside. spa-crawler is built on rndr.me to crawl any site for internal links. The result is a list of all urls and content in the whole site. I've used this to archive old single page apps into a set of html files that could be hosted without any sort of server-side routing.


Download your Instagram JSON data and media to a directory structure convenient for self hosting.


Perf matters and JS bytes over the wire is a big part of that. js-size works as a CLI and JS module to take a JS file and output the minified gzipped size. Useful when combined with curl and wzrd.in: curl -s https://wzrd.in/standalone/local-links | js-size.


node-gamepad is a great module for using various gamepads within node. I had some 3rd party SNES and N64 controllers laying around but the library didn't support them at the time. I wrote hid-mapper as a CLI tool to take any controller and map the siginals sent from each button/joystick to a JSON config file that can be consumed by node-gamepad. Please use this to take a a USB gamepad and fly a drone with it.

lessitizer / less-import-inserter

less is my preferred CSS preprocessor so I wrote lessitizer and less-import-inserter. Together they handle taking a less file containing a list of imports (like Bootstrap) and inserting new imports to do things like override variables and mixins, and then packaging that along with your app's less into a css file or string.


I love GitHub Pages, but there can be a few annoyances around my normal workflow of developing a site in a master branch, compiling static files to a directory and then pushing that directory to a gh-pages branch. git-directory-deploy is really just a wrapper for the original shell script that fit my criteria, and adapted to be npm installable to fit my usual workflow.

moonboots-express / moonboots-static

moonboots is a tool I've contributed to for streamlining a set of conventions for the server-side of building native web apps. moonboots-static and moonboots-express are two plugins I wrote for moonboots to wrap those conventions in my usual workflow of a simple dev server and then writing a directory of static files. This all uses browserify under the hood, but I've really been enjoying webpack lately, so moonboots isn't my primary tool for this anymore.


Url shorteners are so 2008. simple-realurl will make your urls longer (provided that they were previously shortened)!