Portfolio

This portfolio is written with SvelteKit. Why? Entirely because I wanted an excuse to use Svelte.

The "right" tool for such a static page is almost certainly vanilla HTML and CSS, but what nerd can pass up a chance to use something new and interesting?

Hosting

Google Cloud Platform 2022 - Now

I migrated my projects to a cloud provider in mid-late 2022, primarily due to changing internet providers preventing port forwarding. But it has also been a great learning experience.

I chose GCP for two reasons - I had no prior experience with it, and for my use case it's cheaper than its competitors.

RPi K8s Cluster 2021 - 2022

A Raspberry Pi based Kubernetes cluster hosts all my projects.

It's more expensive, less scalable, and (probably) less secure than hosting on a cloud provider. But none of those typically important hosting considerations were the most important factor, learning was. And building my own cluster from the ground up made me learn. A lot. About Linux servers, K8s, Docker, networking, and more.

Tools/Frameworks in use

  • Kubernetes - Container Orchestration
  • Docker - Container Runtime & Build
  • Flannel CNI - Inter-node Network Fabric
  • MetalLB - Load Balancing
  • NGINX Ingress - Ingress (Exposing Services Outside Cluster)
  • TrueNAS - Persistent Off-Cluster Storage
  • NFS Subdir External Provisioner - Dynamic Persistent Volume Provisioner
  • Kubegres - K8s Operator for PostgreSQL Instances
  • KeyCloak - Authentication & Authorization

Strongman Tracker

This project has been in progress, off and on, since 2018. It started because I actually wanted (and still want) a workout tracking app to fill a niche that I haven't yet found a tool for.

Over the years, I've added almost no features.

This is due to heavily prioritizing learning, so my time has mostly gone toward migrations - meant to teach me frameworks and platforms I needed in my day job.

It's moved from Heroku & GitHub Pages to my own K8s cluster. It's moved from MySQL to MongoDB to PostgreSQL. It's migrated from Java/Spring, to Express/Node, to Apollo Server. It was my first exposure to both Enzyme and React Testing Library. I've learned a ton. I've implemented almost no features. And I think that's mostly ok. The only downside is I still don't have a workout tracker that fills my needs.

Snake Game

This project is, at it's core, a very basic JS snake game using <canvas>.

The purpose is primarily to explore and compare various "AI" player strategies.