Personal Projects

I am an early riser, and after I have a cup of coffee in my hand every morning, I got straight to my personal PC and hack away at personal projects until 6:30 am when I put my PC to sleep and open my work laptop. I build a lot of tools for myself, experiment with different technologies, and sometimes even contribute to open source projects. Here are some of the personal projects about which I am most enthusiastic.

Being the open-source software loving, tinfoil hat wearing guy that I am, I moved away from GitHub when Microsoft acquire it and began using GitLab. In other words, my older projects are on GitHub and newer projects are on GitLab.

last-port

This is the project containing the code for this portfolio site. Having done a handful of projects with Gatsby and Next, I wanted to try something new with static site generation. I find Gatsby to have a lot of boilerplate and I don’t care for how Next kind of pushes you to use Vercel which is overpriced. So far, I’m really liking how Astro handles things like routing, plugins, and templating, as it really feels like it speeds up the development process and has a very low learning curve. I also brought in React for some templating since I am very familiar with React. The decision to use Tailwind and Daisy UI stemmed from the fact that I do so much work with styled-components already and I wanted to try a more CSS class based approach for a change since it is simpler and lends itself a bit better to static site generation.

Games Library

I needed to learn React when Indeed hired me, so I spun up this project as a way to teach myself React quickly. Initially, I did some components as class components and some as functional components to teach myself both patterns. I even brought in Redux and switched between that and React Context for state management, so I had familiarity with both approaches. Aside from the learning aspect, the app was just set to be a way for me to catalog and video games collection and easily search through them when trying to decide what to play. I’ve been updating it fairly regularly when I acquire new games and it grew well beyond just an app to learn React.

Stringman Utils

I found myself doing a lot of string manipulation during a period at my job and I thought that it would be nice to create a library of utility functions to make my life easier. The library is fairly simple, but it has been useful for me in many projects since then. Whether you want to test that a string is a properly formatted email address or change the casing of a string, this library has you covered. This library is published on NPM and gets a reasonable amount of downloads regularly. I do plan on revisiting this library at some point to clean up all the unit conversion stuff that I don’t think belongs in the library and to add a lot more string manipulation methods.

video-game-db-supplemental-data

After living in Austin for so long, then moving back to my hometown which is a fraction of the size, I found myself not knowing what to do for fun, where to eat, what places have live music, etc. I decided to create something that could fix this and that’s what this repo is. Basically, I took time to find several local events calendars online, then I figured out how to extract the data from each and combine it all into one big calendar of events. I could get the data from many using Cheerio to scrape, some I could just download and parse an ICS file, and there is even one or two where I had to use Puppeteer to interact with the DOM to scrape the data I needed. The results are put in an ICS file and into JSON format which is uploaded to a Sanity.io instance so I can easily consume the data in a site I am also building.

WF Events Calendar

Being from a smaller city, I used to complain that there was nothing to do. One day I began looking for event calendars for the surrounding area and realized that there was actually plenty to do, I just didn’t have awareness of the local goings-on. I created this repo which uses different methods to fetch calendar information for several local sources and combine the results into one calendar, both in ICS and JSON format. I even use a location API to properly format addresses for the events so I can easily pop them into the nav system in my car to easily navigate to them. Later, I stood up a Sanity.io backend to store the results in a way that would be easy for me to consume and display in my Fallstown Festivities project.

touchscreen-components

I have a friend that owned a commercial HVAC business that now designs custom HVAC systems for businesses. He does a lot with touchscreen controls for monitoring temperatures and equipment details and controlling some aspects of the system, but he was never really happy with the dated interfaces used on these devices for him to create layouts. He gave me a controller and a touchscreen to tinker with, and this project is the result of that work. I found endpoint documentation for the controller and realized it had a web server built in that could host a custom GUI. From there, I created him a theme-able user experience with custom visualizations and controls that have a built in translation layer so he could easily change the languages for his clients. He also knows enough about programming to build upon what I’ve given him and is quite happy with the results.

linux-app-updater

Being that I run various Linux distros on all of my machines and I do a lot of niche things with my computers, I tend to use a handful of apps that I can only get either through source code or AppImage files which don't exactly have update notifiers or processes built in. This repo hosts a series of scripts that take a config for the apps you use and the current version you have installed. Once you fill out your config, you can run the script periodically to check for updates and download them if they are available. It will even install some of the updates downloaded depending on the app type. I call this and a handful of other Node scripts I have in one big shell script that I run on all of my machines to ensure that all of my Linux apps are updated.

