<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>V for Vincent — Amp posts for Substack</title>
    <link>https://blog.vforvincent.info/</link>
    <description>Published Amp posts selected for manual import into Substack.</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 30 Aug 2026 12:07:16 +0800</lastBuildDate>
    <atom:link href="https://blog.vforvincent.info/substack.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Homelab, rebuilt — Part I: Why I modernized my homelab instead of upgrading it</title>
      <link>https://blog.vforvincent.info/posts/why-i-modernized-my-homelab-instead-of-upgrading-it/</link>
      <pubDate>Sun, 30 Aug 2026 12:07:16 +0800</pubDate>
      <guid>https://blog.vforvincent.info/posts/why-i-modernized-my-homelab-instead-of-upgrading-it/</guid>
      <category>Tech</category>
      <category>Amp</category>
      <category>Homelab</category>
      <category>Kubernetes</category>
      <description>Why I rebuilt my organically grown homelab as a modern platform designed for safer operations and AI-assisted development.</description>
      <content:encoded><![CDATA[<h2 id="in-this-series">In this series</h2>
<ol>
<li><a href="https://blog.vforvincent.info/posts/why-i-modernized-my-homelab-instead-of-upgrading-it/">Why I modernized my homelab instead of upgrading it</a> (this post)</li>
</ol>
<p>This is the start of a new series about rebuilding my homelab from the ground up. Later posts will cover the platform, applications, data and lessons from the journey. This first part is about the decision that shaped everything afterwards: I was not looking for a <em>like-for-like upgrade</em>. I wanted a <strong><u>full-scale modernization</u></strong>
.</p>
<figure>
    <img loading="lazy" src="https://blog.vforvincent.info/images/amp-multisession-hero.webp"
         alt="An engineer coordinates different AI coding sessions from a phone and laptop across cloud and homelab environments"/> <figcaption>
            <p>Amp let me coordinate different parts of the rebuild across devices and environments.</p>
        </figcaption>
</figure>

<p>I have written about <a href="https://blog.vforvincent.info/posts/homelab-intro/">my tiny yet powerful homelab</a> before. It started with four Raspberry Pis, a QNAP NAS and a small Lenovo PC. It grew into a useful collection of home applications and a playground where I could learn Kubernetes, networking and storage.</p>
<p>It also grew <em>one experiment at a time</em>. I would get an application running and then move on to the next idea. After a few years, some applications were stuck on old dependencies, deployment instructions existed only in my head, and documentation had drifted away from reality. A change in one place could have consequences somewhere completely unexpected.</p>
<p>My Dependabot page told the same story. I had accumulated update pull requests that I simply had no idea how to resolve safely. The backlog had grown to the point where it became easier to ignore the list than to work out where to begin.</p>
<figure>
    <img loading="lazy" src="https://blog.vforvincent.info/images/dependabot-backlog-api.svg"
         alt="An anonymized GitHub pull request page showing the legacy Dependabot queue with zero open and 33 closed pull requests"/> <figcaption>
            <p>I closed 33 legacy Dependabot pull requests on 17 August. Dependabot opened a fresh batch three days later, as automation should.</p>
        </figcaption>
</figure>

<blockquote>
<p><strong>A small but satisfying footnote:</strong> I asked Amp to close the entire legacy batch in one go. When Dependabot opened another batch, I came back today and asked Amp to decline all of those too—the modernization meant I no longer needed them.</p>
</blockquote>
<p><a href="https://blog.vforvincent.info/posts/amp-helped-recover-homelab-network-outage/">A power trip that took down my homelab network</a> provided another warning. Amp helped trace the failure across the network and Kubernetes, but the incident reminded me how difficult an organically grown system can be to reason about when something goes wrong.</p>
<p>I could have installed a newer Kubernetes version, restored all the old workloads and called the job complete. That would have been faster at the beginning, but it would also have preserved every outdated dependency, hidden assumption and awkward workflow. I would have ended up with a newer cluster carrying exactly the same baggage.</p>
<p>So I decided to treat the old homelab as <strong>a source of requirements, not as a template</strong>.</p>
<p>The useful applications and important data would stay. Everything else had to justify its place. Old dependencies would be upgraded or removed, applications could be rebuilt when incremental upgrades no longer made sense, and important operational knowledge would move out of my head and into the repository.</p>
<p>This finally gave me a way to <strong>clear the legacy Dependabot backlog</strong>. Closing that old batch was a satisfying sign that this was real modernization rather than a cosmetic upgrade. New updates will always arrive, but now I have a much better foundation for dealing with them.</p>
<p>I also wanted the repository to be <strong>friendly to AI coding agents</strong>. That does not mean allowing an AI to make uncontrolled infrastructure changes. It means creating an environment where an agent can understand the system, follow paved paths, run the right checks and know when it must stop and ask me.</p>
<p>This closely matches Amp&rsquo;s article about <a href="https://ampcode.com/notes/putting-an-agent-in-an-orb">putting an agent in an Orb</a>: an effective development environment should be <strong>designed for agents from the start</strong>, not adapted as an afterthought. <a href="https://ampcode.com/news/agents-in-orbs">Agents in Orbs</a> and <a href="https://ampcode.com/news/from-agent-to-agent">agent-to-agent communication</a> arrived at the right time. They made it practical to divide the rebuild into focused pieces and involve the real homelab only when verification required it.</p>
<p>Amp did much of the heavy lifting, but it <strong><u>did not replace engineering judgment</u></strong>
. I still chose the direction, decided which risks were acceptable and approved operations affecting real services or data. The agents investigated, implemented, tested and kept detailed records. That combination let me move faster without lowering the quality bar.</p>
<p>More importantly, it changed what felt possible. Instead of spending my time keeping old components alive, I could improve existing applications and try new ideas. The homelab was becoming <em>a platform for experimentation again</em>, rather than a collection of dependencies I was afraid to touch.</p>
<p>In the next post I will start with the foundation of the rebuild: the new Kubernetes control plane and the decisions that went into building it safely.</p>
<hr><p><em>Originally published on <a href="https://blog.vforvincent.info/posts/why-i-modernized-my-homelab-instead-of-upgrading-it/">V for Vincent</a>.</em></p>]]></content:encoded>
    </item>
    <item>
      <title>How Amp saved my homelab after a power trip</title>
      <link>https://blog.vforvincent.info/posts/amp-helped-recover-homelab-network-outage/</link>
      <pubDate>Mon, 17 Aug 2026 23:04:10 +0800</pubDate>
      <guid>https://blog.vforvincent.info/posts/amp-helped-recover-homelab-network-outage/</guid>
      <category>Tech</category>
      <category>Amp</category>
      <category>Homelab</category>
      <category>Networking</category>
      <description>&lt;p&gt;I have written about &lt;a href=&#34;/posts/homelab-intro/&#34;&gt;my tiny yet powerful homelab&lt;/a&gt; before. It runs quite a few things for my home, including Pi-hole and a Kubernetes cluster, so when its network goes down I notice it very quickly!&lt;/p&gt;
