RSSAmplifier

Blog

Hussainweb | Blog

My personal blog about tech, life and everything in between.

hussainweb.meRSS feed ↗112 posts

Latest posts

Solving Homelab Authentication: A Story of Cloudflare, Authelia, Keycloak, and Tinyauth

Installing an unauthenticated homelab tool sparked a deep dive into self-hosted authentication—exploring Cloudflare Access, Authelia, Pocket ID, Keycloak, and landing on Tinyauth with Nginx Proxy Manager.

The hidden trap in Terraform's S3 backend (and why Cloudflare breaks it)

Why terraform init threw SignatureDoesNotMatch through Cloudflare Tunnels, and what AWS SDK v2 is doing behind the scenes.

Life after MinIO: Why I switched to SeaweedFS in my homelab

After discovering MinIO's repository was archived, I evaluated SeaweedFS and Garage for self-hosted S3 storage.

Granular Proxmox Terraform state and live homelab discovery

Why I wrapped Terraform in Bash to isolate Proxmox LXCs and VMs per VMID, how the state backend evolved to S3, and how a Python discovery engine auto-generates live infrastructure catalogs.

Ollama quietly stopped using my AMD iGPU

Why Ollama suddenly ran everything on the CPU on my AMD APU box, and the one environment variable that brought the GPU back.

Generating Semantic Note Filenames: Taming Local LLMs with Ollama and Gemma 4

How I integrated LLMs into my PKM converter, refactored API abstractions, debugged network/port quirks, and compared local model performance.

Finding My Perfect PKM Fit: The Journey from Logseq to Obsidian

Why and how I built a custom Python migration CLI to extract semantic note structures from Logseq and bridge the gap to document-based PKM vaults.

Moving Development to the Cloud: The AI-First Home Server

Why and how I shifted my development workflow from local laptops to a Proxmox-based remote setup, optimized for agentic workflows.

Winning the AWS Jam Toronto: An Unexpected Journey

My experience attending the AWS Jam in Toronto, diving into DevOps and Generative AI, and unexpectedly taking the top spot.

How I Saved My Immich Installation from a Broken PostgreSQL Upgrade on TrueNAS

A deep dive into a manual PostgreSQL 15 to 18 migration for Immich on TrueNAS SCALE, using Warp's AI agent to navigate a broken upgrade path.

Beyond "It Works on My Machine": Lessons from Modernizing a Legacy Ansible Role

My journey modernizing an old Ansible role for chezmoi, navigating the shifts in the Ansible ecosystem, and learning to treat AI as a senior peer.

Self-Hosting Atuin with Docker and Coolify

My journey to solve fragmented terminal history by self-hosting an Atuin sync server using Docker and Coolify.

Teaching Gemini My Voice: A Journey into Skill Creation

When working with Large Language Models (LLMs) to generate content, there's always a risk of losing your unique perspective. For a personal blog like this one,...

The Reboot: Ditching the Grand Architecture for Astro

It’s been a while. If you’ve been following my corner of the web, you might have noticed an extended radio silence. I’ve been wanting to revamp and start...

The month of DrupalFest

I began writing this series of posts on April 1st, 2021 to celebrate DrupalFest, Drupal's 20th year. When I started, I was not sure I would be able to write...

What I want to see in Drupal's Future

This DrupalFest series of posts is about to end and I thought that a fitting end would be to talk about the future of Drupal. I have already written a bit...

Understanding overridden configuration in Drupal

The configuration API is one of the major areas of progress made in Drupal 8. It addresses many challenges of managing a site across environments for Drupal 7...

A Drupal Developer's Tech Stack... continued

Just as I published yesterday's article on the tech stack, I realized that I missed a few important things. I had said that the list was only a start, so I...

A Drupal Developer's Tech Stack

The title of this post is not really accurate, but I can't think of another way to say it. This post is related to my earlier one on what a Drupal Developer...

Remote Drupal Development

Over the years, I have significantly lesser time for development and an increasing need to move around. After dealing with back-pain due to the weight of my...

Altering forms in Drupal: a workable mixed approach

I thought I was done with the series of posts on object-oriented programming after my last one. Of course, there is a lot we can write about object-oriented...

Altering forms in Drupal: Comparing hooks and object-oriented approaches

Update: Read the follow-up to this post where I discuss a mixed approach combining both of the approaches here. I previously wrote about how the...

How I contribute to Drupal (my workflow)

I have been contributing to Drupal in a few different ways for a few years now. I started off by participating in meetups, and then contributing to Drupal core...

Tracking Drupal (and open source) contributions

