All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 11s
257 lines
14 KiB
HTML
257 lines
14 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>MischLabs - Dashboard</title>
|
|
<meta name="description" content="MischLabs service dashboard for self-hosted apps.">
|
|
<meta name="theme-color" content="#0f172a">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
<meta name="apple-mobile-web-app-title" content="MischLabs">
|
|
<link rel="manifest" href="/manifest.webmanifest?v=3">
|
|
<link rel="apple-touch-icon" href="/icons/apple-touch-icon-v2.png">
|
|
<link rel="icon" type="image/png" sizes="192x192" href="/icons/icon-192.png">
|
|
<link rel="icon" type="image/png" sizes="512x512" href="/icons/icon-512.png">
|
|
<link rel="stylesheet" href="style.css?v=9">
|
|
</head>
|
|
<body>
|
|
<header class="shell hero">
|
|
<div class="brand">
|
|
<img class="brand-mark" src="/icons/app-icon-source.png" alt="" width="72" height="72">
|
|
<div>
|
|
<p class="eyebrow">Self-hosted dashboard</p>
|
|
<h1>MischLabs</h1>
|
|
<p class="subtitle">Cloud, Medien, Code und Spielwiese an einem Ort.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="hero-meta" aria-label="Systemuebersicht">
|
|
<div class="metric">
|
|
<span class="metric-value" id="onlineCount">--</span>
|
|
<span class="metric-label">Online</span>
|
|
</div>
|
|
<div class="metric">
|
|
<span class="metric-value">9</span>
|
|
<span class="metric-label">Dienste</span>
|
|
</div>
|
|
<div class="metric">
|
|
<span class="metric-value">PWA</span>
|
|
<span class="metric-label">Installierbar</span>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<main class="shell">
|
|
<section class="control-bar" aria-label="Dienste filtern">
|
|
<label class="search-box">
|
|
<span class="search-icon" aria-hidden="true">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
|
|
<circle cx="11" cy="11" r="7"></circle>
|
|
<path d="m20 20-3.5-3.5"></path>
|
|
</svg>
|
|
</span>
|
|
<input id="serviceSearch" type="search" placeholder="Dienst suchen" autocomplete="off">
|
|
</label>
|
|
|
|
<div class="segments" role="tablist" aria-label="Kategorien">
|
|
<button class="segment is-active" type="button" data-filter="all">Alle</button>
|
|
<button class="segment" type="button" data-filter="access">Zugang</button>
|
|
<button class="segment" type="button" data-filter="media">Medien</button>
|
|
<button class="segment" type="button" data-filter="work">Arbeit</button>
|
|
<button class="segment" type="button" data-filter="personal">Persoenlich</button>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section">
|
|
<div class="section-heading">
|
|
<div>
|
|
<p class="section-kicker">Zugang</p>
|
|
<h2>Accounts & Sicherheit</h2>
|
|
</div>
|
|
<span class="section-count">3 Dienste</span>
|
|
</div>
|
|
|
|
<div class="grid">
|
|
<a href="https://auth.mischlabs.de/realms/mischlabs/account" class="card card-wide service-card" target="_blank" rel="noopener" data-category="access" data-url="https://auth.mischlabs.de/realms/mischlabs/account" data-name="single sign-on keycloak account login auth">
|
|
<span class="status-dot" aria-label="Status wird geprueft"></span>
|
|
<div class="card-icon" style="--accent: #f59e0b;">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path>
|
|
<path d="M9 12l2 2 4-4"></path>
|
|
</svg>
|
|
</div>
|
|
<div class="card-content">
|
|
<h3>Single Sign-On</h3>
|
|
<p>Account, Sitzungen und Sicherheit</p>
|
|
</div>
|
|
<span class="card-domain">auth.mischlabs.de</span>
|
|
</a>
|
|
|
|
<a href="https://drive.mischlabs.de" class="card service-card" target="_blank" rel="noopener" data-category="access" data-url="https://drive.mischlabs.de" data-name="drive nextcloud cloud speicher dateien">
|
|
<span class="status-dot" aria-label="Status wird geprueft"></span>
|
|
<div class="card-icon" style="--accent: #60a5fa;">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path>
|
|
</svg>
|
|
</div>
|
|
<div class="card-content">
|
|
<h3>Drive</h3>
|
|
<p>Cloud-Speicher</p>
|
|
</div>
|
|
<span class="card-domain">drive.mischlabs.de</span>
|
|
</a>
|
|
|
|
<a href="https://password.mischlabs.de" class="card service-card" target="_blank" rel="noopener" data-category="access" data-url="https://password.mischlabs.de" data-name="passwords vaultwarden passwort manager security">
|
|
<span class="status-dot" aria-label="Status wird geprueft"></span>
|
|
<div class="card-icon" style="--accent: #eab308;">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
<rect x="3" y="11" width="18" height="11" rx="2"></rect>
|
|
<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
|
|
<circle cx="12" cy="16" r="1"></circle>
|
|
</svg>
|
|
</div>
|
|
<div class="card-content">
|
|
<h3>Passwords</h3>
|
|
<p>Passwort-Manager</p>
|
|
</div>
|
|
<span class="card-domain">password.mischlabs.de</span>
|
|
</a>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section">
|
|
<div class="section-heading">
|
|
<div>
|
|
<p class="section-kicker">Medien</p>
|
|
<h2>Bibliothek & Streaming</h2>
|
|
</div>
|
|
<span class="section-count">3 Dienste</span>
|
|
</div>
|
|
|
|
<div class="grid">
|
|
<a href="https://movies.mischlabs.de" class="card service-card" target="_blank" rel="noopener" data-category="media" data-url="https://movies.mischlabs.de" data-name="movies jellyfin filme serien media streaming">
|
|
<span class="status-dot" aria-label="Status wird geprueft"></span>
|
|
<div class="card-icon" style="--accent: #a78bfa;">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
<rect x="2" y="2" width="20" height="20" rx="2.2"></rect>
|
|
<line x1="7" y1="2" x2="7" y2="22"></line>
|
|
<line x1="17" y1="2" x2="17" y2="22"></line>
|
|
<line x1="2" y1="12" x2="22" y2="12"></line>
|
|
</svg>
|
|
</div>
|
|
<div class="card-content">
|
|
<h3>Movies</h3>
|
|
<p>Filme & Serien</p>
|
|
</div>
|
|
<span class="card-domain">movies.mischlabs.de</span>
|
|
</a>
|
|
|
|
<a href="https://audiobook.mischlabs.de" class="card service-card" target="_blank" rel="noopener" data-category="media" data-url="https://audiobook.mischlabs.de" data-name="audiobooks audiobookshelf hoerbuecher audio">
|
|
<span class="status-dot" aria-label="Status wird geprueft"></span>
|
|
<div class="card-icon" style="--accent: #22c55e;">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M3 18v-6a9 9 0 0 1 18 0v6"></path>
|
|
<path d="M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z"></path>
|
|
</svg>
|
|
</div>
|
|
<div class="card-content">
|
|
<h3>Audiobooks</h3>
|
|
<p>Hoerbuecher</p>
|
|
</div>
|
|
<span class="card-domain">audiobook.mischlabs.de</span>
|
|
</a>
|
|
|
|
<a href="https://books.mischlabs.de" class="card service-card" target="_blank" rel="noopener" data-category="media" data-url="https://books.mischlabs.de" data-name="books calibre calibre-web buecher bibliothek">
|
|
<span class="status-dot" aria-label="Status wird geprueft"></span>
|
|
<div class="card-icon" style="--accent: #06b6d4;">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path>
|
|
<path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path>
|
|
</svg>
|
|
</div>
|
|
<div class="card-content">
|
|
<h3>Books</h3>
|
|
<p>Buecher & Bibliothek</p>
|
|
</div>
|
|
<span class="card-domain">books.mischlabs.de</span>
|
|
</a>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section">
|
|
<div class="section-heading">
|
|
<div>
|
|
<p class="section-kicker">Arbeit</p>
|
|
<h2>Code, Projekte & Spiel</h2>
|
|
</div>
|
|
<span class="section-count">3 Dienste</span>
|
|
</div>
|
|
|
|
<div class="grid">
|
|
<a href="https://git.mischlabs.de" class="card service-card" target="_blank" rel="noopener" data-category="work" data-url="https://git.mischlabs.de" data-name="git gitea code repositories ci actions">
|
|
<span class="status-dot" aria-label="Status wird geprueft"></span>
|
|
<div class="card-icon" style="--accent: #f97316;">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
<circle cx="12" cy="12" r="4"></circle>
|
|
<line x1="1.05" y1="12" x2="7" y2="12"></line>
|
|
<line x1="17.01" y1="12" x2="22.96" y2="12"></line>
|
|
<path d="M12 1.05V7"></path>
|
|
<path d="M12 17.01v5.95"></path>
|
|
</svg>
|
|
</div>
|
|
<div class="card-content">
|
|
<h3>Git</h3>
|
|
<p>Code-Repositories</p>
|
|
</div>
|
|
<span class="card-domain">git.mischlabs.de</span>
|
|
</a>
|
|
|
|
<a href="https://michess.mischlabs.de" class="card service-card" target="_blank" rel="noopener" data-category="work" data-url="https://michess.mischlabs.de" data-name="michess schach game chess">
|
|
<span class="status-dot" aria-label="Status wird geprueft"></span>
|
|
<div class="card-icon" style="--accent: #10b981;">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M8 16l-1 4h10l-1-4"></path>
|
|
<path d="M6.5 16h11"></path>
|
|
<path d="M12 2a2 2 0 0 1 2 2c0 1.1-.9 2-2 3-1.1-1-2-1.9-2-3a2 2 0 0 1 2-2z"></path>
|
|
<path d="M9 7 6 10.5c-.6.7-.2 1.5.7 1.5h10.6c.9 0 1.3-.8.7-1.5L15 7"></path>
|
|
<path d="M9 12v4"></path>
|
|
<path d="M15 12v4"></path>
|
|
</svg>
|
|
</div>
|
|
<div class="card-content">
|
|
<h3>MiChess</h3>
|
|
<p>Schach</p>
|
|
</div>
|
|
<span class="card-domain">michess.mischlabs.de</span>
|
|
</a>
|
|
|
|
<a href="https://tom.mischlabs.de" class="card service-card" target="_blank" rel="noopener" data-category="personal" data-url="https://tom.mischlabs.de" data-name="tom photography mischkomposition portfolio persoenlich fotos">
|
|
<span class="status-dot" aria-label="Status wird geprueft"></span>
|
|
<div class="card-icon" style="--accent: #ec4899;">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>
|
|
<circle cx="12" cy="7" r="4"></circle>
|
|
</svg>
|
|
</div>
|
|
<div class="card-content">
|
|
<h3>Tom</h3>
|
|
<p>Photography</p>
|
|
</div>
|
|
<span class="card-domain">tom.mischlabs.de</span>
|
|
</a>
|
|
</div>
|
|
</section>
|
|
|
|
<p class="empty-state" id="emptyState" hidden>Kein Dienst passt zur Suche.</p>
|
|
</main>
|
|
|
|
<footer class="shell footer">
|
|
<span>MischLabs</span>
|
|
<span id="lastChecked">Status wird im Hintergrund geprueft.</span>
|
|
</footer>
|
|
|
|
<script src="/app.js?v=1" defer></script>
|
|
</body>
|
|
</html>
|