tools

this website was built with

HTML, CSS, TypeScript, Tailwind, React, and Next.js, deployed on Vercel. I use Plausible.io for privacy focused analytics.

languges

I am happiest working with TypeScript and JavaScript. I also have years of experience writing enterprise-scale applications in Java, and shorter stints writing Python, C#, and Golang professionally.

deploy & automation

I have deep experience working with Jenkins & Spinnaker, particularly instances running on EC2 servers. I've also worked with GoCD and Gitlab CI at enterprise scale. For smaller projects, I am partial to GitHub Pages, Vercel, and Digital Ocean (in increasing order of required complexity) - and if we need fine grained control or uncapped scale, I'm quite comfortable working in the AWS fleet of services. GitHub Actions is also great for getting all sorts of things done.

testing

A test-first mentality is a cornerstone of my practice. Most recently, I've been loving Vitest for JavaScript testing. In the JS world, I've had deep experience with Jest, Mocha, Chai, and Jasmine. I reach for JUnit for Java codebases, and I've also worked with Ginkgo a bit on Golang projects. For browser tests, I am most happy working with Cypress and have also spent a lot of time with Selenium.

client-side

I've loved working with React since it converted this aspiring backend engineer into a V8 lover in 2016. Though I find React's own Context API and Zustand suitable and pleasant to work with in most circumstances, I maintain a high opinion of Redux and it's my personal choice for medium to large scale projects. On the ZUUT project, I liked using Konva for smooth drag and drop interactions and animations.

server-side

After building a few Node.js data pipelines for Kroger, I got deep server-side experience working on the Cloud Infrastructure team at GrubHub. I worked on our Java/Spring Boot frameworks, which were used by our application engineers to consume platform APIs for authentication, notifications, and other customer-facing functions - notably adding a new mobile service provider to our notifications platform, coding the integration and managing a relationship with the vendor. I also contributed features to our load-balancing, API gateway, and service mesh/discovery architecture.

In recent years my client's solutions have required less complexity, sometimes going for an EC2/Docker solution, and other times going for serverless functions on AWS Lambda or Digital Ocean. For smaller scale things and my own personal projects, Firebase can usually cover my needs. Though I've really enjoyed the rapid development and agency these smaller systems have allowed, I'd love the opportunity to work on enterprise-scale architecture again.

my workflow

Alfred, BetterTouchTool, git, GitHub Actions, iTerm, *nix && macOS, Linear, Obsidian, VSCode

misc

Akai MPK Mini, CAPiTA DOA, Köves Telecaster, Logic Pro, Yamaha P-45, ZSA Moonlander