The blog
Every post — deep dives, debugging stories, and build logs from the homelab. Search by keyword or filter by topic.

From Manual Deploys to GitOps: How I Automated my Homelab with ArgoCD and GitLab CI
I got tired of SSH-ing into servers every time I needed to deploy a simple app. So I spent an evening setting up GitLab CI, ArgoCD, and a GitOps workflow in my homelab. Here's what worked, what broke, and what I learned along the way.
read.md
How I Exposed My Kubernetes Homelab to the Internet Using Cloudflare Tunnel
I wanted production-style ingress for my k3s homelab without exposing ports or my public IP. What looked simple turned into debugging Route 53 nameservers, Kubernetes DNS resolution, and mysterious Cloudflare 502s before everything finally worked.
read.md
Why One Node Pulled and the Other Didn't: Debugging an ECR Image Pull Failure in Kubernetes Homelab
How to troubleshoot and pull images from Amazon Elastic Container Registry (ECR) into your Kubernetes
read.md
How I Installed Portainer on My Kubernetes Homelab (Running on Proxmox)
A step-by-step guide to installing Portainer on a Kubernetes (k3s) homelab running on Proxmox. Covers Helm setup, fixing cluster reachability errors, resolving the security timeout, and accessing the Portainer UI.
read.md
How I Installed Kubernetes on My Homelab (Using k3s on Proxmox + Ubuntu)
I built a Kubernetes cluster in my homelab using k3s on an Ubuntu VM running inside Proxmox. This guide walks through the full setup process, from server preparation to adding worker nodes.
read.md
I Built a Docker-Native Database Admin UI in Rust. Here’s Why.
DockAdmin is a lightweight, modern database admin UI that runs as a Docker container. It supports PostgreSQL, MySQL, and SQLite. The entire image is ~15MB.
read.md
How to Install and Connect to MySQL on your Linux VM
A step-by-step guide to installing MySQL on a Linux VM, securing it, and setting up remote access using a database client.
read.md
Now that you've installed Linux VM, what's next?
Just installed a Linux VM and wondering what to do next? This guide walks you through everything you need to get your VM production-ready—from adding secure users and setting up SSH keys, to configuring firewalls, port forwarding, and even running your first Nginx web server.
read.md
How to add real-time support to your Flutter application
This post discusses how to add real-time support to your Flutter app using Appwrite. It explains what real-time means, what to consider, and where it is used. You'll also learn how to integrate Appwrite to enable live updates and improve the overall experience of your app.
read.md
Build APIs faster with Go and Appwrite
This post discusses how to quickly build REST APIs with the Appwrite Go SDK, eliminating the need to manually configure headers for API keys and project IDs, switch URLs for different endpoints, handle requests, and convert responses to JSON.
read.md
Rust Workspaces: A guide to managing your code better
In this guide, you will learn what Rust workspaces are, their benefits, and a practical guide on how to build a REST API using Rust workspaces.
read.md
How to implement hot reloading in a Go application
This guide will explore what hot reloading is and why it is needed. It will also explore two libraries to help build hot reloading into your applications.
read.md
How to build a fullstack application with Go, Templ, and HTMX
In this guide, you’ll learn how to build a fullstack application with Go using Templ, HTMX, and Xata.
read.md
Xata + Flutter: A getting started guide.
This post discusses what Xata is and provides a detailed step-by-step guide to using it to build a basic project management application with Flutter
read.md
Xata + Go: A getting started guide.
This post discusses what Xata is and provides a detailed step-by-step guide to using it to build a project management API in Go.
read.md
Xata + Rust: A getting started guide.
This post discussed what Xata is and provided a detailed step-by-step guide to use it to build a project management API in Rust.
read.md
Getting started with Nuxt Server Handlers
This post describes what Nuxt’s Server Handlers are and how to use them to create a todo application using the Xata serverless database platform.
read.md
Getting started with Next.js 14 Server Actions
This post describes what Next.js's Server Actions are and how to use them to create a todo application using the Xata serverless database platform.
read.md
Appwrite + Go: Build APIs without technical overhead
Learn how to abstract technical overhead by leveraging Appwrite to build a project management API in Go
read.md
Appwrite + Rust: Build APIs without technical overhead
Learn how to abstract technical overhead by leveraging Appwrite to build a project management API in Rust
read.md
Getting started with gRPC in Golang
gRPC is a modern communication framework that can run in any environment and helps connect services efficiently. This post explores what gRPC is and how to get started by building a user management service using gRPC, MongoDB and Golang.
read.md
Getting started with gRPC in Rust
gRPC is a modern communication framework that can run in any environment and helps connect services efficiently. This post explores what gRPC is and how to get started by building a user management service using gRPC, MongoDB and Rust.
read.md
Beyond Composability: Using Uniform as an Internal Tool
Explore what Internal Tool is and how to leverage Uniform as an Internal tool to build a News timeline application in Flutter.
read.md
Going fullstack with Flutter and MongoDB Atlas Data API
Learn how to use MongoDB Data API and Flutter to build a mobile fullstack application.
read.md
Build a product delivery page with Rust and Uniform
Learn how to build a product delivery page using Cloudinary for media optimization, Uniform for composing experience, and Yew; a Rust-based frontend framework for rendering the product markup.
read.md