A UserScript for GitHub Absolute Dates with Commit History Exception

I’ve written a UserScript that formats GitHub’s relative time elements to show absolute dates with hours, minutes, and seconds - except in commit history views where relative dates are more useful. The Problem GitHub shows relative times like “2 hours ago” or “3 days ago” throughout the interface. While this works well for commit history where you want to understand the flow of changes, it’s less helpful for other areas like issue timestamps, PR creation dates, or release dates where absolute timestamps provide better context. ...

July 31, 2025 · Shane Dowling

Homelab - Day 5 - The NAS

So, it’s been a while and I have made some progress worth sharing! After keeping an eye on the auction sites for a while I ended up pulling the plug and buying 2 12TB Seagate Ironwolf drives for my NAS and now wanted to get started with setting this up. The hardware Off a recommendation from Joe at Late Night Linux I picked up a HP 290 G2 I5-8500. It comes with 8GB of RAM and a 256ssd. The form factor is reasonably nice and it fit the two drives perfectly and it’s been chugging along well. ...

June 18, 2025 · Shane Dowling

Homelab - Day 4 - Self-Hosting Gitea

Aims Today’s goal was to deploy Gitea on my K3s cluster, ensuring that: It used persistent storage via my NAS. It was accessible externally through Traefik. It could eventually replace GitHub for my FluxCD setup. What I Did Storage and Permissions Woes Running Gitea as a stateless container worked fine initially, but as soon as I introduced persistence, things got tricky. I ran into permission issues almost immediately, thanks to the interplay between Kubernetes’ user permissions and my NAS file system. ...

March 7, 2025 · Shane Dowling

Homelab - Day 3 - The first software deployment

Aims The goal for today was to get my first piece of software running on the cluster, ensuring that: It leveraged the NAS for storage. It was accessible externally via Traefik. The process was repeatable for future deployments. I chose the Unifi Management Console as my first self-hosted application. Once migrated, I could wipe my Raspberry Pi 4, which was previously running the console, and add it as a worker node to the cluster. ...

February 28, 2025 · Shane Dowling

Homelab - Day 2 - Setting Up a New K3s Control Plane and Node

After going back and forth multiple times and making plenty of mistakes, I finally managed to set up a new K3s control plane and node. It turned out to be relatively straightforward once I got the steps right, so I’m documenting this for future reference! Aims The goal was to set up a fresh K3s cluster, ensuring that: The control plane and node are configured correctly. Flux is properly bootstrapped to manage cluster state. Common pitfalls are documented to save time in the future. What I Did Control Plane Setup Install K3s: curl -sfL https://get.k3s.io | sh Add an SSH key for Flux to connect to GitHub. Bootstrap Flux with Git: flux bootstrap git \ --url=ssh://git@github.com/<your-repo> \ --branch=main \ --private-key-file=/home/<user>/.ssh/<flux_key> \ --path=clusters/k3s Retrieve the control plane token: cat /var/lib/rancher/k3s/server/token Allow traffic on the K3s API port: iptables -A INPUT -p tcp --dport 6443 -j ACCEPT Node Setup To join a new node to the cluster: ...

February 21, 2025 · Shane Dowling

Homelab - Day 1 - Really Ghetto Data Storage

Setting Up Storage for the Kubernetes Cluster The first step in setting up my homelab Kubernetes cluster is ensuring some reliable data storage. Right now, I have two main categories of data in mind: 1. Operationally Critical Data Needs RAID with redundancy Requires both on-site and off-site backups Approximately 1TB of data 2. Media Data Non-critical, so no backups required Several terabytes of storage needed Since the Kubernetes cluster depends on Operationally Critical Data, I need to establish a RAID-backed storage solution with proper backups before moving forward. ...

February 11, 2025 · Shane Dowling

Homelab Setup: The Journey to Kubernetes

Why I’m Migrating My Self-Hosted Services I’ve decided to migrate all my existing self-hosted services—and add a few new ones—to a Kubernetes (K8s) cluster that I’m going to build. There are several motivations behind this decision: Learning Kubernetes Beyond Ephemeral Clusters My role as an Engineering Manager at Syntasso involves a lot of K8s development using Kind, but these environments are entirely ephemeral. I want to experience the long-term challenges of operating a cluster to build greater empathy for our customers. I want to deepen my understanding of Kubernetes, particularly in areas like: Hardening a K8s cluster Managing multiple clusters effectively Increased Focus on Self-Hosting The British government’s baffling approach to tech privacy has pushed me toward self-hosting more of my personal services. My current setup is a mix of manually configured systems and Docker Compose-based services running on different machines. It’s time to bring structure to the chaos. The Plan Time Constraints and Approach I’m a dad with two small kids, so my time for this project is limited. My approach will be: ...

February 10, 2025 · Shane Dowling

The Hybrid Cloud Show is Live!

Exciting news – the first episode of our podcast, the Hybrid Cloud Show, is finally here, part of the awesome Late Night Linux podcast family! 💥 Join me and three very smart industry pros as we dive into the fascinating world of public cloud, private cloud, and everything in between. Check out our first episode here.

April 5, 2024 · Shane Dowling

I'm launching a Platform Engineering Newsletter

Hello! I’m excited to share the first issue of our monthly journey through the world of platform engineering. This newsletter is all about the latest trends, insights, and resources in our field whether you’re a seasoned expert or just starting out. You can find the first month here. Each month, I’ll bring you a mix of news, case studies, upcoming events, and cool projects to keep you in the know. Feel free to share your thoughts, feedback, or anything exciting you’ve come across in platform engineering. As it was the holidays, I opted to send Decembers newsletter in January but expect this newsletter to come out on the final Tuesday of the month. ...

January 2, 2024 · Shane Dowling

Kindle Scribe to Mastodon

Kindle Scribe to Mastodon Over the holidays, I put together a fun little project to put out status updates on Mastodon. Of course, I used some spare time to make this as overly-engineered as possible. Stringing It All Together I wanted this to be event-driven and serverless and to give me some experience toying with Terraform in AWS. Thankfully, what would be the most computationally challenging part is already handled by Amazon. The Kindle Scribe provides a means to convert a note to text and then email it to myself. I used my email provider to then forward it to AWS. I’m using Amazon to register a domain (click TLD domain names are only $3). I used route53 to hook that domain up to SES, then have SES invoke a Lambda when that particular email address is emailed from a particular email with a particular subject line. As I can’t send the email body directly to a Lambda, I’ll need to write it to a bucket first, then have the lambda read from the s3 bucket. (Thankfully SES does pass a MessageID to the Lambda so we know which MessageID refers to to which event), you could also trigger an event from a bucket change but SES already offered, so I figured this was a bit simpler. Now that I’ve got it all triggering a Lambda, I can throw code at this problem. ...

January 1, 2024 · Shane Dowling