Ctrl K
ComunidadGuías…

mockups/repo.html

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
<!DOCTYPE html>
<html lang="en" class="dark">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>mkappworks/cloudzilla — Cloudzilla</title>
<link rel="stylesheet" href="/assets/tailwind.css" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500&family=Geist:wght@400;500;600&display=swap" rel="stylesheet" />
</head>
<body class="min-h-screen flex flex-col antialiased font-sans">
<a href="#main-content" class="skip-link">Skip to main content</a>

<div id="cz-header" data-repo-tab="code"></div>

<main id="main-content" tabindex="-1" class="max-w-[1400px] mx-auto px-6 pt-6 pb-20 flex-1 w-full">
  <div class="space-y-6">

    <section class="flex flex-wrap items-start justify-between gap-4" aria-labelledby="repo-title">
      <div class="min-w-0">
        <h1 id="repo-title" class="text-xl tracking-tight font-medium mb-1.5 flex items-center gap-2.5 flex-wrap">
          <a href="profile.html" class="text-muted-foreground hover:underline">mkappworks</a>
          <span class="text-muted-foreground" aria-hidden="true">/</span>
          <a href="repo.html" class="font-semibold hover:underline">cloudzilla</a>
          <span class="inline-flex items-center text-[10px] px-1.5 py-0.5 bg-muted border border-border rounded-sm text-muted-foreground">
            Public
          </span>
        </h1>
        <p class="text-[13px] text-muted-foreground">Self-hosted Git forge in Go: issues, pull requests, code review and CI, with pure-Go git transport.</p>
      </div>

      <div class="flex items-center gap-1.5 shrink-0" role="group" aria-label="Repository actions">
        <div id="watch-button" class="flex border border-border rounded-md overflow-hidden">
          <button type="button" aria-pressed="false" class="h-8 px-3 text-[13px] inline-flex items-center gap-1.5 hover:bg-accent">
            <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>
            <span data-label>Watch</span>
          </button>
          <span data-count class="h-8 inline-flex items-center px-3 text-[13px] font-mono border-l border-border text-muted-foreground">6</span>
        </div>

        <div id="star-button" class="flex border border-border rounded-md overflow-hidden">
          <button type="button" aria-pressed="false" class="h-8 px-3 text-[13px] inline-flex items-center gap-1.5 hover:bg-accent">
            <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
            <span data-label>Star</span>
          </button>
          <a href="stargazers.html" data-count class="h-8 inline-flex items-center px-3 text-[13px] font-mono border-l border-border hover:bg-accent" aria-label="View 142 stargazers">142</a>
        </div>

        <div id="fork-button" class="flex border border-border rounded-md overflow-hidden">
          <a href="repo_fork.html" class="h-8 px-3 text-[13px] inline-flex items-center gap-1.5 hover:bg-accent">
            <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><circle cx="6" cy="3" r="3"></circle><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="21" r="3"></circle><path d="M6 6v9a6 6 0 006 6v0M9 6h6a3 3 0 003-3"></path></svg>
            Fork
          </a>
          <span class="h-8 inline-flex items-center px-3 text-[13px] font-mono border-l border-border text-muted-foreground">17</span>
        </div>
      </div>
    </section>

    <div class="grid lg:grid-cols-[1fr_320px] gap-8">

      <div class="flex flex-col gap-6 min-w-0" data-finder-scope>
        <div class="flex flex-wrap items-center gap-2">
    <div class="relative" data-dropdown>
      <button type="button" data-dropdown-btn aria-expanded="false" aria-haspopup="menu" aria-label="Switch branch or tag, current: main" class="h-8 px-3 text-[13px] text-foreground border border-border rounded-md hover:bg-accent inline-flex items-center gap-1.5">
        <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><circle cx="6" cy="3" r="3"></circle><circle cx="18" cy="3" r="3"></circle><circle cx="12" cy="21" r="3"></circle><path d="M6 6v3a3 3 0 003 3h6a3 3 0 003-3V6M12 12v6"></path></svg>
        <span class="font-medium">main</span>
        <svg class="text-muted-foreground" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><path d="M7 10l5 5 5-5"></path></svg>
      </button>
      <div hidden data-dropdown-panel role="menu" aria-label="Switch branches and tags" class="absolute left-0 top-full mt-1.5 z-50 w-[300px] rounded-md border border-border bg-popover text-popover-foreground shadow-md p-1">
        <div class="px-1.5 pb-1.5">
          <label for="branch-filter" class="sr-only">Find a branch or tag</label>
          <input id="branch-filter" type="search" data-ref-filter placeholder="Find a branch or tag…" class="w-full h-7 px-2.5 text-[12px] bg-card border border-border rounded-md placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring"/>
        </div>
        <p class="px-2.5 pt-1 pb-0.5 text-[10px] uppercase tracking-wider text-muted-foreground font-medium">Branches</p>
        <a href="repo.html" role="menuitem" data-ref="main" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs hover:bg-accent bg-accent">
          <span class="flex-1 font-mono text-[12px] truncate">main</span>
          <span class="text-[10px] text-muted-foreground">default</span>
        </a>
        <a href="repo.html" role="menuitem" data-ref="feat/phase-12.3-discussions" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs hover:bg-accent">
          <span class="flex-1 font-mono text-[12px] truncate">feat/phase-12.3-discussions</span>
          
        </a>
        <a href="repo.html" role="menuitem" data-ref="fix/contributor-stats-sha-dedup" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs hover:bg-accent">
          <span class="flex-1 font-mono text-[12px] truncate">fix/contributor-stats-sha-dedup</span>
          
        </a>
        <p class="px-2.5 pt-1 pb-0.5 text-[10px] uppercase tracking-wider text-muted-foreground font-medium">Tags</p>
        <a href="repo.html" role="menuitem" data-ref="v0.2.0" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs hover:bg-accent">
          <span class="flex-1 font-mono text-[12px] truncate">v0.2.0</span>
          
        </a>
        <a href="repo.html" role="menuitem" data-ref="v0.1.0" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs hover:bg-accent">
          <span class="flex-1 font-mono text-[12px] truncate">v0.1.0</span>
          
        </a>
        <div role="separator" class="my-1 h-px bg-border"></div>
        <a href="refs.html" role="menuitem" class="flex items-center gap-2 px-2.5 py-1.5 rounded-xs text-[13px] hover:bg-accent">View all branches</a>
      </div>
    </div>
          <span class="text-[11px] text-muted-foreground">
            <a href="refs.html" class="hover:underline">3 branches</a>
            <span aria-hidden="true">·</span>
            <a href="refs.html#tags-list" class="hover:underline">2 tags</a>
          </span>

          <div class="ml-auto flex items-center gap-1.5">
            <div class="relative">
              <label for="file-finder" class="sr-only">Go to file</label>
              <input id="file-finder" type="search" placeholder="Go to file" class="w-48 h-8 pl-3 pr-9 text-[13px] bg-card border border-border rounded-md placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring"/>
              <kbd class="font-mono absolute right-2 top-1.5 text-[10px] px-1.5 py-0.5 bg-muted border border-border rounded-sm text-muted-foreground" aria-hidden="true">T</kbd>
            </div>

            <div class="relative" data-dropdown>
              <button type="button" data-dropdown-btn aria-expanded="false" aria-haspopup="menu" class="h-8 px-3 text-[13px] border border-border rounded-md hover:bg-accent inline-flex items-center gap-1.5">
                <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M12 5v14M5 12h14"></path></svg>
                Add file
                <svg class="text-muted-foreground" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><path d="M7 10l5 5 5-5"></path></svg>
              </button>
              <div hidden data-dropdown-panel role="menu" aria-label="Add file" class="absolute right-0 top-full mt-1.5 z-50 min-w-[12rem] rounded-md border border-border bg-popover text-popover-foreground shadow-md p-1 text-sm">
                <a href="new_file.html" role="menuitem" class="flex items-center gap-2 px-2 py-1.5 rounded-xs hover:bg-accent">
                  <svg class="text-muted-foreground" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="12" y1="11" x2="12" y2="17"></line><line x1="9" y1="14" x2="15" y2="14"></line></svg>
                  Create new file
                </a>
                <a href="new_file.html#upload" role="menuitem" class="flex items-center gap-2 px-2 py-1.5 rounded-xs hover:bg-accent">
                  <svg class="text-muted-foreground" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg>
                  Upload files
                </a>
              </div>
            </div>

            <div class="relative" data-dropdown data-clone>
              <button type="button" data-dropdown-btn aria-expanded="false" aria-haspopup="dialog" class="h-8 px-3 text-[13px] bg-primary text-primary-foreground rounded-md hover:bg-primary/90 font-medium inline-flex items-center gap-1.5">
                <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg>
                Clone
                <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><path d="M7 10l5 5 5-5"></path></svg>
              </button>
              <div hidden data-dropdown-panel role="dialog" aria-label="Clone this repository" class="absolute right-0 top-full mt-1.5 z-50 w-[340px] rounded-md border border-border bg-popover text-popover-foreground shadow-md p-3">
                <div class="flex items-center gap-0.5 mb-2.5 p-0.5 bg-muted border border-border rounded-md" role="tablist" aria-label="Clone protocol">
                  <button type="button" role="tab" data-proto="https" aria-selected="true" class="flex-1 px-2.5 py-1 rounded-sm text-[12px] bg-card text-foreground shadow-xs">HTTPS</button>
                  <button type="button" role="tab" data-proto="ssh" aria-selected="false" class="flex-1 px-2.5 py-1 rounded-sm text-[12px] text-muted-foreground hover:text-foreground">SSH</button>
                </div>
                <label for="clone-url" class="sr-only">Clone URL</label>
                <div class="flex items-center gap-1.5">
                  <input id="clone-url" type="text" readonly value="http://localhost:8080/mkappworks/cloudzilla.git" class="flex-1 min-w-0 h-8 px-2.5 text-[12px] font-mono bg-card border border-border rounded-md text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring"/>
                  <button type="button" data-copy-url class="h-8 w-8 grid place-items-center border border-border rounded-md hover:bg-accent shrink-0" aria-label="Copy clone URL">
                    <svg data-icon-copy width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg>
                    <svg data-icon-done hidden class="text-success" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" aria-hidden="true"><path d="M20 6L9 17l-5-5"></path></svg>
                  </button>
                </div>
                <p class="text-[11px] text-muted-foreground mt-2">Clone with Git over HTTPS or SSH.</p>
                <div role="separator" class="my-2 h-px bg-border"></div>
                <a href="#" data-download class="flex items-center gap-2 px-2 py-1.5 rounded-xs text-[13px] hover:bg-accent">
                  <svg class="text-muted-foreground" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
                  Download ZIP
                </a>
              </div>
            </div>
          </div>
        </div>

        <section data-files class="rounded-md border border-border bg-card overflow-hidden" aria-labelledby="files-heading">
          <h2 id="files-heading" class="sr-only">Files at main</h2>
          <div class="px-4 py-2.5 border-b border-border flex items-center gap-3 text-[12px] bg-muted/40">
            <span class="inline-grid place-items-center rounded-full bg-muted border border-border font-medium text-muted-foreground h-5 w-5 text-[10px]" aria-hidden="true">MK</span>
            <a href="profile.html" class="font-medium hover:underline truncate">Malith Kuruppu</a>
            <a href="commit.html" class="text-muted-foreground hover:underline truncate flex-1 min-w-0">feat: add publish step to promote draft releases to published</a>
            <a href="commit.html" class="font-mono text-muted-foreground hover:underline shrink-0">420b44b</a>
            <span class="text-muted-foreground shrink-0">
              <time datetime="2026-05-13T11:00:00Z">13 May 26 11:00 UTC</time>
            </span>
            <a href="commits.html" class="font-mono text-[12px] text-muted-foreground hover:underline shrink-0">245 commits</a>
          </div>
          <table class="w-full text-left">
            <caption class="sr-only">Repository files at main, directories first</caption>
            <colgroup>
              <col style="width:28px"/>
              <col/>
              <col style="width:50%"/>
              <col style="width:120px"/>
            </colgroup>
            <thead class="sr-only">
              <tr>
                <th scope="col">Type</th>
                <th scope="col">Name</th>
                <th scope="col">Last commit</th>
                <th scope="col">Updated</th>
              </tr>
            </thead>
            <tbody>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg style="color:#6ea8fe" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="tree.html" class="text-[13px] hover:underline">.github</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">ci: set up release-please pipeline and branch protection scaffolding (#30)</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">1w</time>
              </td>
            </tr>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg style="color:#6ea8fe" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="tree.html" class="text-[13px] hover:underline">cmd</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">feat: add the cz remote client (#41)</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">3w</time>
              </td>
            </tr>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg style="color:#6ea8fe" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="tree.html" class="text-[13px] hover:underline">docs</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">docs: refresh README with phase 15 features</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">2d</time>
              </td>
            </tr>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg style="color:#6ea8fe" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="tree.html" class="text-[13px] hover:underline">internal</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">feat: add publish step to promote draft releases to published</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">2h</time>
              </td>
            </tr>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg style="color:#6ea8fe" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="tree.html" class="text-[13px] hover:underline">tailwind</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">tech: move to Tailwind v4 (#38)</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">1mo</time>
              </td>
            </tr>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg class="text-muted-foreground" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="blob.html" class="text-[13px] hover:underline">.gitignore</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">chore: ignore .worktrees/</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">2mo</time>
              </td>
            </tr>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg class="text-muted-foreground" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="blob.html" class="text-[13px] hover:underline">CLAUDE.md</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">docs: document the dev build tag</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">4d</time>
              </td>
            </tr>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg class="text-muted-foreground" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="blob.html" class="text-[13px] hover:underline">Makefile</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">tech: add test-integration target</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">3w</time>
              </td>
            </tr>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg class="text-muted-foreground" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="blob.html" class="text-[13px] hover:underline">README.md</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">docs: refresh README with phase 15 features</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">2d</time>
              </td>
            </tr>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg class="text-muted-foreground" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="blob.html" class="text-[13px] hover:underline">go.mod</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">fix: update dependencies in go.mod and go.sum for compatibility and security</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">4d</time>
              </td>
            </tr>
            <tr class="border-b border-border last:border-b-0 hover:bg-muted/40">
              <td class="px-4 py-2 w-8"><svg class="text-muted-foreground" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg></td>
              <th scope="row" class="px-4 py-2 font-normal">
                <a href="blob.html" class="text-[13px] hover:underline">go.sum</a>
              </th>
              <td class="px-4 py-2 text-[12px] text-muted-foreground truncate">fix: update dependencies in go.mod and go.sum for compatibility and security</td>
              <td class="px-4 py-2 text-[12px] text-muted-foreground text-right font-mono">
                <time datetime="2026-05-13T09:00:00Z">4d</time>
              </td>
            </tr>
            </tbody>
          </table>
        </section>

        <section data-finder-results hidden class="rounded-md border border-border bg-card overflow-hidden" aria-label="File search results">
          <a href="blob.html" data-path="claude.md" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">CLAUDE.md</span>
          </a>
          <a href="blob.html" data-path="makefile" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">Makefile</span>
          </a>
          <a href="blob.html" data-path="readme.md" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">README.md</span>
          </a>
          <a href="blob.html" data-path="go.mod" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">go.mod</span>
          </a>
          <a href="blob.html" data-path="go.sum" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">go.sum</span>
          </a>
          <a href="blob.html" data-path="cmd/server/main.go" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">cmd/server/main.go</span>
          </a>
          <a href="blob.html" data-path="docs/access-control.md" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">docs/access-control.md</span>
          </a>
          <a href="blob.html" data-path="docs/git-transport.md" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">docs/git-transport.md</span>
          </a>
          <a href="blob.html" data-path="internal/handler/repo_handler.go" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">internal/handler/repo_handler.go</span>
          </a>
          <a href="blob.html" data-path="internal/router/router.go" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">internal/router/router.go</span>
          </a>
          <a href="blob.html" data-path="internal/service/code_service.go" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">internal/service/code_service.go</span>
          </a>
          <a href="blob.html" data-path="internal/view/pages/repo.templ" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">internal/view/pages/repo.templ</span>
          </a>
          <a href="blob.html" data-path="tailwind/input.css" class="flex items-center gap-2 px-4 py-1.5 text-[13px] border-b border-border last:border-b-0 hover:bg-muted/40">
            <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <span class="font-mono truncate">tailwind/input.css</span>
          </a>
          <p data-finder-empty hidden class="px-4 py-8 text-center text-[12px] text-muted-foreground">No files match your search.</p>
        </section>

        <article data-readme class="rounded-md border border-border bg-card overflow-hidden" aria-labelledby="readme-heading">
          <header class="px-5 py-3 border-b border-border bg-muted flex items-center gap-2">
            <svg class="text-muted-foreground" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg>
            <h2 id="readme-heading" class="text-[13px] font-medium">
              README.md
            </h2>
          </header>
          <div class="prose max-w-none dark:prose-invert px-7 py-6">
            <h1>Cloudzilla</h1>
            <p>A self-hosted Git forge built in Go with Templ and HTMX. Issues, pull requests, code review, and CI integration, without the bloat.</p>

            <h2>Quickstart</h2>
            <pre><code>git clone https://cloudzilla.dev/mkappworks/cloudzilla.git
