122 lines
5.5 KiB
HTML
122 lines
5.5 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Apps — plate-software.de</title>
|
|
<meta name="description" content="Die Anwendungen, die aus dem plate-software-Homelab live laufen: CannaManage, InspectFlow und mehr." />
|
|
<meta name="author" content="Patrick Plate" />
|
|
<meta name="robots" content="index, follow" />
|
|
<meta property="og:title" content="Apps — plate-software.de" />
|
|
<meta property="og:description" content="Die Anwendungen, die aus dem plate-software-Homelab live laufen." />
|
|
<meta property="og:type" content="website" />
|
|
<meta property="og:locale" content="de_DE" />
|
|
<meta property="og:locale:alternate" content="en_US" />
|
|
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>⬡</text></svg>" />
|
|
<link rel="stylesheet" href="/assets/style.css" />
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<div class="wrap nav">
|
|
<a class="brand" href="/"><span class="mark">⬡</span> plate-software.de</a>
|
|
<nav class="nav-links">
|
|
<a href="/">
|
|
<span data-lang-de>Start</span>
|
|
<span data-lang-en>Home</span>
|
|
</a>
|
|
<a href="/apps/" class="active">Apps</a>
|
|
<a href="/homelab/">Homelab</a>
|
|
</nav>
|
|
<div class="lang-toggle" role="group" aria-label="Language">
|
|
<button id="btn-de" class="active" onclick="setLang('de')">DE</button>
|
|
<button id="btn-en" onclick="setLang('en')">EN</button>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<main>
|
|
<section class="hero" style="padding: 56px 0 24px;">
|
|
<div class="wrap">
|
|
<a class="back-link" href="/">
|
|
<span data-lang-de>← Zurück</span>
|
|
<span data-lang-en>← Back</span>
|
|
</a>
|
|
<h1>
|
|
<span data-lang-de>Apps aus dem <span class="grad">Homelab</span></span>
|
|
<span data-lang-en>Apps from the <span class="grad">homelab</span></span>
|
|
</h1>
|
|
<p class="lead">
|
|
<span data-lang-de>Built in the homelab, served from IONOS — same continuous-deploy story as this page itself.</span>
|
|
<span data-lang-en>Built in the homelab, served from IONOS — same continuous-deploy story as this page itself.</span>
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section style="padding: 24px 0 56px;">
|
|
<div class="wrap">
|
|
<div class="grid">
|
|
<!-- CannaManage -->
|
|
<div class="card">
|
|
<div class="icon">🌿</div>
|
|
<h3>CannaManage <span class="badge live">🟢 Live</span></h3>
|
|
<div class="sub" data-lang-de>Mitgliederverwaltung für Cannabis-Anbauvereinigungen</div>
|
|
<div class="sub" data-lang-en>Member management for German Cannabis Cultivation Associations</div>
|
|
<p data-lang-de>Mitgliederverwaltung für Cannabis-Anbauvereinigungen nach KCanG. Mitglieder, Beitragszahlungen, Abgabemengen-Tracking, gerichtsfeste Audit-Logs.</p>
|
|
<p data-lang-en>Member management for German Cannabis Cultivation Associations (CSCs) per KCanG. Members, dues, distribution tracking, court-proof audit logs.</p>
|
|
<a class="link" href="https://cannamanage.plate-software.de" target="_blank" rel="noopener">cannamanage.plate-software.de ↗</a>
|
|
</div>
|
|
|
|
<!-- InspectFlow -->
|
|
<div class="card">
|
|
<div class="icon">🛡️</div>
|
|
<h3>InspectFlow <span class="badge live">🟢 Live</span></h3>
|
|
<div class="sub" data-lang-de>Maschinen- und Sicherheitsinspektionen</div>
|
|
<div class="sub" data-lang-en>Machine and safety inspections</div>
|
|
<p data-lang-de>Maschinen- und Sicherheitsinspektionen für Produktionsbetriebe. Fragebogen-Engine, Tickets, Archiv, Audit-Trail mit Hibernate Envers.</p>
|
|
<p data-lang-en>Machine and safety inspections for production facilities. Questionnaire engine, tickets, archive, audit trail via Hibernate Envers.</p>
|
|
<a class="link" href="https://inspectflow.plate-software.de" target="_blank" rel="noopener">inspectflow.plate-software.de ↗</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<footer>
|
|
<div class="wrap foot-row">
|
|
<div>© <span id="year"></span> Patrick Plate · plate-software.de</div>
|
|
<div class="foot-links">
|
|
<a href="/">
|
|
<span data-lang-de>Start</span>
|
|
<span data-lang-en>Home</span>
|
|
</a>
|
|
<a href="/apps/">Apps</a>
|
|
<a href="/homelab/">Homelab</a>
|
|
</div>
|
|
</div>
|
|
<div class="wrap">
|
|
<p class="deploy-badge" data-de="Letzter Deploy: <!--DEPLOY_INFO-->" data-en="Last deploy: <!--DEPLOY_INFO-->"></p>
|
|
</div>
|
|
</footer>
|
|
|
|
<script>
|
|
function setLang(lang) {
|
|
document.documentElement.lang = lang;
|
|
document.getElementById('btn-de').classList.toggle('active', lang === 'de');
|
|
document.getElementById('btn-en').classList.toggle('active', lang === 'en');
|
|
document.querySelectorAll('[data-de][data-en]').forEach(function (el) {
|
|
el.textContent = el.getAttribute(lang === 'en' ? 'data-en' : 'data-de');
|
|
});
|
|
try { localStorage.setItem('ps-lang', lang); } catch (e) {}
|
|
}
|
|
(function () {
|
|
var saved;
|
|
try { saved = localStorage.getItem('ps-lang'); } catch (e) {}
|
|
var nav = (navigator.language || 'de').slice(0, 2);
|
|
setLang(saved || (nav === 'en' ? 'en' : 'de'));
|
|
var y = document.getElementById('year');
|
|
if (y) y.textContent = new Date().getFullYear();
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|