CI / build (push) Successful in 30s
Apps opt in with sema.dashboard.* labels in their own compose file. The primary reads its host's containers through a read-only socket proxy, follows Docker events, and merges in what the agent on the second host reports. Icons come from the icon label, the dashboard-icons set or the app's favicon, with a letter as the fallback. Go with only the standard library, a distroless image, and a Gitea Actions workflow copied from FiMa's: checks in the Dockerfile's check stage, a Trivy scan, and a push to git.mariosem.es/msemes/hoda. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
25 lines
1022 B
HTML
25 lines
1022 B
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="color-scheme" content="light dark">
|
|
<title>{{.Title}}</title>
|
|
<link rel="icon" href="/static/favicon.svg?v={{.Version}}" type="image/svg+xml">
|
|
<link rel="stylesheet" href="/static/app.css?v={{.Version}}">
|
|
<script src="/static/app.js?v={{.Version}}" defer></script>
|
|
</head>
|
|
<body data-link-target="{{.LinkTarget}}" data-label-prefix="{{.LabelPrefix}}">
|
|
<header class="top">
|
|
<h1 class="title">{{.Title}}</h1>
|
|
<div class="search">
|
|
<input id="search" type="search" placeholder="Search apps" autocomplete="off" spellcheck="false" aria-label="Search apps">
|
|
<kbd aria-hidden="true">/</kbd>
|
|
</div>
|
|
</header>
|
|
<div id="banners" class="banners" role="status" aria-live="polite"></div>
|
|
<main id="groups" class="groups" aria-busy="true"></main>
|
|
<noscript><p class="note">HODA needs JavaScript to list your apps.</p></noscript>
|
|
</body>
|
|
</html>
|