· all posts


Goupfile – file sharing with support for multiple files under a single URL, easy to remember URLs that don’t have ambiguous characters, and QR codes for transfer to and from mobile devices.

Blognow – zero config static site generator for blogs, like Hugo but with a lot less configuration.

Stripped YouTube – Firefox add-on that removes distractions on YouTube.

Timeless – the Hugo theme used by this blog. It emphasizes readability and good typography.

undo.studio – type design and software products.

xiaobiji.co – my other blog written in Chinese. The name means “little notes”.


These projects are deployed, published, or otherwise finished.

Faview – see how an image looks as a favicon in the browser tab.

Pitch – web version of the original Pitch Card Generator, built with Next.js and deployed to Vercel. This was the first time I tried out Next.js/Vercel, and it was by far the best developer UX I’ve seen.

Musearch – search the same query in multiple search engines. Useful for checking how well your content shows in up various search engines.

Deformat – strip extra whitespace from text.

tailwind-login – clone of the DigitalOcean login page (archive) to demonstrate how flexible Tailwind CSS is. A coworker of mine couldn’t tell which was the real one.

is-am-pm – Node.js package that tells you whether a number on the 24-hour clock or a date corresponds to am or pm.

mmap-demo – demo of the mmap system call for memory-mapped files in Unix.

cshear – concurrent shearsort algorithm in C using pthreads.


These are no longer in active development or use.

uSay – middle school project whose full name was uSay Change. It was a site where people could submit ideas on how to improve products or services. Like Canny but a lot worse. Lots of hacked together PHP.

Pitch Card Generator – made this with a friend for a high school softball coach.