Running GitHub Actions on my own computer: what ubuntu-latest was quietly doing for me16 October 2026
I moved my GitHub Actions jobs to a self-hosted runner in Docker to save minutes. Jobs first failed, then got slower, because every job downloaded what GitHub's hosted image already has. Putting those tools in the runner image brought a deploy from 2:00 to 1:28.
Shipping speed feels different with Claude Code.4 September 2026
A roundup of blog and backlog upgrades built with Claude Code this week: a write API, SEO metadata, an RSS feed, a public backlog board, a privacy-friendly visitor counter, and a live design discussion that became a stale-while-revalidate cache.
From cheat sheets to practice labs2 September 2026
Building a browser-based CKA practice lab: a real Ubuntu terminal with genuine vim/grep/awk muscle memory, simulated kubeadm/kubectl for safe repetition, and the Azure/Cloudflare integration quirks that came with it.
A single backlog for all my side projects1 September 2026
How I use one GitHub Projects board across every side project's todos — and let Claude read and write to it directly.
Another interesting weekend1 September 2026
Two weekend side projects: training a first YOLO object-detection model with Ultralytics, and building a browser-accessible Linux practice lab on Azure Container Apps.
CKA prep update: 3 hours optimizing my lab, 3 minutes for my first exercise22 August 2026
A CKA lab automation tune-up: fixing a resource-group permission bug, splitting node provisioning, adding missing kubeadm prerequisites, and two new scripts that make starting and connecting to the practice cluster much smoother.
Yes, I did it! 👊20 August 2026
Building a fully automated two-node Kubernetes cluster in an Azure sandbox for CKA practice — Calico CNI, VXLAN networking, and the IP-forwarding gotcha that broke cross-node pod connectivity until it was fixed.
Preparing for the Certified Kubernetes Administrator (CKA)18 August 2026
Kicking off CKA prep after five years running AKS in production — why hands-on install/config is the real gap to close, and the plan to build a two-node Kubernetes lab on Azure VMs inside a Whizlabs sandbox.
How I spent my weekend 🙃17 August 2026
A weekend recap: finally setting up Claude Code inside a Docker container, working through a Claude course, adding a human-playable mode to the hangman demo, and digging into CKA prep with a two-node Kubernetes cluster on Azure VMs.
Turning holiday time into a live AI demo!22 July 2026
Building a live Capacity Advisor demo over the holidays: an agent that collects Azure Container Apps metrics and asks a Cloudflare Llama model whether the configured resources are actually sufficient, with a real-time SignalR log stream.
Breaking change in GitHub Actions Azure OIDC federation20 July 2026
GitHub's move to immutable owner/repo IDs in the OIDC subject claim broke older Azure federated-credential trust policies — the fix is configuring Entra ID's 'Other issuer' option with the full subject string by hand, since the GitHub preset can't express the new @id format.
cat7 July 2026
Three handy uses for the Linux cat command beyond viewing files: quickly creating/editing files in editor-less containers with cat > file, and a one-liner to test whether a TCP port is open using /dev/tcp.
A Short Break from Studying, a Long List of Ideas5 July 2026
After a seventh Microsoft certification in a row, taking a short break to turn a backlog of practical Kubernetes, debugging, and Linux tips into posts over the coming weeks — with a unit-testing series planned after that.
Kubernetes tip 2: Connectivity troubleshooting19 June 2026
Six ways to troubleshoot pod-to-pod connectivity in Kubernetes when the usual tools are missing: curl, nc, wget, a bash /dev/tcp port check, a raw HTTP request via bash redirection, and a PowerShell/.NET fallback for Windows containers.
Back to the roots17 June 2026
A career-reflection post: 26 years after an Electrical Engineering/Telecommunications diploma, tying that original network-management background back into today's Azure networking and AZ-305 prep — DevOps as the bridge between the two.
Kubernetes tip 1: Specify max pods for the user node pool (AKS)16 June 2026
AKS's default max-pods-per-node (30 for user node pools) is set at node-pool creation time and can't be changed later — why bumping it to 150 up front makes sense on a subnet with plenty of IP headroom.
Blue/Green vs Canary Deployments – I use both11 June 2026
Why Blue/Green and Canary deployments aren't competing strategies: Canary handles gradual feature rollout behind flags, while Blue/Green provides the instant, clean rollback that Canary alone can't guarantee against hidden side effects.
One of the best decisions I made during my AZ-400 prep: Building my own website10 June 2026
Why building a personal website during AZ-400 prep was one of the best calls made: real custom domains, TLS, and production-like deployments for demos turned abstract Azure concepts into a genuine portfolio.
Quick update on the AZ-400 lab tip post9 June 2026
14k impressions and 88 reactions on a post about the AZ-400 lab's unclear instructions — including one comment from someone who failed the exam for the same reason, which is exactly why the AZ-400 cheat sheet followed the next day.
Multi agent Hangman game demo now live on my site!1 June 2026
The original Hangman demo launch: two Cloudflare Qwen2.5 LLM agents playing against each other, containerized on Azure Container Apps, served by a Cloudflare Worker, with real-time output over SignalR — evolved from an earlier AI-102 console practice project.
Six Microsoft Certifications in One Year!29 May 2026
Six Microsoft certifications in twelve months of evenings and weekends, capped by an 863/1000 score on AZ-400 — the certification order so far, and AZ-305 up next.
AZ-400 Prep Update – 4 days until the exam!24 May 2026
When Whizlabs and Tutorials Dojo hadn't caught up to the April 2026 AZ-400 exam update (hybrid CI/CD, GitOps with Flux v2 + ArgoCD), generating custom scenario questions with AI to fill the gap — including one where the AI itself got a nuanced hybrid setup wrong first.
AZ-400 prep milestone: Just finished the Whizlabs final mock on first attempt at 80% in 56:31!23 May 2026
80% on the Whizlabs AZ-400 final mock, first attempt, 5 days before the real exam — solid improvement from earlier practice tests after focusing hard on weak areas.
Blue Green and Canary deployment demo of my text analysis containers20 May 2026
How blue/green deployment in Azure Container Apps and feature-flag-driven canary rollout in Azure App Configuration work together on a real demo: stable blue serving production traffic, green tested separately, with per-user feature flags controlling which AI features (sentiment, language detection, summarization) are live.
AZ-400 Update: Just got blue/green + canary deployments working with Azure Container Apps and App Configuration!19 May 2026
Building the blue/green + feature-flag demo for AZ-400 practice: adding a user header, moving a feature from an env variable to an App Configuration flag — and the real debugging story, a 502 traced to GitHub Actions mangling a multi-line prompt.
AZ-400: Built & pushed an artifact in 30 minutes, but spent 2 hours setting up SonarQube16 May 2026
Integrating SonarQube (via SonarCloud) into a GitHub Actions pipeline: the quirks that ate two hours (host-URL validation, version-specific scanner behavior, global-tool install issues), the fix (pinning an older SonarScanner for .NET), and how easy Dependabot + CodeQL were by comparison.
Yesterday I created a build and push artifact CI/CD pipeline for AZ-400 practise in Azure DevOps!16 May 2026
Building a reusable Azure DevOps YAML pipeline for a small .NET helper library: AI-assisted (Aider + Qwen2.5) unit tests, automated SemVer NuGet packaging to GitHub Packages, restore caching, a dotnet format style gate, and the Cache@2 quirk that needed a manual mkdir to fix.
Speeded up my Text Analysis demo with smart ACA warm-up!11 May 2026
Cutting first-click latency on the Text Analysis demo by 5-10 seconds: a Cloudflare Worker checks KV on page load and invisibly prefetches/warms the Azure Container Apps backend if it's been idle more than 5 minutes.
Checkout my new website and live text analysis demo!7 May 2026
The build log for koorevaar.com itself: three evenings from buying the domain to a portfolio built with Aider+Qwen2.5, GitHub Actions pipelines, and a Terraform-deployed Azure Container Apps text-analysis demo behind a Cloudflare Worker + phi3:mini.
AZ-400 project: Yesterday I implemented canary deployment2 May 2026
A 60-second canary deployment demo: traffic split at the ingress controller between blue and green environments, plus a sticky-session example, all served over a real HTTPS production URL.
AZ-400 Practice - week 3: Complete Blue/Green + Canary CI/CD on AKS2 May 2026
Week 3 of an AZ-400 side project: a full Terraform + AKS + Traefik pipeline covering infrastructure, blue/green + canary deployment, and teardown — with real execution times for each stage, down to seconds for a blue/green traffic switch.
Building a Professional, Production-Ready Demo Platform with zero Idle Cost27 April 2026
A permanent, always-HTTPS demo domain that costs almost nothing when idle: a Cloudflare Worker + KV serves a static placeholder page, then instantly re-routes to a freshly provisioned AKS backend the moment a new ephemeral demo starts.
YES! Blue-Green deployment working26 April 2026
The first working blue-green deployment on AKS for AZ-400 practice: three pipelines split across infrastructure provisioning, deployment, and Traefik IngressRoute-based promotion between two Git-branch environments.
Another update about my AZ-400 practice project!25 April 2026
Adding a detect-language endpoint to the sentiment API, backed by AI-assisted unit tests (Aider + Qwen) that also run on main, a feature-branch flow set up for blue-green then canary, and a Flask route-ordering gotcha (routes must be defined before the blocking app.run() call).
AZ-400: Sentiment API live on AKS via cross-subscription Azure DevOps pipeline19 April 2026
The sentiment API goes live via a real two-pipeline, cross-subscription Azure DevOps setup: Terraform cluster creation feeding a second deploy pipeline through cross-pipeline artifact passing, arm64/amd64 cost-split nodepools, end-to-end deploy in 2 minutes.
Quick update on my AZ-400 side project11 April 2026
From sandbox success to a full CI/CD pipeline in a day: Terraform for AKS, Spot nodepools, a clean LLM-adapter pattern, Traefik on ARM64, ConfigMap-driven prompts, and a cross-subscription, bootstrap-plus-main-stage pipeline — all on €45 of remaining credits.
Just deployed a self-hosted sentiment analysis service on AKS using Ollama!10 April 2026
The first working milestone: a self-hosted sentiment-analysis service running in the Whizlabs AKS sandbox — Terraform + PowerShell automation, a multi-container Ollama/LLM-adapter/Flask architecture, and ConfigMap-driven prompts with proper health probes.
Just started a new side project as part of my AZ-400 preparation:5 April 2026
Kicking off a self-hosted LLM sentiment-analysis platform on AKS: a Flask API, an LLM adapter layer, Ollama (phi3:mini) in-cluster, Terraform for IaC, and Traefik ingress via Helm — the plan before any of it exists yet.
If you have http and https ingresses with the same hostname -> Don't use F5 OSS nginx ingress controller!24 February 2026
Update #2 of an AKS ingress migration saga: rolling back from F5's OSS NGINX Ingress after its strict host-collision rules broke same-hostname HTTP+HTTPS routing, with Traefik lined up as the next (hopefully final) attempt.
Do you have custom redirect rules or TCP ports in AKS? -> Don't use AG with AGIC!19 February 2026
Why AGIC (and even the newer AGC) is a bad fit for anything beyond basic HTTP/HTTPS in AKS: it silently wipes any manually-added custom redirect rules, TCP listeners, or non-standard configs during reconciliation, even with an AzureIngressProhibitedTargets CRD in place.
I got this working locally without AKS in like 20 minutes.26 December 2025
Twenty hours to take a SignalR setup that worked locally in 20 minutes and get it running in an AKS cluster behind an OIDC identity provider — CORS, a 401 on the websocket handshake, and long-polling working while raw websockets still didn't.