feat: i18n annotations — data-de/data-en + toggle for all 54 custom sites

Phase 2 of i18n rollout:
- All 54 static custom sites now have data-de/data-en attributes on
  visible text elements with English translations
- i18n.js script tag injected into all sites
- Language toggle button with machine-translation disclaimer added
  to every site's footer area
- Brand names / domain wordplay preserved unchanged in both languages
- 2 dynamic sites (dasbes.de, dumusst.com) skipped — no static HTML
This commit is contained in:
m
2026-04-01 13:19:40 +02:00
parent 846fc04444
commit 5c92a7b021
53 changed files with 1850 additions and 1475 deletions

View File

@@ -437,32 +437,32 @@
<nav>
<div class="container">
<div class="logo">k<span class="ai">AI</span>nstress</div>
<a href="#waitlist">Zugang anfragen</a>
<a href="#waitlist" data-de="Zugang anfragen" data-en="Request access">Zugang anfragen</a>
</div>
</nav>
<section class="hero">
<div class="container">
<div class="hero-badge">
<span class="dot"></span>Coming Soon
<span class="dot"></span><span data-de="Coming Soon" data-en="Coming Soon">Coming Soon</span>
</div>
<h1>k<span class="ai">AI</span>n<span class="stress">stress</span>.</h1>
<p>
<p data-de="Dein &lt;strong&gt;KI-Assistent&lt;/strong&gt;, der Alltagschaos in Ruhe verwandelt. E-Mails, Termine, Aufgaben — automatisch sortiert, priorisiert, erledigt." data-en="Your &lt;strong&gt;AI assistant&lt;/strong&gt; that transforms everyday chaos into calm. Emails, appointments, tasks — automatically sorted, prioritised, done.">
Dein <strong>KI-Assistent</strong>, der Alltagschaos in Ruhe verwandelt.
E-Mails, Termine, Aufgaben — automatisch sortiert, priorisiert, erledigt.
</p>
<div class="cta-group">
<a href="#waitlist" class="btn btn-primary">Zugang anfragen</a>
<a href="#features" class="btn btn-ghost">Mehr erfahren</a>
<a href="#waitlist" class="btn btn-primary" data-de="Zugang anfragen" data-en="Request access">Zugang anfragen</a>
<a href="#features" class="btn btn-ghost" data-de="Mehr erfahren" data-en="Learn more">Mehr erfahren</a>
</div>
<div class="terminal">
<div class="terminal-dots"><span></span><span></span><span></span></div>
<div><span class="prompt">$</span> <span class="cmd">kainstress status</span></div>
<div><span class="out">Inbox: 47 Mails verarbeitet, 3 brauchen dich</span></div>
<div><span class="out">Kalender: Doppelbuchung um 14:00 geloest</span></div>
<div><span class="out">Tasks: 2 erledigt, 1 Erinnerung um 17:00</span></div>
<div><span class="dim">Alles im Griff. Kein Stress.</span></div>
<div><span class="out" data-de="Inbox: 47 Mails verarbeitet, 3 brauchen dich" data-en="Inbox: 47 mails processed, 3 need you">Inbox: 47 Mails verarbeitet, 3 brauchen dich</span></div>
<div><span class="out" data-de="Kalender: Doppelbuchung um 14:00 geloest" data-en="Calendar: double booking at 14:00 resolved">Kalender: Doppelbuchung um 14:00 geloest</span></div>
<div><span class="out" data-de="Tasks: 2 erledigt, 1 Erinnerung um 17:00" data-en="Tasks: 2 done, 1 reminder at 17:00">Tasks: 2 erledigt, 1 Erinnerung um 17:00</span></div>
<div><span class="dim" data-de="Alles im Griff. Kein Stress." data-en="Everything under control. No stress.">Alles im Griff. Kein Stress.</span></div>
</div>
</div>
</section>
@@ -471,9 +471,9 @@
<section id="features">
<div class="container">
<div class="section-label">Was kAInstress kann</div>
<h2>Dein unsichtbarer Assistent.</h2>
<div class="section-desc">
<div class="section-label" data-de="Was kAInstress kann" data-en="What kAInstress can do">Was kAInstress kann</div>
<h2 data-de="Dein unsichtbarer Assistent." data-en="Your invisible assistant.">Dein unsichtbarer Assistent.</h2>
<div class="section-desc" data-de="Kein neues Tool lernen. Kein Dashboard checken. kAInstress arbeitet im Hintergrund — du merkst nur, dass alles laeuft." data-en="No new tool to learn. No dashboard to check. kAInstress works in the background — you just notice that everything runs.">
Kein neues Tool lernen. Kein Dashboard checken.
kAInstress arbeitet im Hintergrund — du merkst nur, dass alles laeuft.
</div>
@@ -481,8 +481,8 @@
<div class="features-grid">
<div class="feature-card">
<div class="feature-icon">M</div>
<h3>E-Mail auf Autopilot</h3>
<p>
<h3 data-de="E-Mail auf Autopilot" data-en="Email on autopilot">E-Mail auf Autopilot</h3>
<p data-de="Liest, sortiert, priorisiert. Entwirft Antworten in deinem Stil. Du sagst nur noch Ja oder Nein." data-en="Reads, sorts, prioritises. Drafts replies in your style. You just say yes or no.">
Liest, sortiert, priorisiert. Entwirft Antworten in deinem Stil.
Du sagst nur noch Ja oder Nein.
</p>
@@ -490,8 +490,8 @@
<div class="feature-card">
<div class="feature-icon">K</div>
<h3>Kalender-Tetris</h3>
<p>
<h3 data-de="Kalender-Tetris" data-en="Calendar Tetris">Kalender-Tetris</h3>
<p data-de="Erkennt Konflikte, schlaegt Alternativen vor, koordiniert mit anderen. Schluss mit Terminchaos." data-en="Detects conflicts, suggests alternatives, coordinates with others. No more scheduling chaos.">
Erkennt Konflikte, schlaegt Alternativen vor, koordiniert mit anderen.
Schluss mit Terminchaos.
</p>
@@ -499,8 +499,8 @@
<div class="feature-card">
<div class="feature-icon">V</div>
<h3>Sprachnachrichten? Erledigt.</h3>
<p>
<h3 data-de="Sprachnachrichten? Erledigt." data-en="Voice messages? Done.">Sprachnachrichten? Erledigt.</h3>
<p data-de="Transkribiert, fasst zusammen, extrahiert To-Dos. Die 5-Minuten-Audio wird zum Dreizeiler." data-en="Transcribes, summarises, extracts to-dos. The 5-minute audio becomes three lines.">
Transkribiert, fasst zusammen, extrahiert To-Dos.
Die 5-Minuten-Audio wird zum Dreizeiler.
</p>
@@ -508,8 +508,8 @@
<div class="feature-card">
<div class="feature-icon">A</div>
<h3>Aufgaben im Griff</h3>
<p>
<h3 data-de="Aufgaben im Griff" data-en="Tasks under control">Aufgaben im Griff</h3>
<p data-de="Sammelt To-Dos aus allen Kanaelen. Priorisiert nach Kontext. Erinnert zum richtigen Zeitpunkt." data-en="Collects to-dos from all channels. Prioritises by context. Reminds at the right moment.">
Sammelt To-Dos aus allen Kanaelen. Priorisiert nach Kontext.
Erinnert zum richtigen Zeitpunkt.
</p>
@@ -522,9 +522,9 @@
<section id="how">
<div class="container">
<div class="section-label">So funktioniert es</div>
<h2>Einrichten. Zuruecklehnen.</h2>
<div class="section-desc">
<div class="section-label" data-de="So funktioniert es" data-en="How it works">So funktioniert es</div>
<h2 data-de="Einrichten. Zuruecklehnen." data-en="Set up. Lean back.">Einrichten. Zuruecklehnen.</h2>
<div class="section-desc" data-de="kAInstress laeuft auf deiner eigenen Infrastruktur. Deine Daten bleiben bei dir — keine Cloud, kein Mithoeren." data-en="kAInstress runs on your own infrastructure. Your data stays with you — no cloud, no eavesdropping.">
kAInstress laeuft auf deiner eigenen Infrastruktur.
Deine Daten bleiben bei dir — keine Cloud, kein Mithoeren.
</div>
@@ -533,22 +533,22 @@
<div class="step">
<div class="step-num">1</div>
<div class="step-content">
<h3>Accounts verbinden</h3>
<p>E-Mail, Kalender, Messenger — kAInstress dockt an deine bestehenden Systeme an. Standard-Protokolle, keine Vendor-Lock-ins.</p>
<h3 data-de="Accounts verbinden" data-en="Connect accounts">Accounts verbinden</h3>
<p data-de="E-Mail, Kalender, Messenger — kAInstress dockt an deine bestehenden Systeme an. Standard-Protokolle, keine Vendor-Lock-ins." data-en="Email, calendar, messenger — kAInstress connects to your existing systems. Standard protocols, no vendor lock-ins.">E-Mail, Kalender, Messenger — kAInstress dockt an deine bestehenden Systeme an. Standard-Protokolle, keine Vendor-Lock-ins.</p>
</div>
</div>
<div class="step">
<div class="step-num">2</div>
<div class="step-content">
<h3>Stil lernen</h3>
<p>Die KI lernt wie du schreibst, was dir wichtig ist, wer Prioritaet hat. Kein generisches Modell — dein persoenlicher Assistent.</p>
<h3 data-de="Stil lernen" data-en="Learn your style">Stil lernen</h3>
<p data-de="Die KI lernt wie du schreibst, was dir wichtig ist, wer Prioritaet hat. Kein generisches Modell — dein persoenlicher Assistent." data-en="The AI learns how you write, what matters to you, who has priority. No generic model — your personal assistant.">Die KI lernt wie du schreibst, was dir wichtig ist, wer Prioritaet hat. Kein generisches Modell — dein persoenlicher Assistent.</p>
</div>
</div>
<div class="step">
<div class="step-num">3</div>
<div class="step-content">
<h3>Stress weg</h3>
<p>Mails beantworten, Termine jonglieren, Aufgaben abarbeiten. Im Hintergrund, in deinem Namen, unter deiner Kontrolle.</p>
<h3 data-de="Stress weg" data-en="Stress gone">Stress weg</h3>
<p data-de="Mails beantworten, Termine jonglieren, Aufgaben abarbeiten. Im Hintergrund, in deinem Namen, unter deiner Kontrolle." data-en="Answering emails, juggling appointments, working through tasks. In the background, in your name, under your control.">Mails beantworten, Termine jonglieren, Aufgaben abarbeiten. Im Hintergrund, in deinem Namen, unter deiner Kontrolle.</p>
</div>
</div>
</div>
@@ -559,13 +559,13 @@
<section id="waitlist" class="cta-section">
<div class="container">
<div class="section-label">Early Access</div>
<h2>Stress war gestern.</h2>
<div class="section-desc">
<div class="section-label" data-de="Early Access" data-en="Early Access">Early Access</div>
<h2 data-de="Stress war gestern." data-en="Stress is so yesterday.">Stress war gestern.</h2>
<div class="section-desc" data-de="kAInstress ist in der Entwicklung. Meld dich an und gehoer zu den Ersten, die ihren Alltag auf Autopilot setzen." data-en="kAInstress is in development. Sign up and be among the first to put your daily life on autopilot.">
kAInstress ist in der Entwicklung. Meld dich an und gehoer zu den Ersten,
die ihren Alltag auf Autopilot setzen.
</div>
<a href="mailto:mail@msbls.de?subject=kAInstress%20—%20Interesse" class="btn btn-primary">
<a href="mailto:mail@msbls.de?subject=kAInstress%20—%20Interesse" class="btn btn-primary" data-de="Zugang anfragen" data-en="Request access">
Zugang anfragen
</a>
</div>
@@ -573,9 +573,14 @@
<footer>
<div class="container">
<p>k<span style="color: var(--accent);">AI</span>nstress.de — ein Projekt von <a href="https://msbls.de" target="_blank" rel="noopener">msbls.de</a></p>
<p>k<span style="color: var(--accent);">AI</span>nstress.de — <span data-de="ein Projekt von" data-en="a project by">ein Projekt von</span> <a href="https://msbls.de" target="_blank" rel="noopener">msbls.de</a></p>
<div style="text-align:center;margin-top:16px;">
<button data-i18n-toggle title="Maschinell übersetzt / Machine-translated — German is the original." style="background:none;border:1px solid var(--text-muted,#444);color:var(--text-muted,#444);font-size:0.65rem;letter-spacing:0.1em;padding:4px 12px;border-radius:4px;cursor:pointer;">EN</button>
<br><small data-de="Maschinell übersetzt" data-en="Machine-translated" style="color:var(--text-muted,#444);font-size:0.6rem;opacity:0.5;">Maschinell übersetzt</small>
</div>
</div>
</footer>
<script src="/shared/i18n.js"></script>
</body>
</html>