cd cloudzilla
make setup-tailwind
make migrate
make dev</code></pre>
            <p>Open <a href="http://localhost:8080">http://localhost:8080</a> and you'll land on the setup wizard.</p>

            <h2>Architecture</h2>
            <ul>
              <li><strong>Backend</strong>: Go, chi router, sqlx, go-git, cobra CLI</li>
              <li><strong>Frontend</strong>: Templ, HTMX for partial updates, Alpine.js, Tailwind CSS</li>
              <li><strong>DB</strong>: PostgreSQL</li>
              <li><strong>Git transport</strong>: HTTP smart protocol and SSH server, both pure Go with no <code>git</code> binary required</li>
            </ul>

            <h2>Contributing</h2>
            <p>See <a href="blob.html">CONTRIBUTING.md</a> for the development workflow. PRs welcome; check the roadmap in <a href="blob.html">docs/ROADMAP.md</a> for in-flight work.</p>
          </div>
        </article>
      </div>

      <aside class="space-y-8 min-w-0" aria-label="About this repository">
        <section aria-labelledby="about-heading">
          <h2 id="about-heading" class="text-[13px] font-medium mb-3 flex items-center justify-between">
            <span>About</span>
            <button type="button" data-open-dialog="repo-edit-modal" class="text-muted-foreground hover:text-foreground" aria-haspopup="dialog" aria-label="Edit repository details">
              <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><path d="M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 113 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg>
            </button>
          </h2>
          <p class="text-[13px] text-muted-foreground mb-4 leading-relaxed">Self-hosted Git forge in Go: issues, pull requests, code review and CI, with pure-Go git transport.</p>

          <dl class="space-y-2 text-[12px] mb-4">
            <div class="flex items-center gap-2">
              <dt class="sr-only">Website</dt>
              <svg class="text-muted-foreground shrink-0" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"></circle><line x1="2" y1="12" x2="22" y2="12"></line><path d="M12 2a15.3 15.3 0 010 20M12 2a15.3 15.3 0 000 20"></path></svg>
              <dd><a href="https://cloudzilla.dev" rel="noopener noreferrer" class="text-primary hover:underline">cloudzilla.dev</a></dd>
            </div>
            <div class="flex items-center gap-2">
              <dt class="sr-only">License</dt>
              <svg class="text-muted-foreground shrink-0" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2"></path><rect x="8" y="2" width="8" height="4" rx="1"></rect></svg>
              <dd class="text-muted-foreground">BSL 1.1 license</dd>
            </div>
            <div class="flex items-center gap-2">
              <dt class="sr-only">Activity</dt>
              <svg class="text-muted-foreground shrink-0" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg>
              <dd class="text-muted-foreground">
                Last commit
                <time datetime="2026-05-13T11:00:00Z">2 hours ago</time>
              </dd>
            </div>
          </dl>

          <ul class="space-y-2 text-[12px] mb-4">
            <li>
              <a href="stargazers.html" class="flex items-center gap-2 text-muted-foreground hover:text-foreground">
                <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
                <strong class="text-foreground font-medium">142</strong> stars
              </a>
            </li>
            <li>
              <a href="repo.html" class="flex items-center gap-2 text-muted-foreground hover:text-foreground">
                <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><circle cx="6" cy="3" r="3"></circle><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="21" r="3"></circle><path d="M6 6v9a6 6 0 006 6v0M9 6h6a3 3 0 003-3"></path></svg>
                <strong class="text-foreground font-medium">17</strong> forks
              </a>
            </li>
          </ul>

          <div id="repo-topics" class="flex flex-wrap gap-1.5" aria-label="Topics">
            <a href="topic.html" class="text-[11px] px-2 py-0.5 rounded-full border border-border text-muted-foreground hover:border-foreground/30 hover:text-foreground">git</a>
            <a href="topic.html" class="text-[11px] px-2 py-0.5 rounded-full border border-border text-muted-foreground hover:border-foreground/30 hover:text-foreground">golang</a>
            <a href="topic.html" class="text-[11px] px-2 py-0.5 rounded-full border border-border text-muted-foreground hover:border-foreground/30 hover:text-foreground">self-hosted</a>
            <a href="topic.html" class="text-[11px] px-2 py-0.5 rounded-full border border-border text-muted-foreground hover:border-foreground/30 hover:text-foreground">htmx</a>
          </div>
        </section>

        <section aria-labelledby="releases-heading">
          <h2 id="releases-heading" class="text-[13px] font-medium mb-3 flex items-center justify-between">
            <span>
              Releases
              <span class="font-mono text-muted-foreground ml-0.5 text-[11px]" aria-label="3 releases">3</span>
            </span>
            <a href="releases.html" class="text-[12px] text-muted-foreground hover:text-foreground">All</a>
          </h2>
          <a href="release_detail.html" class="block rounded-md border border-border bg-card p-4 hover:border-foreground/30">
            <p class="text-[13px] font-medium flex items-center gap-2">
              <span class="truncate">v0.2.0</span>
              <span class="text-[10px] px-1.5 py-0.5 rounded-sm border border-success/30 bg-success/10 text-success font-mono">Latest</span>
            </p>
            <p class="text-[12px] text-muted-foreground mt-0.5 font-mono">v0.2.0</p>
            <p class="text-[11px] text-muted-foreground/80 mt-1">
              Released
              <time datetime="2026-05-12T10:00:00Z">yesterday</time>
            </p>
          </a>
          <a href="releases.html" class="block text-[12px] text-muted-foreground hover:text-foreground mt-2">+ 2 more releases</a>
        </section>

        <section aria-labelledby="lang-heading">
          <h2 id="lang-heading" class="text-[13px] font-medium mb-3">Languages</h2>
          <div aria-label="Language composition" role="img">
            <div class="flex h-2 rounded-full overflow-hidden border border-border">
              <div title="Go — 62%" style="width: 62%; background-color: #00ADD8;"></div><div title="Templ — 21%" style="width: 21%; background-color: #66ADD0;"></div><div title="CSS — 9%" style="width: 9%; background-color: #563D7C;"></div><div title="JavaScript — 5%" style="width: 5%; background-color: #F1E05A;"></div><div title="Shell — 3%" style="width: 3%; background-color: #89E051;"></div>
            </div>
            <ul class="flex flex-wrap gap-3 mt-2 text-xs text-muted-foreground">
            <li class="flex items-center gap-1.5">
              <span class="inline-block w-2 h-2 rounded-full" style="background-color: #00ADD8" aria-hidden="true"></span>
              <span class="text-foreground">Go</span>
              <span>62%</span>
            </li>
            <li class="flex items-center gap-1.5">
              <span class="inline-block w-2 h-2 rounded-full" style="background-color: #66ADD0" aria-hidden="true"></span>
              <span class="text-foreground">Templ</span>
              <span>21%</span>
            </li>
            <li class="flex items-center gap-1.5">
              <span class="inline-block w-2 h-2 rounded-full" style="background-color: #563D7C" aria-hidden="true"></span>
              <span class="text-foreground">CSS</span>
              <span>9%</span>
            </li>
            <li class="flex items-center gap-1.5">
              <span class="inline-block w-2 h-2 rounded-full" style="background-color: #F1E05A" aria-hidden="true"></span>
              <span class="text-foreground">JavaScript</span>
              <span>5%</span>
            </li>
            <li class="flex items-center gap-1.5">
              <span class="inline-block w-2 h-2 rounded-full" style="background-color: #89E051" aria-hidden="true"></span>
              <span class="text-foreground">Shell</span>
              <span>3%</span>
            </li>
            </ul>
          </div>
        </section>

        <section aria-labelledby="contrib-heading">
          <h2 id="contrib-heading" class="text-[13px] font-medium mb-3 flex items-center justify-between">
            <span>
              Contributors
              <span class="font-mono text-muted-foreground ml-0.5 text-[11px]" aria-label="4 contributors">4</span>
            </span>
            <a href="contributors.html" class="text-[12px] text-muted-foreground hover:text-foreground">All</a>
          </h2>
          <ul class="flex flex-wrap gap-1.5">
            <li>
              <a href="profile.html" class="bg-muted border border-border h-8 w-8 rounded-full grid place-items-center text-[11px] font-medium hover:border-border-strong" aria-label="malith, 245 commits" title="malith — 245 commits">M</a>
            </li>
            <li>
              <a href="profile.html" class="bg-muted border border-border h-8 w-8 rounded-full grid place-items-center text-[11px] font-medium hover:border-border-strong" aria-label="daisy, 87 commits" title="daisy — 87 commits">D</a>
            </li>
            <li>
              <a href="profile.html" class="bg-muted border border-border h-8 w-8 rounded-full grid place-items-center text-[11px] font-medium hover:border-border-strong" aria-label="yumi, 41 commits" title="yumi — 41 commits">Y</a>
            </li>
            <li>
              <a href="profile.html" class="bg-muted border border-border h-8 w-8 rounded-full grid place-items-center text-[11px] font-medium hover:border-border-strong" aria-label="kiyo, 23 commits" title="kiyo — 23 commits">K</a>
            </li>
          </ul>
        </section>

        <section aria-labelledby="activity-heading">
          <h2 id="activity-heading" class="text-[13px] font-medium mb-1">Activity heatmap</h2>
          <p class="text-[12px] text-muted-foreground/80 mb-3">Past 90 days of commit activity</p>
          <div class="rounded-md border border-border bg-card p-3.5">
            <div class="flex justify-between text-[10px] text-muted-foreground/80 mb-1.5" aria-hidden="true">
              <span>Feb</span>
              <span>Mar</span>
              <span>Apr</span>
              <span>May</span>
            </div>
            <div role="img" aria-label="Commit activity over the past 13 weeks" class="grid w-full grid-flow-col gap-[3px]" style="grid-template-rows: repeat(7, 1fr); grid-auto-columns: minmax(0, 1fr); height: 150px;">
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-2" title="2 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-2" title="2 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-2" title="2 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-2" title="2 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-4" title="4 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-3" title="3 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
              <div class="rounded-[2px] heatmap-cell-1" title="1 commit"></div>
              <div class="rounded-[2px] heatmap-cell-0" title="0 commits"></div>
            </div>
            <div class="flex items-center justify-between mt-3 text-[10px] text-muted-foreground/80">
              <span><strong class="text-foreground font-medium">87</strong> commits</span>
              <span class="flex items-center gap-1">
                Less
                <span class="inline-block w-2.5 h-2.5 rounded-[2px] heatmap-cell-0"></span>
                <span class="inline-block w-2.5 h-2.5 rounded-[2px] heatmap-cell-1"></span>
                <span class="inline-block w-2.5 h-2.5 rounded-[2px] heatmap-cell-2"></span>
                <span class="inline-block w-2.5 h-2.5 rounded-[2px] heatmap-cell-3"></span>
                <span class="inline-block w-2.5 h-2.5 rounded-[2px] heatmap-cell-4"></span>
                More
              </span>
            </div>
          </div>
        </section>

        <section aria-labelledby="insights-heading">
          <h2 id="insights-heading" class="text-[13px] font-medium mb-3">Insights</h2>
          <ul class="rounded-md border border-border bg-card overflow-hidden text-[12px]">
          <li class="border-b border-border last:border-b-0">
            <a href="commits.html" class="flex items-center gap-2.5 px-3.5 py-2.5 text-muted-foreground hover:text-foreground hover:bg-muted/40">
              <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="4"></circle><line x1="2" y1="12" x2="8" y2="12"></line><line x1="16" y1="12" x2="22" y2="12"></line></svg>
              <span>Commits</span>
              <span class="font-mono text-muted-foreground/70 ml-auto">245</span>
            <svg class="text-muted-foreground/70 shrink-0" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><path d="M9 18l6-6-6-6"></path></svg>
            </a>
          </li>
          <li class="border-b border-border last:border-b-0">
            <a href="pulse.html" class="flex items-center gap-2.5 px-3.5 py-2.5 text-muted-foreground hover:text-foreground hover:bg-muted/40">
              <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg>
              <span>Pulse</span>
              <svg class="text-muted-foreground/70 shrink-0 ml-auto" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><path d="M9 18l6-6-6-6"></path></svg>
            </a>
          </li>
          <li class="border-b border-border last:border-b-0">
            <a href="contributors.html" class="flex items-center gap-2.5 px-3.5 py-2.5 text-muted-foreground hover:text-foreground hover:bg-muted/40">
              <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 00-3-3.87"></path><path d="M16 3.13a4 4 0 010 7.75"></path></svg>
              <span>Contributors</span>
              <span class="font-mono text-muted-foreground/70 ml-auto">4</span>
            <svg class="text-muted-foreground/70 shrink-0" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><path d="M9 18l6-6-6-6"></path></svg>
            </a>
          </li>
          <li class="border-b border-border last:border-b-0">
            <a href="dependencies.html" class="flex items-center gap-2.5 px-3.5 py-2.5 text-muted-foreground hover:text-foreground hover:bg-muted/40">
              <svg class="text-muted-foreground shrink-0" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" aria-hidden="true" focusable="false"><path d="M21 16V8a2 2 0 00-1-1.73l-7-4a2 2 0 00-2 0l-7 4A2 2 0 003 8v8a2 2 0 001 1.73l7 4a2 2 0 002 0l7-4A2 2 0 0021 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>
              <span>Dependencies</span>
              <svg class="text-muted-foreground/70 shrink-0 ml-auto" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><path d="M9 18l6-6-6-6"></path></svg>
            </a>
          </li>
          </ul>
        </section>
      </aside>
    </div>
  </div>

  <dialog id="repo-edit-modal" class="rounded-lg border border-border bg-popover text-popover-foreground p-0 w-[480px] max-w-[calc(100vw-2rem)] max-h-[calc(100dvh-2rem)] overflow-y-auto mt-[28vh] mb-auto translate-y-[min(0px,calc(100dvh-28vh-1rem-100%))] backdrop:bg-black/60 backdrop:backdrop-blur-xs open:animate-in" aria-labelledby="repo-edit-modal-title">
    <div class="sticky top-0 z-10 bg-popover flex flex-col gap-1 p-5 border-b border-border">
      <h2 id="repo-edit-modal-title" class="text-base font-semibold leading-tight">Edit repository details</h2>
    </div>
    <form method="dialog">
      <div class="p-5 text-sm">
        <div class="space-y-4">
          <div>
            <label for="edit-desc" class="block text-[12px] font-medium mb-1.5">Description</label>
            <textarea id="edit-desc" name="description" rows="3" class="w-full px-3 py-2 text-[13px] bg-card border border-border rounded-md placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring resize-none">Self-hosted Git forge in Go: issues, pull requests, code review and CI, with pure-Go git transport.</textarea>
          </div>
          <div>
            <label for="edit-site" class="block text-[12px] font-medium mb-1.5">Website</label>
            <input id="edit-site" name="website" type="text" value="https://cloudzilla.dev" placeholder="https://example.com" class="w-full h-9 px-3 text-[13px] bg-card border border-border rounded-md placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring"/>
          </div>
          <div>
            <label for="edit-license" class="block text-[12px] font-medium mb-1.5">License</label>
            <input id="edit-license" name="license" type="text" value="BSL 1.1" placeholder="MIT, Apache-2.0, BSL 1.1…" class="w-full h-9 px-3 text-[13px] bg-card border border-border rounded-md placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring"/>
          </div>
        </div>
      </div>
      <div class="sticky bottom-0 z-10 bg-popover flex items-center justify-end gap-2 p-5 border-t border-border">
        <button type="submit" value="cancel" class="h-8 px-3 text-[13px] border border-border rounded-md hover:bg-accent">Cancel</button>
        <button type="submit" value="save" class="h-8 px-3 text-[13px] bg-primary text-primary-foreground rounded-md hover:bg-primary/90 font-medium">Save changes</button>
      </div>
    </form>
  </dialog>
