<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Urbalurba Infrastructure Stack Blog</title>
        <link>https://uis.sovereignsky.no/blog</link>
        <description>Urbalurba Infrastructure Stack Blog</description>
        <lastBuildDate>Fri, 13 Mar 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[One Human, Two AIs: Building an Open-Source Alternative to Azure]]></title>
            <link>https://uis.sovereignsky.no/blog/ai-development</link>
            <guid>https://uis.sovereignsky.no/blog/ai-development</guid>
            <pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We're building an open-source replacement for Azure's managed services — 30+ services — with a team of one human and two AI developers.]]></description>
            <content:encoded><![CDATA[<p>We're building an open-source replacement for Azure's managed services — 30+ services, from databases to AI to authentication — with a team of one human and two AI developers. Every feature starts as a written plan, gets implemented by one Claude Code session, and tested from scratch by another. Here's the workflow that makes it possible.</p>
<p><img decoding="async" loading="lazy" alt="Two Claude Code terminals side by side" src="https://uis.sovereignsky.no/assets/images/ai-development-tester-c99cd8a0b78d64992357dec8e5cdc3ac.png" width="1205" height="620" class="img_ev3q"></p>
<p><em>Left (blue terminal): The Contributor — editing code in the main repo after reviewing tester feedback. Right (black terminal): The Tester — has just verified that Backstage API entities show correct Kubernetes annotations, tested in a real browser, and is writing "PASS" results back to <code>talk.md</code> for the contributor to read.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-team">The Team<a href="https://uis.sovereignsky.no/blog/ai-development#the-team" class="hash-link" aria-label="Direct link to The Team" title="Direct link to The Team" translate="no">​</a></h2>
<p>Three participants, three roles:</p>
<ul>
<li class=""><strong>The Human</strong> — decides what to build, reviews plans, approves each phase, has the final say on everything</li>
<li class=""><strong>The Contributor</strong> (Claude Code) — works in the main repo, writes code, builds containers, creates plans, follows the human's direction</li>
<li class=""><strong>The Tester</strong> (Claude Code) — works in a separate directory, tests as a fresh user, reports issues and suggestions</li>
</ul>
<p>The human steers. The contributor implements. The tester verifies. The contributor and tester communicate through a shared markdown file called <code>talk.md</code> — no shared context, no shortcuts. The tester follows instructions exactly as a new user would.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="plans-before-code">Plans Before Code<a href="https://uis.sovereignsky.no/blog/ai-development#plans-before-code" class="hash-link" aria-label="Direct link to Plans Before Code" title="Direct link to Plans Before Code" translate="no">​</a></h2>
<p>Every feature starts as a plan, not code. When we say "add Backstage to UIS", Claude doesn't start writing manifests. It creates a <code>PLAN-*.md</code> file that breaks the work into phases with specific tasks, validation steps, and acceptance criteria.</p>
<p>For unclear problems, we start with an <code>INVESTIGATE-*.md</code> file instead — research first, then plan. The Backstage deployment started as an investigation that produced three separate plans: metadata enrichment, deployment, and API entities.</p>
<p>The plans live in the repo alongside the code:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">plans/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── active/      # Currently being worked on</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── backlog/     # Approved, waiting</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── completed/   # Done — kept as documentation</span><br></span></code></pre></div></div>
<p>This means every completed feature has a written record of what was built, why, what was tried, and what issues were found during testing. The <a class="" href="https://uis.sovereignsky.no/docs/ai-developer/plans/completed">completed plans</a> folder has over 60 of these.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-talk-protocol">The Talk Protocol<a href="https://uis.sovereignsky.no/blog/ai-development#the-talk-protocol" class="hash-link" aria-label="Direct link to The Talk Protocol" title="Direct link to The Talk Protocol" translate="no">​</a></h2>
<p>This is the part that catches the most bugs. The contributor writes test instructions in a shared <code>talk.md</code> file. The tester executes every step and reports back — including wrong URLs in documentation, rendering errors in UIs, and missing annotations on generated entities. These are UX issues that only surface when someone actually uses the system, and automated tests would never find them.</p>
<p>Over 24 talk sessions have been completed. See the <a class="" href="https://uis.sovereignsky.no/docs/ai-developer/TALK">Talk Protocol</a> documentation for the full format, rules, and a real session example.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-makes-this-work">What Makes This Work<a href="https://uis.sovereignsky.no/blog/ai-development#what-makes-this-work" class="hash-link" aria-label="Direct link to What Makes This Work" title="Direct link to What Makes This Work" translate="no">​</a></h2>
<p><strong>The human stays in control.</strong> Plans are reviewed before implementation starts. Each phase requires approval before the next one begins. Commits and PRs only happen when the human says so.</p>
<p><strong>Plans create alignment before code.</strong> All three participants know exactly what's being built and in what order. The human reviews a readable plan, not 500 lines of generated code.</p>
<p><strong>The tester has no implementation context.</strong> It only knows what the instructions say — exactly how a real user would experience the system.</p>
<p>The full workflow is documented in <a class="" href="https://uis.sovereignsky.no/docs/ai-developer/WORKFLOW">Workflow</a> and <a class="" href="https://uis.sovereignsky.no/docs/ai-developer/PLANS">Creating Plans</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-were-building">What We're Building<a href="https://uis.sovereignsky.no/blog/ai-development#what-were-building" class="hash-link" aria-label="Direct link to What We're Building" title="Direct link to What We're Building" translate="no">​</a></h2>
<p>The Urbalurba Infrastructure Stack (UIS) is an open-source developer platform that covers the same ground as Azure's managed services — but built entirely on open standards. PostgreSQL instead of Azure SQL, Authentik instead of Azure AD, Grafana/Prometheus/Loki instead of Azure Monitor, LiteLLM and OpenWebUI instead of Azure OpenAI, ArgoCD instead of Azure DevOps pipelines. Over 30 services, all deployable with <code>./uis deploy</code> and removable with <code>./uis undeploy</code>.
See <a class="" href="https://uis.sovereignsky.no/docs">how it works</a>.</p>
<p>See the full <a class="" href="https://uis.sovereignsky.no/docs/category/services">list of services</a>. Open standards mean no vendor lock-in. You can run the entire stack in Norway, in Germany, or anywhere else — on infrastructure you control. No data leaves the country unless you decide it should. For organizations that care about digital sovereignty, this is the difference between depending on a US hyperscaler's terms of service and actually owning your infrastructure.</p>
<p>Building a platform this broad with a team of three — one human and two AI sessions — is exactly why this workflow matters.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-numbers">The Numbers<a href="https://uis.sovereignsky.no/blog/ai-development#the-numbers" class="hash-link" aria-label="Direct link to The Numbers" title="Direct link to The Numbers" translate="no">​</a></h2>
<p>UIS currently has:</p>
<ul>
<li class=""><strong>30+ services</strong> deployed via <code>./uis deploy</code></li>
<li class=""><strong>60+ completed plans</strong> documenting every feature built</li>
<li class=""><strong>17 open investigations</strong> tracking future work</li>
<li class=""><strong>24 archived talk sessions</strong> of testing rounds</li>
<li class=""><strong>77 pull requests</strong> merged to main</li>
</ul>
<p>All of this was built through the plan → implement → test → fix cycle described above.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it-yourself">Try It Yourself<a href="https://uis.sovereignsky.no/blog/ai-development#try-it-yourself" class="hash-link" aria-label="Direct link to Try It Yourself" title="Direct link to Try It Yourself" translate="no">​</a></h2>
<p>The entire AI development workflow is documented and visible on this site:</p>
<ul>
<li class=""><a class="" href="https://uis.sovereignsky.no/docs/ai-developer">AI Developer Guide</a> — how the workflow works</li>
<li class=""><a class="" href="https://uis.sovereignsky.no/docs/ai-developer/WORKFLOW">Workflow</a> — step-by-step from idea to implementation</li>
<li class=""><a class="" href="https://uis.sovereignsky.no/docs/ai-developer/PLANS">Creating Plans</a> — plan templates and structure</li>
<li class=""><a class="" href="https://uis.sovereignsky.no/docs/ai-developer/TALK">Talk Protocol</a> — how the two-session testing works</li>
<li class=""><a class="" href="https://uis.sovereignsky.no/docs/ai-developer/plans-overview">Plans Overview</a> — browse all plans and investigations</li>
</ul>
<p>The plans, investigations, and talk protocol aren't specific to UIS. Any project can use this pattern: plan before you code, test with a fresh perspective, and keep written records of what was built and why.</p>]]></content:encoded>
            <category>ai</category>
            <category>development</category>
            <category>workflow</category>
        </item>
        <item>
            <title><![CDATA[Welcome to UIS]]></title>
            <link>https://uis.sovereignsky.no/blog/welcome</link>
            <guid>https://uis.sovereignsky.no/blog/welcome</guid>
            <pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Welcome to the Urbalurba Infrastructure Stack blog.]]></description>
            <content:encoded><![CDATA[<p>Welcome to the Urbalurba Infrastructure Stack blog.</p>
<p>UIS gives you a complete datacenter on your laptop. A local Kubernetes cluster with databases, AI services, observability, authentication, and more — all deployed with a single command.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-uis">What is UIS?<a href="https://uis.sovereignsky.no/blog/welcome#what-is-uis" class="hash-link" aria-label="Direct link to What is UIS?" title="Direct link to What is UIS?" translate="no">​</a></h2>
<p>UIS is a zero-friction developer platform built on Rancher Desktop. It provisions a fully working infrastructure stack so you can develop and test against production-like services without cloud dependencies.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-you-get">What you get<a href="https://uis.sovereignsky.no/blog/welcome#what-you-get" class="hash-link" aria-label="Direct link to What you get" title="Direct link to What you get" translate="no">​</a></h2>
<ul>
<li class=""><strong>Databases</strong> — PostgreSQL, MySQL, MongoDB, Redis, Elasticsearch, Qdrant</li>
<li class=""><strong>AI &amp; ML</strong> — OpenWebUI, Ollama, LiteLLM, Tika</li>
<li class=""><strong>Observability</strong> — Grafana, Prometheus, Loki, Tempo, OpenTelemetry</li>
<li class=""><strong>Identity</strong> — Authentik with SSO and forward auth</li>
<li class=""><strong>Analytics</strong> — JupyterHub, Spark, Unity Catalog</li>
<li class=""><strong>Management</strong> — pgAdmin, RedisInsight, ArgoCD</li>
<li class=""><strong>Networking</strong> — Tailscale, Cloudflare tunnels</li>
<li class=""><strong>Integration</strong> — Gravitee API Management, RabbitMQ</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting started<a href="https://uis.sovereignsky.no/blog/welcome#getting-started" class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">./uis start</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./uis deploy postgresql</span><br></span></code></pre></div></div>
<p>That's it. Check out the <a class="" href="https://uis.sovereignsky.no/docs/getting-started/overview">documentation</a> to learn more.</p>]]></content:encoded>
            <category>announcement</category>
        </item>
    </channel>
</rss>