caveman / index.html
aidn's picture
Update index.html
33ed38e verified
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gemma-4 Caveman — Semantische Kompression mit Stil</title>
<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=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
:root {
--bg: #0a0a0b;
--surface: #141416;
--surface-2: #1c1c20;
--border: #2a2a2f;
--text: #e8e8ec;
--text-muted: #8b8b96;
--accent: #d4a054;
--accent-dim: #d4a05420;
--green: #4ade80;
--red: #f87171;
}
html { scroll-behavior: smooth; }
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.7;
-webkit-font-smoothing: antialiased;
}
/* ─── Hero ─── */
.hero {
min-height: 85vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
padding: 4rem 2rem;
position: relative;
overflow: hidden;
}
.hero::before {
content: '';
position: absolute;
top: -40%;
left: 50%;
transform: translateX(-50%);
width: 800px;
height: 800px;
background: radial-gradient(circle, var(--accent-dim) 0%, transparent 70%);
pointer-events: none;
}
.badge {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.4rem 1rem;
border-radius: 100px;
border: 1px solid var(--border);
background: var(--surface);
font-size: 0.8rem;
color: var(--text-muted);
margin-bottom: 2rem;
letter-spacing: 0.03em;
}
.badge .dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--green);
animation: pulse-dot 2s ease-in-out infinite;
}
@keyframes pulse-dot {
0%, 100% { opacity: 0.4; }
50% { opacity: 1; }
}
.hero h1 {
font-size: clamp(3rem, 7vw, 5.5rem);
font-weight: 900;
letter-spacing: -0.03em;
line-height: 1.05;
margin-bottom: 1.5rem;
}
.hero h1 .rock { display: inline-block; }
.hero .tagline {
font-size: clamp(1.05rem, 2vw, 1.3rem);
color: var(--text-muted);
max-width: 560px;
margin-bottom: 3rem;
font-weight: 400;
}
.hero .tagline strong {
color: var(--accent);
font-weight: 600;
}
.scroll-hint {
position: absolute;
bottom: 2rem;
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
color: var(--text-muted);
font-size: 0.75rem;
letter-spacing: 0.1em;
text-transform: uppercase;
animation: float 3s ease-in-out infinite;
}
.scroll-hint svg {
width: 20px;
height: 20px;
stroke: var(--text-muted);
}
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(6px); }
}
/* ─── Sections ─── */
section {
max-width: 820px;
margin: 0 auto;
padding: 5rem 2rem;
}
.section-label {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.15em;
color: var(--accent);
font-weight: 600;
margin-bottom: 1rem;
}
h2 {
font-size: clamp(1.8rem, 4vw, 2.4rem);
font-weight: 800;
letter-spacing: -0.02em;
margin-bottom: 1.5rem;
line-height: 1.2;
}
p { color: var(--text-muted); margin-bottom: 1.2rem; }
p strong { color: var(--text); font-weight: 600; }
/* ─── Comparison Cards ─── */
.comparison {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.5rem;
margin: 3rem 0;
}
@media (max-width: 640px) {
.comparison { grid-template-columns: 1fr; }
}
.card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 16px;
padding: 1.8rem;
position: relative;
overflow: hidden;
}
.card::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 3px;
}
.card.bad::before { background: var(--red); }
.card.good::before { background: var(--green); }
.card-label {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.12em;
font-weight: 700;
margin-bottom: 1rem;
}
.card.bad .card-label { color: var(--red); }
.card.good .card-label { color: var(--green); }
.card pre {
font-family: 'JetBrains Mono', monospace;
font-size: 0.85rem;
line-height: 1.7;
color: var(--text);
white-space: pre-wrap;
word-break: break-word;
}
.card .token-count {
display: inline-flex;
align-items: center;
gap: 0.4rem;
margin-top: 1.2rem;
padding: 0.3rem 0.7rem;
border-radius: 6px;
font-size: 0.75rem;
font-weight: 600;
font-family: 'JetBrains Mono', monospace;
}
.card.bad .token-count {
background: #f8717115;
color: var(--red);
}
.card.good .token-count {
background: #4ade8015;
color: var(--green);
}
/* ─── Rules ─── */
.rules-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin: 2.5rem 0;
}
@media (max-width: 640px) {
.rules-grid { grid-template-columns: 1fr; }
}
.rule {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
padding: 1.4rem;
}
.rule .emoji {
font-size: 1.5rem;
margin-bottom: 0.6rem;
}
.rule h3 {
font-size: 0.95rem;
font-weight: 700;
margin-bottom: 0.3rem;
}
.rule p {
font-size: 0.85rem;
margin-bottom: 0;
line-height: 1.5;
}
/* ─── Stats Strip ─── */
.stats {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
margin: 3rem 0;
}
@media (max-width: 640px) {
.stats { grid-template-columns: 1fr; }
}
.stat {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
padding: 1.5rem;
text-align: center;
}
.stat .number {
font-size: 2.2rem;
font-weight: 900;
letter-spacing: -0.03em;
color: var(--accent);
}
.stat .label {
font-size: 0.8rem;
color: var(--text-muted);
margin-top: 0.3rem;
}
/* ─── App Embed ─── */
.embed-section {
max-width: 920px;
margin: 0 auto;
padding: 5rem 2rem;
text-align: center;
}
@media (max-width: 768px) {
.embed-section {
padding: 3rem 0;
}
.embed-section .section-label,
.embed-section h2,
.embed-section > p {
padding: 0 1.5rem;
}
.embed-wrapper {
border-radius: 0;
border-left: none;
border-right: none;
}
.embed-wrapper iframe {
height: 85vh;
min-height: 600px;
}
}
.embed-wrapper {
margin-top: 2.5rem;
border-radius: 20px;
border: 1px solid var(--border);
overflow: hidden;
background: var(--surface);
box-shadow: 0 25px 80px -20px rgba(0,0,0,0.5);
}
.embed-bar {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.8rem 1.2rem;
background: var(--surface-2);
border-bottom: 1px solid var(--border);
}
.embed-bar .dot-row { display: flex; gap: 6px; }
.embed-bar .dot-row span {
width: 12px; height: 12px;
border-radius: 50%;
background: var(--border);
}
.embed-bar .url {
flex: 1;
text-align: center;
font-size: 0.75rem;
font-family: 'JetBrains Mono', monospace;
color: var(--text-muted);
}
.embed-wrapper iframe {
width: 100%;
height: 1100px;
border: none;
display: block;
}
/* ─── Footer ─── */
footer.site-footer {
text-align: center;
padding: 3rem 2rem 4rem;
font-size: 0.8rem;
color: var(--text-muted);
border-top: 1px solid var(--border);
max-width: 820px;
margin: 0 auto;
}
footer.site-footer a {
color: var(--accent);
text-decoration: none;
}
footer.site-footer a:hover {
text-decoration: underline;
}
/* ─── Selection ─── */
::selection {
background: var(--accent);
color: var(--bg);
}
</style>
</head>
<body>
<!-- ─── Hero ─── -->
<div class="hero">
<div class="badge">
<span class="dot"></span>
Gemma-4-31B-IT · Live auf Hugging Face
</div>
<h1><span class="rock">🪨</span> Caveman</h1>
<p class="tagline">
31 Milliarden Parameter. Null Höflichkeit.<br>
Ein Experiment in <strong>semantischer Kompression</strong> — weniger Tokens, gleiche Information, maximale Ironie.
</p>
<a class="scroll-hint" href="#idea">
<span>Scrollen</span>
<svg viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round"><path d="M12 5v14M5 12l7 7 7-7"/></svg>
</a>
</div>
<!-- ─── Idee ─── -->
<section id="idea">
<div class="section-label">Die Idee</div>
<h2>Was, wenn dein LLM redet wie ein Höhlenmensch?</h2>
<p>
Ein viraler Post zeigte: Wenn man ein großes Sprachmodell anweist, <strong>wie ein Höhlenmensch zu antworten</strong> — keine Artikel, keine Füllwörter, nur Kernbotschaft — <strong>spart man massiv Tokens</strong>. Weniger Tokens bedeuten schnellere Antworten, geringere Kosten, und oft sogar <strong>klarere Information</strong>.
</p>
<p>
Das hier ist die Umsetzung als echte App: <strong>Gemma-4 Caveman</strong>. Google's 31-Milliarden-Parameter-Modell, gezähmt durch einen System-Prompt, der Höflichkeit mit dem Aussterben bestraft.
</p>
</section>
<!-- ─── Vergleich ─── -->
<section>
<div class="section-label">Vorher / Nachher</div>
<h2>Gleiche Frage. Anderer Vibe.</h2>
<p>Links: Wie ein normales LLM antwortet. Rechts: Höhlenmensch-Modus.</p>
<div class="comparison">
<div class="card bad">
<div class="card-label">🦕 Normales LLM</div>
<pre>Gerne erkläre ich Ihnen, was ein Large
Language Model ist. Es handelt sich
dabei um ein neuronales Netz, das auf
sehr großen Textmengen trainiert wird,
um natürliche Sprache zu verstehen
und zu generieren. Die zugrunde
liegende Architektur ist in der Regel
ein sogenannter Transformer...</pre>
<div class="token-count">~68 Tokens</div>
</div>
<div class="card good">
<div class="card-label">🪨 Caveman</div>
<pre>LLM bedeuten großes Sprachmodell.
Fressen riesige Textmengen.
Vorhersagen nächstes Wort.
Nutzen Transformer-Architektur.</pre>
<div class="token-count">~22 Tokens · 68% gespart</div>
</div>
</div>
</section>
<!-- ─── Regeln ─── -->
<section>
<div class="section-label">Steinzeit-Gesetze</div>
<h2>Die Regeln des Höhlenmenschen</h2>
<p>Der System-Prompt erzwingt diese Gesetze. Bei Verstoß: Säbelzahntiger.</p>
<div class="rules-grid">
<div class="rule">
<div class="emoji">✂️</div>
<h3>Maximal 7 Wörter</h3>
<p>Pro Satz. Weniger = besser. Grunt gut.</p>
</div>
<div class="rule">
<div class="emoji">🚫</div>
<h3>Keine Füllwörter</h3>
<p>der/die/das/ein — wegschmeißen wie faules Mammut.</p>
</div>
<div class="rule">
<div class="emoji">🗿</div>
<h3>Infinitiv. Immer.</h3>
<p>„lernen" statt „lernt". Höhlenmensch nicht konjugieren können.</p>
</div>
<div class="rule">
<div class="emoji">💀</div>
<h3>Null Höflichkeit</h3>
<p>„Gerne" und „Sicher" = Schwäche = Aussterben.</p>
</div>
<div class="rule">
<div class="emoji">🥩</div>
<h3>Fleisch, nicht Knochen</h3>
<p>Ergebnis zuerst. Keine Einleitungen. Kein Vorgeplänkel.</p>
</div>
<div class="rule">
<div class="emoji">🧮</div>
<h3>Symbole sparsam</h3>
<p>Kurze Sätze mit Verben statt Pfeil-Ketten.</p>
</div>
</div>
</section>
<!-- ─── Stats ─── -->
<section>
<div class="stats">
<div class="stat">
<div class="number">31B</div>
<div class="label">Parameter</div>
</div>
<div class="stat">
<div class="number">~68%</div>
<div class="label">Token-Einsparung</div>
</div>
<div class="stat">
<div class="number">0</div>
<div class="label">Höflichkeit</div>
</div>
</div>
</section>
<!-- ─── Eingebettete App ─── -->
<div class="embed-section" id="app">
<div class="section-label">Ausprobieren</div>
<h2>Frag den Höhlenmenschen</h2>
<p>Live-Demo — läuft auf Hugging Face Spaces mit Gemma-4-31B-IT.</p>
<div class="embed-wrapper">
<div class="embed-bar">
<div class="dot-row">
<span></span><span></span><span></span>
</div>
<div class="url">aidn-gemma-4-caveman.hf.space</div>
</div>
<iframe
src="https://aidn-gemma-4-caveman.hf.space"
loading="lazy"
title="Gemma-4 Caveman Chat"
></iframe>
</div>
</div>
<!-- ─── Footer ─── -->
<footer class="site-footer">
Gebaut mit <a href="https://huggingface.co/google/gemma-4-31B-it">Gemma-4-31B-IT</a> · Gehostet auf <a href="https://huggingface.co/spaces/aidn/gemma-4-caveman">Hugging Face Spaces</a><br>
Keine Mammuts wurden verletzt.
</footer>
</body>
</html>