mockups/repo.html
Rama main · réplica de lectura del repositorio original.
<!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>