A collection of small personal tools and weekend builds. I use these to scratch a specific itch or test out an idea quickly, prioritizing functional utility over an over-engineered setup. You'll find a couple of exceptions here, like this portfolio, where the build is more deliberate and fully realized.
Several years ago, my wife got into mixology, especially tiki cocktails. A
typical tiki drink includes many ingredients. This presents two
challenges:
Keeping track of drink recipes from many different sources
Finding a recipe that matches the ingredients you have
Barkeep was our in-home solution to these problems. At its core is a
database of drink recipes we have collected. They can be searched by
regular searches, but also filtered by one or more ingredients to find the
right recipe for the moment.
Since this was for my personal use, and due to legal implications around
alcohol, it was never publicly deployed. I ran this in a Docker container on
a home
UnRaid
server. It is not currently maintained.
I designed and built both the Express/PostgreSQL API and the React client end-to-end, including the ingredient-based search schema and the recipe data model.
Challenges & Solutions
The core interface challenge was letting someone filter by a variable number of ingredients they already have on hand, then rank partial matches usefully instead of just showing exact matches. I solved it in the SQL with a scored ingredient-overlap query rather than a strict WHERE-IN filter.
Menu pageSearch results with selected ingredientsDrink detail with instructionsNew drink form
4.3.0Shipped a new internal refund platform, streamlining help desk process.