We at Axelerant have been contributing to Drupal in our own ways for a long time. In fact, I worked as a full-time contributor to Drupal a few months after I...

The Panacea of Objects in Drupal

Drupal 8 was a major revolution for the Drupal community in many ways, not least of which was because of the complete rearchitecting of the codebase. We picked...

What does a Drupal developer do?

Now that we have discussed some of the concerns with career growth, let's talk about beginning a career in Drupal. I am not aiming for comprehensiveness but I...

Career Growth with Drupal

As the Director of Drupal services at Axelerant, one of the things I often worry about is the growth of each of the members of my team. We are a Drupal agency,...

What I look for in Drupal contrib modules

As of this writing, there are 47,008 modules available on Drupal.org. Even if you filter for Drupal 8 or Drupal 9, there is still an impressive number of...

What I would like to see in Drupal 10

I picked up this topic from my ideas list for this #DrupalFest series of posts. I didn't think I would want to write about this because I don't think about...

Building a Digital Experience with Drupal

Drupal is a CMS. One might even say that Drupal is a good CMS and they would be right about that, in my not-so-humble opinion. At its core, Drupal is able to...

People in Drupal

As I was leaving home for the park, I wondered aloud what topic should I write about today. My daughters chimed in write about your three Drupal kids. It was...

My thoughts on Automatic Updates in Drupal

It’s spring and I decided to come out to a park to work and write today’s post. I sat on a bench and logged in to my WordPress site to start writing the post...

Simple Infrastructure as Code (IaC) for Drupal

I have been setting up computers and configuring web servers for a long time now. I started my computing journey by building computers and setting up operating...

Running (testing) Drupal in CI pipeline

Here's a quick post to show how we can run Drupal in a CI environment easily so that we can test the site. Regardless of how you choose to run the tests (e.g....

Thriving on Chaos in Drupal

Today, I want to share my thoughts from a book passage related to Drupal. The book, Everyday Chaos by David Weinberger, is largely about how chaos is the new...

Drupal Podcasts (and some PHP ones)

Today's DrupalFest post is on the lighter side. I am just going to talk about some of the podcasts I listen to related to Drupal, PHP, and software development...

Why you shouldn't decouple Drupal and why you should

Today's post is going to be a quick one; not because it is an easy topic but because a lot has been said about it already. Today, I want to share my thoughts...

The magic of Drupal events

I missed joining the DrupalNYC meetup today. Well, I almost missed it but I was able to catch the last 10 minutes or so. That got me thinking about events and...

Accessing Drupal.org API

I am going to keep today's DrupalFest post simple and talk about the API to access content on drupal.org. The Drupal.org API is a public API that allows you to...

My advice to my younger self (and to new Drupal developers)

I recently opened up a spreadsheet where people can put in their ideas of what I can write about in this DrupalFest series. Someone put in a topic of what...

Code Quality check tools for Drupal

This is the fourth post in my DrupalFest series and I am excited to keep it going. I want to write about different tools I am aware of for running quality...

Speed up Drupal websites by using PHP's preloader

PHP 7.4 introduced the concept of preloading classes (files) on server start-up into the PHP opcache. This gives us performance benefits for sites that tend to...

Quick setup of a Drupal site

This post will cover quickly setting up a Drupal website for testing, experimentation, or evaluating features on your local system. While I cover a different...

Let the fest begin! #DrupalFest

It has been 20 years since Drupal began its journey in a dorm room and reached enterprises. April 2021 is marked as the month of DrupalFest and many people are...

My (updated) Drupal Story

Now that I have announced my "a blog a day" DrupalFest attempt, here's the first one. I thought for a while about what should be the first post in this series....

Setting up Python venv in Visual Studio Code

I recently set up a new laptop for work and was about to get most of the way using my dotfiles. It's more than just dotfiles: it is a script to install all my...

Learning Go for PHP Programmers - Part 1

I have been trying to learn Go (golang) this week a bit more formally. I have worked with Go in the past but I could do it because it has syntactical...

An easier way to get the current node in a block plugin in Drupal 8

A long time in a galaxy far away... Not really. But it is over a year since I wrote how to get the current node in a block plugin and promised to write a...

Upgrade your Drupal site to the new official Drupal 8.8 composer template

Drupal 8.8 is out today! This will be the last (minor) release of Drupal 8 (thanks Eli-T) and we are now looking at the release of Drupal 9 soon. Among the...

Open content in new tab with an image formatter

One of my sites has a listing of content shown as teaser. The teaser for this content type is defined to show the title, an image, and a few other fields. In...