</main>

<div id="cz-footer"></div>
<script src="shell.js"></script>
<script>
(function () {
  function closeAll(except) {
    document.querySelectorAll('[data-dropdown]').forEach(function (d) {
      if (d === except) return;
      d.querySelector('[data-dropdown-panel]').hidden = true;
      d.querySelector('[data-dropdown-btn]').setAttribute('aria-expanded', 'false');
    });
  }
  document.addEventListener('click', function (e) {
    var btn = e.target.closest('[data-dropdown-btn]');
    var dd = btn && btn.closest('[data-dropdown]');
    if (!btn && e.target.closest('[data-dropdown-panel]')) return;
    closeAll(dd);
    if (!dd) return;
    var panel = dd.querySelector('[data-dropdown-panel]');
    panel.hidden = !panel.hidden;
    btn.setAttribute('aria-expanded', String(!panel.hidden));
  });
  document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeAll(); });
  document.querySelectorAll('[data-ref-filter]').forEach(function (input) {
    input.addEventListener('input', function () {
      var q = input.value.toLowerCase();
      input.closest('[data-dropdown-panel]').querySelectorAll('[data-ref]').forEach(function (a) {
        a.hidden = !!q && a.dataset.ref.toLowerCase().indexOf(q) < 0;
      });
    });
  });
})();
var URLS = { https: 'http://localhost:8080/mkappworks/cloudzilla.git', ssh: 'ssh://git@localhost:2222/mkappworks/cloudzilla.git' };
var clone = document.querySelector('[data-clone]');
var urlInput = clone.querySelector('#clone-url');
var ON = ['bg-card', 'text-foreground', 'shadow-xs'];
var OFF = ['text-muted-foreground', 'hover:text-foreground'];
clone.querySelectorAll('[data-proto]').forEach(function (tab) {
  tab.addEventListener('click', function () {
    clone.querySelectorAll('[data-proto]').forEach(function (t) {
      var on = t === tab;
      ON.forEach(function (c) { t.classList.toggle(c, on); });
      OFF.forEach(function (c) { t.classList.toggle(c, !on); });
      t.setAttribute('aria-selected', String(on));
    });
    urlInput.value = URLS[tab.dataset.proto];
  });
});
clone.querySelector('[data-copy-url]').addEventListener('click', function () {
  var btn = this;
  if (navigator.clipboard) navigator.clipboard.writeText(urlInput.value);
  btn.querySelector('[data-icon-copy]').hidden = true;
  btn.querySelector('[data-icon-done]').hidden = false;
  setTimeout(function () {
    btn.querySelector('[data-icon-copy]').hidden = false;
    btn.querySelector('[data-icon-done]').hidden = true;
  }, 1500);
});

