Eric McCarthy’s Portfolio

I’ve worked with a wide array of technologies over the years (see my résumé). Here are some highlights of my publicly available work.


A static website for my wedding. Uses React, react-router, react-snapshot, and react-intl for the Spanish language interface. Created a mobile-first design fully from scratch. Photo album viewer is react-image-gallery with various fixes and customizations. Hosted on S3 and CloudFront.

Using React for a static website is probably overkill. Hugo—which I use for this website—is likely a better choice. Nevertheless, it does work well!

Previously, this was a URL shortener written in PHP 4 backed by a MySQL database. It used a JavaScript animation library that I developed before open source libraries like Scriptaculous or jQuery came along. It supported user logins and the ability to search the contents of your saved URLs. Unfortunately, it is offline due to security concerns with running PHP 4 while I find the spare time to re-imagine it using a more modern technology stack.

In the meantime, all short URL links have been preserved via an AWS Lambda function that includes a 384KB JSON file that maps the archived short URLs to their long URLs. Despite the simplicity it is reasonably fast — even on cold starts! For example, here is a preserved short URL to

Open Source Software


A JavaScript module to help make APIs that support both callbacks and promises. As of July 2022, it was getting around 8 million downloads a week on npm.


A JavaScript module that takes a pragmatic approach to parsing and validating HTML. Provides character offset, lines and columns for errors. Used by DesertNet’s Foundation Editor interface to validate hand coded and copy/pasted HTML.


A lexical analyzer in JavaScript that supports extensions for different approaches to scanning a string. Used by @desertnet/html-parser define tokens as regular expressions, and to scan the HTML input string.


A module to receive a stream of length prefixed JSON objects. This is a generally faster method of parsing JSON streams than simply concatenating objects together. The module also accepts arbitrary whitespace between the length prefix and the JSON data, which is useful in scenarios where a backend may emit syntactically meaningless whitespace.

@limulus on GitHub

More of my open source work can be found on my GitHub page.