Blog
Home

All tags

acaagcagent-frameworkagentic-aiagentic-codingagentic-patternsagicaiai-102ai-900ai-agentsai-assisted-developmentai-certifiedai-codingai-engineeringaideraiopsaksapiapplication-gatewayartificial-intelligenceasyncautogenautomationaz-104az-204az-305az-400az-900azureazure-administratorazure-aiazure-ai-foundryazure-app-configurationazure-certificationazure-communication-servicesazure-container-appsazure-developerazure-devopsazure-functionsazure-monitorazure-service-busazure-yamlbashblogblue-green-deploymentbytebytegocachingcalicocanary-deploymentcapacity-planningcareercareer-growthcert-managercertificationcertification-journeyci-cdckaclaudeclaude-codecloud-architectcloud-architecturecloud-certificationcloud-computingcloud-engineeringcloud-nativecloud-skillscloudflarecloudflare-accesscloudflare-workerscloudshellcode-reviewcoding-agentcontainer-appscontainer-networkingcontinuous-learningcosmos-dbcostcost-optimizationcpluspluscsharpd1de-haagse-hogeschooldebuggingdemodeployment-strategiesdeveloper-lifedevopsdockerdotnetefcoreembeddingsfeature-flagsflaskfoundry-localfrontendgamegenerative-aigitgithubgithub-actionsgithub-packagesgitopsgooglegoogle-family-linkhttpsimage-generationinfrastructure-as-codeingressinstagram-apiintelintel-arcintel-gpuipex-llmkuberneteslinkedinlinuxllamallmlocal-ailocal-llmmemory-leakmetamicrosoft-aimicrosoft-certificationmicrosoft-certifiedmicrosoft-learnmulti-agentmulti-agent-aimulti-pipeline-architecturenetworkingnginxnomic-embed-textoidcollamaopen-sourceopenh323openvinoparental-controlsperformancepersonal-websitephi3platform-engineeringplaywrightportfoliopowershellprivate-aiproduction-tipsproductivityprompt-engineeringpythonqwenqwen25race-conditionragreactretro-techsecuritysemantic-kernelserverlessside-projectsignalrsoftware-engineeringsolutions-architectsonarqubesqlsystems-integrationtcptech-learningtech-realityterraformtestingtiptraefiktroubleshootingtutorialsdojoultralyticsuxvector-searchvideovoipweb-developmentwebsocketswhizlabswindows-devworkersxunityoloyoutube

New articles: follow via RSS

Building an Instagram reply agent: the code was the easy part

3 October 2026

I built a small agent that drafts replies to Instagram Reel comments with Claude Haiku and posts them only after approval. Writing it took nine pull requests. Connecting my account to the Instagram API, plus one extra account to test with, took longer: a disabled account, errors that said "not available" or "wrong password" when they meant "too many attempts", and two Meta app settings that turn every comment into an empty list.

Three layers of caching in front of a container that scales to zero

26 September 2026

My blog's API is an Azure Container App that scales to zero, with a 30 second cold start. How three layers of caching keep readers from ever waiting on it: a stale-while-revalidate cache in a Cloudflare Worker, a durable KV fallback for Cloudflare's per-colo cache, and Cosmos DB Change Feed pushes so reads stop waking the container at all. With real monthly costs, and the trade-offs I accepted instead of solving.

Letting Claude Code push its own branch to GitHub

25 September 2026

In my Claude Code container for new projects, the repos live on GitHub and there are no secrets in their history. So there, Claude creates its own feature branch off master and pushes it, and I review and approve the pull request. The setup is the GitHub CLI in the image, git using it for credentials, and a fine-grained token that lives outside the image.

Getting Claude Code's commits out of the container with a fetch-only remote

25 September 2026

Claude Code works in a history-free copy of my brownfield repo, because the real repo still has old credentials in its history. Getting its commits back used to mean a temporary remote and a manual push every time. Now the real repo has a permanent, fetch-only remote pointing at Claude's copy: I fetch, branch off master and cherry-pick, and nothing ever flows back into the container.

Erasing credentials from git history: the third option

23 September 2026

My last post covered copying a brownfield project into a clean repo and cherry-picking real commits back, dodging the secret rather than dealing with it. There's a more direct third option: rewrite history and remove the secret from the repo itself with git filter-repo. Here's how, what it costs, and why I still rotate the credential anyway.