Files
d4rkbot/docs/redesign/D4RKBOT-Landing-neu.dc.html
T
D4rkst3randClaude Opus 5 0d7628f14e
Deploy / check (push) Canceled after 0s
Deploy / deploy (push) Canceled after 0s
Den Entwurf und das Logo-Original einsortieren
Drei Dateien lagen unversioniert im Wurzelverzeichnis herum. Alle drei
gehoeren ins Repo, nur nicht dorthin:

  logo.png                        -> docs/brand/logo.png
  ChatGPT Image 23. Juni 2025 ... -> docs/brand/studie-kopf-2025-06.png
  design_handoff_redesign/        -> docs/redesign/

logo.png ist NICHT irgendein Logo, sondern das Original, von dem
docs/brand/README.md die ganze Zeit spricht: "ein einziges Original, 2048x2048
mit Transparenz". Nachgerechnet statt geraten -- auf den Inhalt beschnitten
ergibt es 1986x1963, exakt die Masse von lockup.png. Es lag also die Quelle
der Marke unversioniert daneben.

Dabei aufgefallen und in der README vermerkt, nicht repariert: build.py liest
das Original ueber einen festen Pfad ausserhalb des Repos
(QUELLE = A:/Users/DAR/logo.png). Jetzt sind das zwei Kopien, die
auseinanderlaufen koennen. Umstellen kann nur, wer weiss, welche der beiden
gepflegt wird.

Das zweite Bild ist eine frueherere Kopf-Studie und nicht die Vorlage der
heutigen Marke -- andere Zeichnung, flacher, ohne Fell und Schulter. Sie wird
nirgends benutzt und liegt als Herkunft.

Vom Entwurfs-Paket ist der assets/-Ordner entfallen: er enthielt Kopien von
mark.png und lockup.png, die zwei Verzeichnisse weiter im Original liegen. Die
.dc.html-Referenzen zeigen jetzt auf ../brand/ und stellen das Logo weiter
dar, statt mit kaputten Bildern zurueckzubleiben. Der Kopf der README sagt
ausserdem, dass der Entwurf umgesetzt ist und wo bewusst abgewichen wurde --
sonst liest sich das Dokument in einem Jahr wie eine offene Aufgabe.

Dazu eine Zeile, die seit dem Redesign nicht mehr stimmte: build.py bezeichnet
(10, 10, 10) als "--bg der Marke". Das ist seit gestern #131316. Wirkt erst,
wenn jemand build.py laufen laesst -- die erzeugten Icons in frontend/public/
tragen bis dahin den alten Grund. Neu bauen konnte ich sie hier nicht, es gibt
weder Python noch Pillow auf dieser Maschine.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 15:19:49 +02:00