&lt;p&gt;This time the trouble started with an unexpected power trip. After I restored the power, the homelab network did not come back. There was no obvious error anywhere. My routers were online, the modem had reconnected and all the usual lights looked normal. But services were still unreachable and my Kubernetes control plane could not start properly.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I have written about <a href="https://blog.vforvincent.info/posts/homelab-intro/">my tiny yet powerful homelab</a> before. It runs quite a few things for my home, including Pi-hole and a Kubernetes cluster, so when its network goes down I notice it very quickly!</p>
<p>This time the trouble started with an unexpected power trip. After I restored the power, the homelab network did not come back. There was no obvious error anywhere. My routers were online, the modem had reconnected and all the usual lights looked normal. But services were still unreachable and my Kubernetes control plane could not start properly.</p>
<p>I started spot-checking the network configuration and noticed that the DHCP advertisement was wrong. One of my Ubuntu VMs had received a completely different IP address, gateway and DNS server. That was a useful clue, but I still had no idea which device was sending it or why.</p>
<p>So I asked <a href="https://ampcode.com/">Amp</a> to investigate.</p>
<p>Amp connected to the VM over SSH and checked its addresses, routes and DHCP lease. It then went through the old system logs and found a very clear before and after. Before the power trip, the VM always received its reserved address from my main router. After the power came back, another device started giving it two-minute leases with the wrong gateway and DNS server.</p>
<p>At first I suspected Pi-hole, because it can also run a DHCP server. Amp checked its configuration and backups and ruled that out. It then identified the unexpected DHCP server as one of my TP-Link powerline extenders.</p>
<p>It turned out that the extender has a feature called Smart DHCP. If it cannot find another DHCP server, it starts one by itself to make initial setup easier. During the recovery from the power trip it could not see the router&rsquo;s DHCP service, so it began handing out its own network configuration. Everything looked online, but devices were quietly being told to use the wrong gateway and DNS server.</p>
<p>Amp also worked out that the Kubernetes failure was not a separate problem. The control plane was configured with the VM&rsquo;s reserved address, but that address no longer existed on the VM. Kubernetes quite rightly refused to start its networking.</p>
<p>After I disabled Smart DHCP on the powerline extender and rebooted the VM, Amp checked everything again. The lease was coming from the correct router, the VM had its reserved address and gateway, Pi-hole was resolving DNS, and every Kubernetes node was healthy again.</p>
<p>Without Amp, I would probably have spent hours rebooting devices and changing settings one by one. Instead, it followed the evidence from DHCP to Linux networking, Pi-hole and finally Kubernetes, then made sure the fix really worked.</p>
<p>What a gem! This is exactly the sort of problem where an AI coding agent is surprisingly useful. It did not just give me a list of commands to try. It investigated the actual machines, connected all the symptoms and stayed with the problem until my homelab was back.</p>
<p>Also, stay tuned! A version 2 build of my homelab is already in progress. I will write more about the new setup, what I am changing and everything I learn from rebuilding it from scratch.</p>
<hr><p><em>Originally published on <a href="https://blog.vforvincent.info/posts/amp-helped-recover-homelab-network-outage/">V for Vincent</a>.</em></p>]]></content:encoded>
    </item>
  </channel>
</rss>
