<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kenin Kujovic</title>
    <link>https://keninkujovic.com/blog</link>
    <description>Software engineering articles and thoughts by Kenin Kujovic</description>
    <language>en</language>
    <atom:link href="https://keninkujovic.com/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title><![CDATA[Renovate Opened 40 MRs, 6 Are Red: Now What?]]></title>
      <link>https://keninkujovic.com/blog/renovate-mr-breaks-build</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/renovate-mr-breaks-build</guid>
      <description><![CDATA[Renovate MR breaks your build? A practical triage workflow for failed Renovate pipelines on self-hosted GitLab, plus config that keeps the red ones manageable.]]></description>
      <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Server-Driven UI: Describe Interfaces as Data, Render Them Natively]]></title>
      <link>https://keninkujovic.com/blog/server-driven-ui</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/server-driven-ui</guid>
      <description><![CDATA[Most product screens are compositions of the same few components. Server-driven UI describes them as data and lets each platform render natively.]]></description>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Zero-Downtime Migrations: Expand and Contract Explained]]></title>
      <link>https://keninkujovic.com/blog/expand-and-contract-migrations</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/expand-and-contract-migrations</guid>
      <description><![CDATA[How to ship schema changes with zero downtime using the expand and contract pattern. A practical walk-through of the three phases with real code.]]></description>
      <pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Code Is Only Half the Job]]></title>
      <link>https://keninkujovic.com/blog/code-is-only-half-the-job</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/code-is-only-half-the-job</guid>
      <description><![CDATA[Writing code is easy. Writing code someone can actually maintain six months from now is where most projects fall apart.]]></description>
      <pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[You Can't Avoid Cognitive Biases. Catch Them Instead.]]></title>
      <link>https://keninkujovic.com/blog/cognitive-biases</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/cognitive-biases</guid>
      <description><![CDATA[The most common cognitive biases that affect your judgment and decision-making, and how recognizing them gives you an edge.]]></description>
      <pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Next.js Sitemap for Static Export: The force-static Solution]]></title>
      <link>https://keninkujovic.com/blog/nextjs-static-sitemap</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/nextjs-static-sitemap</guid>
      <description><![CDATA[Generate sitemap.xml for Next.js static exports using force-static mode. No server required. Works with Cloudflare Pages, Netlify, Vercel, and GitHub Pages.]]></description>
      <pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Patch Container Vulnerabilities in Seconds Without Rebuilding Images]]></title>
      <link>https://keninkujovic.com/blog/patch-container-vulnerabilities-trivy-copa</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/patch-container-vulnerabilities-trivy-copa</guid>
      <description><![CDATA[Learn how to automatically patch OS vulnerabilities in container images using Trivy and Copa without rebuilding. Fix security issues in seconds, not hours.]]></description>
      <pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[I Leaked My AWS Keys to GitHub. Rewriting Git History Wasn't Enough]]></title>
      <link>https://keninkujovic.com/blog/fix-leaked-secrets-git</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/fix-leaked-secrets-git</guid>
      <description><![CDATA[Complete guide to fixing leaked secrets in git. Learn why git-filter-repo alone won't save you and what you actually need to do when credentials leak.]]></description>
      <pubDate>Thu, 08 Jan 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Profile Go Code with Flamegraphs: A Practical pprof Guide]]></title>
      <link>https://keninkujovic.com/blog/flamegraphs</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/flamegraphs</guid>
      <description><![CDATA[Profile Go programs with pprof and flamegraphs. Read CPU profiles visually, find real bottlenecks, and verify your fixes with worked examples.]]></description>
      <pubDate>Fri, 14 Nov 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[SemVer Explained: A Practical Guide to Semantic Versioning]]></title>
      <link>https://keninkujovic.com/blog/semantic-versioning</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/semantic-versioning</guid>
      <description><![CDATA[What MAJOR.MINOR.PATCH really means, when to bump each, how ^ and ~ version ranges work, and the SemVer mistakes that quietly break builds.]]></description>
      <pubDate>Fri, 03 Jan 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Daily Programming]]></title>
      <link>https://keninkujovic.com/blog/daily-programming</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/daily-programming</guid>
      <description><![CDATA[How 2.5 years of coding every day changed how I think.]]></description>
      <pubDate>Sun, 22 Dec 2024 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Infrastructure Naming Conventions That Scale (With Examples)]]></title>
      <link>https://keninkujovic.com/blog/infrastructure-naming-convention</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/infrastructure-naming-convention</guid>
      <description><![CDATA[A simple, scalable naming system for cloud infrastructure (env-region-site-role-instance), with worked examples and the reasoning behind each piece.]]></description>
      <pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[SSH Key Forwarding]]></title>
      <link>https://keninkujovic.com/blog/ssh-key-forwarding</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/ssh-key-forwarding</guid>
      <description><![CDATA[How to securely forward SSH keys through SSH connections]]></description>
      <pubDate>Wed, 11 Dec 2024 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Hello World]]></title>
      <link>https://keninkujovic.com/blog/hello-world</link>
      <guid isPermaLink="true">https://keninkujovic.com/blog/hello-world</guid>
      <description><![CDATA[Welcome to my blog]]></description>
      <pubDate>Wed, 20 Mar 2024 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>