<svg width="100%" viewBox="0 0 1000 200" role="img" xmlns="http://www.w3.org/2000/svg">
  <title>Cloud deploy — push to main, it ships</title>
  <desc>A push to main triggers deploy-cloud.yml on a self-hosted runner that lives on the VPS, which rebuilds the compose stack and reloads Caddy via a scoped sudo wrapper.</desc>
  <style>
    text{font-family:"Anthropic Sans",-apple-system,system-ui,"Segoe UI",sans-serif}
    .t{font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central}
    .s{font-size:12px;text-anchor:middle;dominant-baseline:central}
    .lbl{font-size:11px;fill:#9c9a92;text-anchor:middle}
    rect{stroke-width:.5}
    .neutral{fill:#444441;stroke:#b4b2a9} .nt{fill:#d3d1c7} .ns{fill:#b4b2a9}
    .purple{fill:#3c3489;stroke:#afa9ec}  .pt{fill:#ceccf6} .ps{fill:#afa9ec}
    .blue{fill:#1f3b7a;stroke:#8aaef0}    .bt{fill:#cfdcf4} .bs{fill:#8aaef0}
    .green{fill:#27500a;stroke:#97c459}   .gt{fill:#c0dd97} .gs{fill:#97c459}
    .arrow{fill:none;stroke:#9c9a92;stroke-width:1.5}
    .arrow-ok{fill:none;stroke:#1d9e75;stroke-width:1.5}
  </style>
  <defs>
    <marker id="a" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
      <path d="M2 1L8 5L2 9" fill="none" stroke="context-stroke" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
    </marker>
  </defs>

  <rect class="neutral" x="20"  y="80" width="160" height="60" rx="8"/>
  <text class="t nt" x="100" y="104">git push → main</text>
  <text class="s ns" x="100" y="122">commits to cloud/**</text>

  <rect class="purple" x="210" y="80" width="180" height="60" rx="8"/>
  <text class="t pt" x="300" y="104">GitHub Actions</text>
  <text class="s ps" x="300" y="122">deploy-cloud.yml</text>

  <rect class="blue" x="420" y="80" width="200" height="60" rx="8"/>
  <text class="t bt" x="520" y="104">self-hosted runner</text>
  <text class="s bs" x="520" y="122">lives on the VPS</text>

  <rect class="blue" x="650" y="40" width="180" height="60" rx="8"/>
  <text class="t bt" x="740" y="64">compose build + up -d</text>
  <text class="s bs" x="740" y="82">rebuilds sudo-api etc</text>

  <rect class="green" x="650" y="120" width="180" height="60" rx="8"/>
  <text class="t gt" x="740" y="144">sudo-deploy-caddy.sh</text>
  <text class="s gs" x="740" y="162">validate + graceful reload</text>

  <rect class="neutral" x="860" y="80" width="120" height="60" rx="8"/>
  <text class="t nt" x="920" y="104">live</text>
  <text class="s ns" x="920" y="122">sudohomes.com</text>

  <path class="arrow"    d="M 180 110 L 208 110" marker-end="url(#a)"/>
  <path class="arrow"    d="M 390 110 L 418 110" marker-end="url(#a)"/>
  <path class="arrow"    d="M 620 100 L 648  70" marker-end="url(#a)"/>
  <path class="arrow"    d="M 620 120 L 648 150" marker-end="url(#a)"/>
  <path class="arrow-ok" d="M 830  70 C 855  70, 855 110, 858 110" marker-end="url(#a)"/>
  <path class="arrow-ok" d="M 830 150 C 855 150, 855 110, 858 110" marker-end="url(#a)"/>
</svg>
