A technical architecture diagram of a two-node hybrid-cloud Kubernetes cluster using K3s. On the left, a server tower node is labeled 'Waco, Texas - Debian Linux Server (x86_64)'. On the right, a matching server tower node is labeled 'Phoenix, Arizona - Oracle Cloud ARM Server (ARM64)'. The two nodes are linked across a central blue cloud graphic labeled 'K3s & Tailscale Mesh (WireGuard) 100.64.0.0/10'. The diagram illustrates a self-healing application deployment (Replicas=2); one Python application pod runs smoothly on the Waco node, while a red 'X' on the Phoenix node shows a simulated pod failure, with an arrow demonstrating the automated self-healing orchestration spinning up a replacement pod across the secure mesh network.

Part 3: A Two-Region Kubernetes Cluster with K3s, Multi-Arch Builds, and Self-Healing Workloads

How I turned a laptop in Texas and an ARM server in Arizona into a single Kubernetes cluster — joined over Tailscale, running a multi-architecture workload that survives a node going dark. A step-by-step build guide, plus the moment I realized my monitoring couldn't tell me when my home lost internet, and how I fixed it.

The $0 Homelab: From a Dusty Laptop to a Secure, Global Platform

Follow my journey of turning a dusty old laptop into a powerful, secure homelab for $0. A complete guide to self-hosting, DevOps, and cloud tools.

A five-stage GitOps pipeline diagram showing a Terraform deployment workflow. The stages, marked with green checkmarks, include OIDC Authentication, Terraform Plan (Fmt/Validate/Plan), AWS S3 Remote State Locking, Terraform Apply (deploying 13 DNS records and an Oracle VCN/Instance), and Branch Protection. The pipeline concludes with an 'Infrastructure Updated' globe icon.

Part 2: Infrastructure as Code with Terraform, OIDC, and a GitOps Pipeline

How I brought my hybrid cloud homelab under Terraform management — 13 Cloudflare DNS records, an Oracle Cloud instance, remote state in AWS S3, and a GitHub Actions pipeline with secretless OIDC authentication. No more clicking around in dashboards.

Building a Personal Ad-Blocking Server in the Cloud!

A personal blog post on the motivation and journey behind building a private, ad-blocking DNS server on AWS. Learn why I tackled this project and how it led to a faster, cleaner internet.

GitHub Actions workflow showing all five pipeline stages with green checkmarks — Gitleaks, CodeQL, Build Hugo, Lighthouse Audit, and Deploy to GitHub Pages.

Part 1: Building a Security-Gated CI/CD Pipeline with GitHub Actions

Learn how to build a professional, multi-stage DevSecOps pipeline for your portfolio site using GitHub Actions. This guide covers parallel security gates with Gitleaks and CodeQL, containerized Hugo builds, Lighthouse performance audits, and secretless OIDC deployments — no stored tokens.

Running a Powerful AI Locally with Docker!

Curious about running a powerful AI on your own machine? This post introduces my project guide for setting up the DeepSeek-R1 model locally using Docker for ultimate privacy and control.

An architectural diagram of a homelab automation loop. An icon for 'HOMELAB' points to 'BACKUPS,' which points to 'UPDATES,' which points to 'ALERTS,' which points back to 'HOMELAB.' In the center, Google Drive and Discord icons show their integration in the process.

Part 4: Automating a Homelab with Backups, Updates, and Alerts

A step-by-step guide to making your homelab self-maintaining. Learn to automate backups to Google Drive with rclone, manage container updates with Watchtower, and send proactive alerts to Discord using Prometheus and Alertmanager.

Architecture diagram showing an LLM-powered log triage pipeline with rules-based classification and DeepSeek-R1 summarization, delivering alerts to Discord.

Building an LLM-Powered Log Triage Pipeline with Python and DeepSeek-R1

How I built a Python automation that reads Docker container logs, classifies severity, and sends critical events to a self-hosted DeepSeek-R1 model for natural-language summarization — with alerts delivered to Discord every 15 minutes.