var scope = document.querySelector('[data-finder-scope]');
var finder = document.getElementById('file-finder');
var results = scope.querySelector('[data-finder-results]');
var empty = scope.querySelector('[data-finder-empty]');
var hideWhileSearching = scope.querySelectorAll('[data-files], [data-readme]');
finder.addEventListener('input', function () {
  var q = finder.value.toLowerCase();
  var any = false;
  results.querySelectorAll('[data-path]').forEach(function (a) {
    var hit = a.dataset.path.indexOf(q) >= 0;
    a.hidden = !hit;
    any = any || hit;
  });
  results.hidden = !q;
  empty.hidden = any;
  hideWhileSearching.forEach(function (el) { el.hidden = !!q; });
});
document.addEventListener('keydown', function (e) {
  if (e.key !== 't' || e.metaKey || e.ctrlKey || e.altKey) return;
  if (/^(INPUT|TEXTAREA|SELECT)$/.test(e.target.tagName) || e.target.isContentEditable) return;
  e.preventDefault();
  finder.focus();
});

document.querySelectorAll('#watch-button, #star-button').forEach(function (box) {
  var btn = box.querySelector('button');
  var count = box.querySelector('[data-count]');
  var label = btn.querySelector('[data-label]');
  var names = box.id === 'watch-button' ? ['Unwatch', 'Watch'] : ['Unstar', 'Star'];
  btn.addEventListener('click', function () {
    var pressed = btn.getAttribute('aria-pressed') !== 'true';
    btn.setAttribute('aria-pressed', String(pressed));
    label.textContent = pressed ? names[0] : names[1];
    count.textContent = String(parseInt(count.textContent, 10) + (pressed ? 1 : -1));
    if (box.id === 'star-button') count.setAttribute('aria-label', 'View ' + count.textContent + ' stargazers');
  });
});
document.querySelector('[data-download]').addEventListener('click', function (e) {
  e.preventDefault();
  window.czToast('Downloading cloudzilla-main.zip …');
});
document.querySelectorAll('[data-open-dialog]').forEach(function (b) {
  b.addEventListener('click', function () { document.getElementById(b.dataset.openDialog).showModal(); });
});
</script>
</body>
</html>