random/rotating image


python MIT

burl is a URL shortener written in python/django. It creates brief URLs (burls) from longer URLs, much like bitly. Unlike bitly, you can host it yourself, and you own all of the data. There is not yet a user interface for burl (besides the default Django admin), but there is a complete REST API and a bookmarklet that can be used to quickly create new brief URLs from the browser.


python MIT

After rewriting code to load and parse configuration files many times over, cfitall was born as a way to stop repeating myself and bring consistency to configuring my python applications. Inspired by the viper library for go, cfitall allows the developer to easily specify default values, and users to specify configuration from environment variables, JSON files, or YAML files.


go MIT

contactagon is a cloud function for handling contact form submissions on a website. It's deployed as a Google Cloud Function and relays messages to a configurable address via SendGrid. It uses Cloud Firestore to maintain a database of contact form submissions and mitigate abuse attempts. reCAPTCHA v2 is used to mitigate spam/bot submissions, and CORS is implemented to prevent cross-domain abuse.


go MIT

solrizr was an excuse to learn more about handling http requests in go. It is a query sanitizing reverse proxy for solr, meant to intercept solr/lucene queries before they hit your solr backend, and reject or rewrite them for improved security and reliability. Built on the negroni framework, solrizr includes 9 different middlewares which can be selectively enabled or disabled by configuration.


typescript python MIT

vita reads CV data from a JSON file hosted at an arbitrary URL. It uses the fetched JSON data to populate an interactive CV that is rendered for the browser with React. A python/flask application replies to download requests, which serve pandoc-generated PDF, Word, ODT, and text files that are rendered once and then served from a cloud storage bucket. See my CV for a current example. Runs as a container in Cloud Run.