16 lines
3.7 KiB
HTML
16 lines
3.7 KiB
HTML
<!doctype html><html lang="de"><head>
|
||
<link rel="icon" href="data:,"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Neural Hunt · Customer Admin</title><link rel="stylesheet" href="/styles.css"></head><body><main>
|
||
<div class="eyebrow">NEURAL HUNT · PRIVATE CONTROL PLANE</div><h1>Customer Service Admin</h1><div id="msg" class="msg hidden"></div>
|
||
<section id="loginBox"><label>Admin<input id="user" autocomplete="username"></label><label>Passwort<input id="pass" type="password" autocomplete="current-password"></label><button id="login">ANMELDEN</button></section>
|
||
<section id="panel" class="hidden"><div class="head"><p>Dieser Listener gehört ausschließlich hinter VPN / privates Netz.</p><button id="logout">ABMELDEN</button></div>
|
||
<div class="admin-grid">
|
||
<article><h2>Portal-Steuerung</h2><label class="toggle"><input id="loginEnabled" type="checkbox"> Benutzer-Anmeldung erlauben</label><label class="toggle"><input id="registrationEnabled" type="checkbox"> Neue Registrierungen erlauben</label><label class="toggle"><input id="inviteRequired" type="checkbox"> Registrierung nur mit einmaligem Invite-Code</label><label>Anti-Bot Proof-of-Work · Bit<input id="powBits" type="number" min="0" max="24" step="1"></label><p class="small">0 deaktiviert PoW. Für offene Registrierung sind 16–20 Bit ein sinnvoller Start; Reverse-Proxy-Limits bleiben zusätzlich empfehlenswert.</p><button id="saveSettings">EINSTELLUNGEN SPEICHERN</button></article>
|
||
<article><h2>Credit-Rewards</h2><label>Startguthaben pro neuem Konto · Credits<input id="signupBonus" type="number" min="0" step="0.001"></label><label>Reward pro positivem Worker-Tipp · Credits<input id="positiveBonus" type="number" min="0" step="0.001"></label><p class="small">Positiver Tipp = der signierte Tipp verbessert den persönlichen Best-Score dieses Hosted Workers. Normale Browser-/CLI-Spieler erhalten darüber keine Customer-Credits.</p><button id="saveRewards">REWARDS SPEICHERN</button></article>
|
||
<article><h2>Invite-Codes</h2><p class="small">Optionaler Schutz gegen Account-Farming. Jeder Code ist einmalig und wird nur hier bei der Erstellung im Klartext gezeigt.</p><label>Bezeichnung<input id="inviteLabel" placeholder="z. B. Beta Tester"></label><label>Gültigkeit · Stunden<input id="inviteHours" type="number" min="1" max="720" value="24"></label><button id="createInvite">INVITE ERZEUGEN</button><div id="inviteOut" class="invite hidden"></div><div class="small">Aktive, unbenutzte Invites: <strong id="inviteCount">0</strong></div></article>
|
||
</div>
|
||
<div id="manual" class="notice"></div>
|
||
<article class="worker-image-control"><div><h2>Hosted Worker Image</h2><div class="small">Aktuell konfiguriert: <strong id="workerImage">—</strong></div><p class="small">„Alle aktualisieren“ pullt das konfigurierte CS_WORKER_IMAGE auf jedem beteiligten Worker-Host erneut und erzeugt die Container auf ihrem zugeordneten Host mit demselben Identity-Volume neu. Laufende Worker werden anschließend automatisch fortgesetzt.</p></div><button id="updateAllImages" class="ghost">IMAGE LADEN · ALLE WORKER AKTUALISIEREN</button></article>
|
||
<article class="controller-control"><div class="section-title"><div><h2>Service Controller</h2><p class="small">Orchestrierung: <strong id="orchestrationMode">—</strong>. Neue Worker werden im Controller-Modus automatisch auf erreichbare Hosts mit freier Kapazität verteilt. DRAIN verhindert nur neue Zuweisungen; vorhandene Worker bleiben auf ihrem Host.</p></div></div><div id="controllers" class="controller-list"></div></article>
|
||
<div class="section-title"><h2>Benutzer</h2><button id="refresh" class="ghost">AKTUALISIEREN</button></div><div id="customers"></div>
|
||
</section></main><script src="/app.js" defer></script></body></html>
|