fallstown-festivities

This repo hosts code that I am working on occasionally to build a website for local businesses and events. Honestly, I’ve sort of abandoned it for a while because I realize that Gatsby was not a great technology pick and I will be rebuilding this with either just vanilla React or potentially Astro if I think that the islands architecture will work for my needs (I think it will). This app utilizes my Sanity.io instance that has my calendar data from my wf-events-calendar project, and it uses Yelp! data for the businesses. The eventual goal is to have one place where locals go to find where to eat, what is going on around town, where to hang out to hear live music, etc. It’s still in development but it is something that I am passionate about and will continue to work on.

everdrive-firmware-updater

The world of retro video games has gotten to a place where there are a lot of “modern retro” devices that we collectors love to have. Whether it be upscalers to get the best picture from on old console onto a modern TV, flash carts that allow us to load ROM files to a single cartridge so we don’t have to wear out the cartridge slots of our consoles, and even modern retro handhelds that play old games on new hardware, a lot of collectors own a lot of new devices, and those devices get occasional firmware updates. This script collection takes a configuration for your devices and current firmware versions and will check for and download updates, making it easy to know when they are available and fetch the files needed to update your devices.

simpleGames

Being a gaming enthusiast, I wanted to experiment with creating games in the browser without the use of a library to abstract a lot of the game logic. The idea was to get a basic understanding of what a game engine has to do regarding drawing, collision detection, animation, etc. I spun up this repo and dabbled with creating some classic style games using canvas, and I found this a really interesting project on which to work. In this repo, this are multiple iterations of a Breakout style brick-breaker game and a shoot-em-up game.

Home Projects

I've always got a project going on around the house. Here's a little bit about a few of my favorite projects and some I've not yet done but are planning to take on soon.

My home Server

My home Server

I took some of the old PC parts I had lying around and built a pretty powerful home server. After a quick installation of Ubuntu Server, I was ready to start getting some useful apps installed. I ran Pihole on a Raspberry Pi for years and Home Assistant on an old Mac Mini I got from a friend and converted to being a Linux box. That said, those 2 apps were all I needed to replace, but after some experimentation and finding Runtipi, I ended up with a server full of apps and a new set of habits using my self-hosted apps. Now I’ve written several bash scripts and cron jobs to keep it updated and backed up to multiple hard drives, so I lose nothing if the machine dies on me.

Smart Home

Smart Home

The lights turn off when no one is home, the kitchen and dining room lamps turn on at sunset, the scanning of many RFID tags I have around my house will toggle on or off different combinations of things around the house. These are some automations I have set up using Home Assistant and a ton of smart devices. I have hand rolled a lot of my own home automations though Home Assistant. I even have it exposed to the outside world using port forwarding and an inexpensive service to make this simpler.

Plans for other projects

Projects I want to get around to doing.

Make some indie games

I’ve wanted to make some video games for a long while, now. Making and releasing an indie game seems like something I’d enjoy and could potentially open another income stream. I’ve bought the classes I need to learn Godot game engine and installed the software I need to start developing a game. Now, I just need to set aside the time to get started!

Finish my in-progress projects

I’ve got a couple of projects I’ve started that I really want to get finished and launched. My Fallstown Festivities site would be at the top of that list as the people in my hometown really need a good place to go to discover things to do around town. Aside from that, I’ve begun working on a PWA for a golf cart crawls that will make things easier for every one that does golf cart crawls to keep track of the route, the votes on “best stop”, and even the winners of the games we play on the crawls.

Build and program a LED ticker

I found this really cool LED ticker that has a mobile companion app and allows you to easily display different bits of information. While I really like the device, I think it is insanely overpriced. I started poking around and found similar projects using Raspberry Pis. Being that I have a handful of Raspberry Pis lying around, I figured I could 3D print a case, use a Raspberry Pi I already have, and the only thing I would need to buy is an LED matrix screen. Then I could have the exact result I wanted for a fraction of the price, plus I really enjoy projects involving both hardware and software work.

Build and program a fitness tracker for my home gym

I have a home gym in my garage that gets used by my family and me quite regularly. We added a whiteboard to the gym for tracking weights and workouts, but I felt like I could do better. One day I had the idea to program a web app intended to run on a Raspberry Pi and the interactions could all be through a touchscreen in the garage. Then, everyone could have their data baked up and potentially even synced to their phone.