150 lines
15 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="./support.js"></script>
</head>
<body>
<x-dc>
<helmet>
<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=Chakra+Petch:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
html{color-scheme:dark}
body{background:#131316;color:#ececee;font-family:'Chakra Petch',sans-serif;font-size:16px;line-height:1.55;overflow-x:hidden;min-height:100vh}
a{color:inherit;text-decoration:none}
a:hover{color:#ffb340}
button{font-family:inherit;cursor:pointer}
::selection{background:rgba(255,154,31,.35);color:#131316}
@keyframes pulseGlow{0%,100%{opacity:.5}50%{opacity:1}}
@keyframes riseIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
</style>
</helmet>
<div style="min-height:100vh;display:flex;flex-direction:column;position:relative">
<div style="position:fixed;inset:0;pointer-events:none;background:radial-gradient(900px 500px at 78% -10%,rgba(240,120,0,.14),transparent 60%),radial-gradient(700px 420px at 5% 110%,rgba(255,179,64,.06),transparent 60%)"></div>
<header style="position:sticky;top:0;z-index:100;display:flex;align-items:center;gap:2rem;padding:.85rem 2.5rem;background:rgba(19,19,22,.88);backdrop-filter:blur(12px);border-bottom:1px solid rgba(255,255,255,.08)">
<a href="#" style="display:inline-flex;align-items:center;gap:.65rem;font-weight:700;font-size:1.12rem;letter-spacing:.06em;color:#ececee">
<img src="../brand/mark.png" alt="" style="width:34px;height:34px;object-fit:contain">
D4RKBOT<span style="color:#ff9a1f">_</span></a>
<nav style="display:flex;gap:1.8rem;flex:1;align-items:center;font-family:'IBM Plex Mono',monospace;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase">
<a href="#" style="color:#9a9aa3" style-hover="color:#ffb340">Funktionen</a>
<a href="#" style="color:#9a9aa3" style-hover="color:#ffb340">Befehle</a>
<a href="#" style="color:#9a9aa3" style-hover="color:#ffb340">Community</a>
</nav>
<span style="font-family:'IBM Plex Mono',monospace;font-size:.64rem;letter-spacing:.14em;color:#66666e">DE / EN</span>
<a href="#" style="font-family:'IBM Plex Mono',monospace;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:#131316;background:linear-gradient(135deg,#ffb340,#f07800);padding:.55rem 1.3rem;clip-path:polygon(8px 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%,0 8px);font-weight:500">Anmelden</a>
</header>
<main style="flex:1;position:relative">
<section style="max-width:1160px;margin:0 auto;padding:5rem 2.5rem 4rem;display:grid;grid-template-columns:1.15fr .85fr;gap:3rem;align-items:center">
<div style="animation:riseIn .5s ease both">
<div style="display:inline-flex;align-items:center;gap:.5rem;font-family:'IBM Plex Mono',monospace;font-size:.68rem;letter-spacing:.2em;text-transform:uppercase;color:#ffb340;border:1px solid rgba(255,154,31,.4);padding:.35rem .8rem;clip-path:polygon(6px 0,100% 0,100% calc(100% - 6px),calc(100% - 6px) 100%,0 100%,0 6px)"><span style="width:6px;height:6px;background:#ffb340;border-radius:50%;animation:pulseGlow 2s infinite"></span>Selbst gebaut · keine Paywall</div>
<h1 style="font-size:4.1rem;font-weight:700;line-height:1.02;letter-spacing:-.01em;margin:1.2rem 0 1rem;text-transform:uppercase">Ein Discord-Bot,<br><span style="color:transparent;-webkit-text-stroke:1.5px #9a9aa3">der alles</span> <span style="background:linear-gradient(135deg,#ffb340,#f07800);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 22px rgba(240,120,0,.35))">macht</span></h1>
<p style="font-size:1.05rem;color:#9a9aa3;max-width:520px;line-height:1.65">Devlogs, Level, Moderation, Server-Monitoring, Verlosungen, Tickets — was sonst drei Bots mit Abo-Modell erledigen, läuft hier in einem, mit eigenem Webinterface.</p>
<div style="display:flex;gap:1rem;flex-wrap:wrap;margin-top:1.8rem">
<a href="#" style="display:inline-flex;align-items:center;gap:.5rem;font-family:'IBM Plex Mono',monospace;font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;color:#131316;background:linear-gradient(135deg,#ffb340,#f07800);padding:.8rem 1.6rem;font-weight:500;clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px);box-shadow:0 0 30px rgba(240,120,0,.3)">Alle Funktionen →</a>
<a href="#" style="display:inline-flex;align-items:center;gap:.5rem;font-family:'IBM Plex Mono',monospace;font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;color:#c9c9cf;border:1px solid rgba(255,255,255,.18);padding:.8rem 1.6rem;clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px)" style-hover="background:rgba(255,255,255,.06);color:#ffb340">/befehle</a>
</div>
</div>
<div style="position:relative;animation:riseIn .5s ease .1s both">
<div style="position:absolute;inset:-1.2rem;border:1px solid rgba(255,255,255,.09);clip-path:polygon(24px 0,100% 0,100% calc(100% - 24px),calc(100% - 24px) 100%,0 100%,0 24px)"></div>
<div style="background:#1b1b20;border:1px solid rgba(255,255,255,.1);padding:1.4rem;clip-path:polygon(18px 0,100% 0,100% calc(100% - 18px),calc(100% - 18px) 100%,0 100%,0 18px)">
<div style="display:flex;justify-content:center;padding:.4rem 0 1.1rem;border-bottom:1px solid rgba(255,255,255,.07)">
<img src="../brand/lockup.png" alt="D4RKST3R" style="width:200px;height:auto;object-fit:contain;filter:drop-shadow(0 8px 24px rgba(0,0,0,.5))">
</div>
<div style="display:flex;align-items:center;gap:.7rem;padding:1rem 0 .9rem">
<span style="width:8px;height:8px;border-radius:50%;background:#3ba55d;box-shadow:0 0 10px rgba(59,165,93,.7)"></span>
<span style="font-family:'IBM Plex Mono',monospace;font-size:.66rem;letter-spacing:.12em;color:#9a9aa3">ONLINE · 38 MS · UPTIME 99,2 %</span>
</div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:.7rem">
<sc-for list="{{ heroStats }}" as="st" hint-placeholder-count="4">
<div style="background:rgba(255,154,31,.06);border:1px solid rgba(255,154,31,.22);padding:.8rem .9rem;clip-path:polygon(8px 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%,0 8px)">
<div style="font-size:1.7rem;font-weight:700;background:linear-gradient(135deg,#ffb340,#f07800);-webkit-background-clip:text;background-clip:text;color:transparent;line-height:1.1">{{ st.n }}</div>
<div style="font-family:'IBM Plex Mono',monospace;font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:#9a9aa3;margin-top:.25rem">{{ st.label }}</div>
</div>
</sc-for>
</div>
</div>
</div>
</section>
<section style="max-width:1160px;margin:0 auto;padding:1rem 2.5rem 5rem">
<div style="display:flex;align-items:center;gap:1rem;margin-bottom:1.6rem">
<span style="width:22px;height:3px;background:linear-gradient(90deg,#ffb340,#f07800)"></span>
<h2 style="font-size:1.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em">Was er kann</h2>
<span style="flex:1;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.15),transparent)"></span>
<span style="font-family:'IBM Plex Mono',monospace;font-size:.64rem;letter-spacing:.12em;color:#66666e">40 MODULE · EINZELN SCHALTBAR</span>
</div>
<div style="display:grid;gap:1rem;grid-template-columns:repeat(3,1fr)">
<sc-for list="{{ tiles }}" as="tl" hint-placeholder-count="9">
<div style="background:#1b1b20;border:1px solid rgba(255,255,255,.08);padding:1.3rem 1.4rem;clip-path:polygon(14px 0,100% 0,100% calc(100% - 14px),calc(100% - 14px) 100%,0 100%,0 14px);display:flex;flex-direction:column;gap:.45rem" style-hover="border-color:rgba(255,154,31,.5);background:#1f1f25;transform:translateY(-3px)">
<div style="display:flex;align-items:center;gap:.7rem">
<span style="display:inline-grid;place-items:center;width:36px;height:36px;background:rgba(255,154,31,.1);border:1px solid rgba(255,154,31,.3);color:#ffb340;clip-path:polygon(7px 0,100% 0,100% calc(100% - 7px),calc(100% - 7px) 100%,0 100%,0 7px)"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" dangerouslySetInnerHTML="{{ tl.svg }}"></svg></span>
<span style="font-weight:600;font-size:1.02rem">{{ tl.title }}</span>
</div>
<p style="color:#9a9aa3;font-size:.88rem;line-height:1.55;margin:0">{{ tl.desc }}</p>
</div>
</sc-for>
</div>
<div style="margin-top:3rem;display:grid;grid-template-columns:1fr 1fr;gap:1rem">
<div style="background:linear-gradient(135deg,rgba(255,255,255,.06),rgba(255,255,255,.015));border:1px solid rgba(255,255,255,.14);padding:1.5rem 1.6rem;clip-path:polygon(16px 0,100% 0,100% calc(100% - 16px),calc(100% - 16px) 100%,0 100%,0 16px)">
<span style="font-family:'IBM Plex Mono',monospace;font-size:.62rem;letter-spacing:.2em;text-transform:uppercase;color:#c9c9cf">Für Entwickler</span>
<h3 style="font-size:1.2rem;font-weight:700;margin:.4rem 0 .4rem">API & Single Sign-On</h3>
<p style="color:#9a9aa3;font-size:.88rem;line-height:1.55;margin:0">Eigene Skripte posten über die API v1 mit Bearer-Schlüsseln und Bereichs-Rechten. Andere Dienste nutzen den Discord-Login des Bots mit.</p>
</div>
<div style="background:linear-gradient(135deg,rgba(240,120,0,.16),rgba(240,120,0,.04));border:1px solid rgba(255,154,31,.35);padding:1.5rem 1.6rem;clip-path:polygon(16px 0,100% 0,100% calc(100% - 16px),calc(100% - 16px) 100%,0 100%,0 16px)">
<span style="font-family:'IBM Plex Mono',monospace;font-size:.62rem;letter-spacing:.2em;text-transform:uppercase;color:#ffb340">Hosting</span>
<h3 style="font-size:1.2rem;font-weight:700;margin:.4rem 0 .4rem">Läuft überall</h3>
<p style="color:#9a9aa3;font-size:.88rem;line-height:1.55;margin:0">Node und SQLite in einem Container, ein Volume für die Daten. Nächtliche Sicherungen inklusive — von der Datenbank und allen Repositories.</p>
</div>
</div>
<p style="margin-top:2.5rem;font-family:'IBM Plex Mono',monospace;font-size:.74rem;color:#66666e">Der Bot läuft für die D4RKST3R-Community — <a href="#" style="color:#9a9aa3;text-decoration:underline" style-hover="color:#ffb340">zum Community-Hub</a>.</p>
</section>
</main>
<footer style="border-top:1px solid rgba(255,255,255,.08);padding:1.4rem 2.5rem;display:flex;align-items:center;gap:1.2rem;font-family:'IBM Plex Mono',monospace;font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;color:#9a9aa3">
<span style="display:inline-flex;align-items:center;gap:.5rem;font-weight:700;color:#ececee;font-family:'Chakra Petch',sans-serif"><img src="../brand/mark.png" alt="" style="width:20px;height:20px;object-fit:contain">D4RKBOT<span style="color:#ff9a1f">_</span></span>
<a href="#" style-hover="color:#ffb340">Quellcode</a><a href="#" style-hover="color:#ffb340">Status</a>
<span style="margin-left:auto;display:flex;gap:1.2rem"><a href="#" style-hover="color:#ffb340">Impressum</a><a href="#" style-hover="color:#ffb340">Datenschutz</a></span>
</footer>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script>
class Component extends DCLogic {
renderVals() {
const P = {
file: '<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/><path d="M10 9H8"/><path d="M16 13H8"/><path d="M16 17H8"/>',
server: '<rect width="20" height="8" x="2" y="2" rx="2" ry="2"/><rect width="20" height="8" x="2" y="14" rx="2" ry="2"/><line x1="6" x2="6.01" y1="6" y2="6"/><line x1="6" x2="6.01" y1="18" y2="18"/>',
trend: '<polyline points="22 7 13.5 15.5 8.5 10.5 2 17"/><polyline points="16 7 22 7 22 13"/>',
shield: '<path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>',
ticket: '<path d="M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"/><path d="M13 5v2"/><path d="M13 17v2"/><path d="M13 11v2"/>',
gift: '<rect x="3" y="8" width="18" height="4" rx="1"/><path d="M12 8v13"/><path d="M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7"/><path d="M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5"/>',
cake: '<path d="M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8"/><path d="M4 16s.5-1 2-1 2.5 2 4 2 2.5-2 4-2 2.5 2 4 2 2-1 2-1"/><path d="M2 21h20"/><path d="M7 8v3"/><path d="M12 8v3"/><path d="M17 8v3"/>',
wand: '<path d="m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72Z"/><path d="m14 7 3 3"/><path d="M5 6v4"/><path d="M19 14v4"/><path d="M10 2v2"/>',
roles: '<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>',
};
const m = (icon, title, desc) => ({ svg: { __html: P[icon] }, title, desc });
return {
heroStats: [
{ n: '40', label: 'Funktionen' },
{ n: '18', label: 'Slash-Befehle' },
{ n: '300+', label: 'Spiele im Monitor' },
{ n: '0 €', label: 'Kosten' },
],
tiles: [
m('file', 'Devlogs & Feeds', 'Entwicklungs-Berichte als gebrandetes Embed, durchsuchbar archiviert. Commits und Releases aus Gitea genauso.'),
m('server', 'Server-Monitor', 'Über 300 Spiele per gamedig, dazu FiveM. Live-Embed pro Server, Alarm bei Ausfall.'),
m('trend', 'Level & Aktivität', 'XP fürs Mitreden mit Rollen-Belohnungen und öffentlicher Bestenliste.'),
m('roles', 'Rollen-Menüs', 'Selbstbedienung per Knopfdruck — im Discord und im Browser.'),
m('ticket', 'Support & Kontakt', 'Tickets als private Threads mit Gesprächsprotokoll, dazu Modmail.'),
m('shield', 'Moderation', 'Verwarnungen mit Verlauf, Auszeiten, Aufräumen — alles im Mod-Log.'),
m('gift', 'Verlosungen', 'Teilnahme per Knopf, automatische Ziehung, Neuauslosung möglich.'),
m('cake', 'Geburtstage', 'Der Bot gratuliert morgens und vergibt eine Rolle für den Tag.'),
m('wand', 'Willkommens-Karten', 'Neue Mitglieder bekommen ein gerendertes Bild mit Avatar und Nummer.'),
],
};
}
}
</script>
</body>
</html>