xPulse
πŸ‡©πŸ‡ͺ DE

xpulse-web – Konzept & Strategie

Status: CONCEPT v3 Β· Repo: xpulse-web Begleitdokument: CONTENT_xpulse-web.md (Seiteninhalte) Aktualisiert MΓ€rz 2026


Ziel & Prinzip

xpulse.one ist die Plattform. Nicht nur eine Landing Page fΓΌr den Chat, sondern der gemeinsame Heimatort fΓΌr alle xPulse Tools, Komponenten und plattformweite Inhalte.

chat.xpulse.one ist das erste Tool. Weitere kΓΆnnen folgen.

Single Responsibility:

Die /info-Seite im Chat wird zu einem minimalen About-Screen (Version, One-Liner, Links nach xpulse.one) – keine eigenen Inhalte mehr.


URL-Struktur

/{slug} ← Plattform-weit (allgemein & rechtlich)
/tool/{tool-slug}/ ← Tool Landing & Tool-spezifische Inhalte
/tool/{tool-slug}/{sub-slug}/ ← Tool-Unterseiten
/component/{component-slug}/ ← Shared Components Übersicht
/component/{component-slug}/{sub}/ ← Component-Unterseiten

Domain-Struktur

── Plattform ──────────────────────────────────────────
xpulse.one/ ← Plattform Landing
xpulse.one/about/ ← Was ist xPulse (die Plattform)
── Tools ──────────────────────────────────────────────
xpulse.one/tool/chat/ ← Chat Tool Landing
xpulse.one/tool/chat/guide/ ← Erste Schritte (Chat-spezifisch)
xpulse.one/tool/chat/security/ ← Sicherheit & AnonymitΓ€t (Chat-spezifisch)
xpulse.one/tool/chat/changelog/ ← Chat Changelog ← Version-Pill im Chat
── Components ─────────────────────────────────────────
xpulse.one/component/ui/ ← Shared UI Komponenten (TBD)
xpulse.one/component/ui/examples/ ← Beispiele / Showcase (TBD)
── Rechtlich (Plattform-Basis) ────────────────────────
xpulse.one/privacy/ ← Datenschutz Plattform-Basis
xpulse.one/terms/ ← Nutzungsbedingungen Plattform-Basis
xpulse.one/disclaimer/ ← Haftungsausschluss Plattform-Basis
xpulse.one/imprint/ ← Impressum
── Rechtlich (Tool-spezifisch) ────────────────────────
xpulse.one/tool/chat/privacy/ ← Datenschutz-ErgΓ€nzung Chat
xpulse.one/tool/chat/terms/ ← Nutzungsbedingungen-ErgΓ€nzung Chat
xpulse.one/tool/chat/disclaimer/ ← Haftungsausschluss-ErgΓ€nzung Chat
── App ────────────────────────────────────────────────
chat.xpulse.one/ ← xPulse Chat App (p2p-chat Repo)

Rechtliches – Vererbungsmodell (Option A)

Plattform-weite Rechtsdokumente gelten als Basis fΓΌr alle Tools. Tool-spezifische Dokumente sind ErgΓ€nzungen, keine Ersetzungen.

xpulse.one/privacy/ ← gilt immer, fΓΌr alle Tools
xpulse.one/tool/chat/privacy/ ← gilt zusΓ€tzlich, nur fΓΌr Chat

Prinzip:

Verlinkung in der Chat-App:

Ort Ziel
/info – Datenschutz xpulse.one/tool/chat/privacy/ (verweist intern auf Plattform-Basis)
/info – Nutzungsbedingungen xpulse.one/tool/chat/terms/
/info – Haftungsausschluss xpulse.one/tool/chat/disclaimer/
/info – Impressum xpulse.one/imprint/ (nur Plattform, kein Tool-spezifisches)

Seiten-Übersicht

Route Titel Typ Status
/ xPulse Plattform Landing Planned
/about/ Über xPulse Plattform Info Planned
/tool/chat/ xPulse Chat Tool Landing Planned
/tool/chat/guide/ Erste Schritte Tool Info Planned
/tool/chat/security/ Sicherheit & AnonymitΓ€t Tool Info Planned
/tool/chat/changelog/ Changelog Tool Info Planned
/tool/chat/status/ Status Tool Info TBD
/component/ui/ UI Komponenten Component TBD
/privacy/ Datenschutz (Plattform) Rechtlich Planned
/terms/ Nutzungsbedingungen (Plattform) Rechtlich Planned
/disclaimer/ Haftungsausschluss (Plattform) Rechtlich Planned
/imprint/ Impressum Rechtlich Planned
/tool/chat/privacy/ Datenschutz (Chat) Rechtlich Planned
/tool/chat/terms/ Nutzungsbedingungen (Chat) Rechtlich Planned
/tool/chat/disclaimer/ Haftungsausschluss (Chat) Rechtlich Planned

Repo-Struktur

xpulse-web/
docs/
CONCEPT_xpulse-web.md
CONTENT_xpulse-web.md
public/
index.html ← Plattform Landing
about/
index.html
tool/
chat/
index.html ← Chat Tool Landing
guide/
index.html
security/
index.html
changelog/
index.html
status/
index.html ← TBD
privacy/
index.html
terms/
index.html
disclaimer/
index.html
component/
ui/
index.html ← TBD
examples/
index.html ← TBD
privacy/
index.html ← Plattform-Basis
terms/
index.html
disclaimer/
index.html
imprint/
index.html
assets/
favicon.svg
icons/
icon-192.png
icon-512.png
nginx.conf
Dockerfile
docker-compose.yml

Infrastruktur

Docker / Traefik

# docker-compose.yml (xpulse-web)
services:
web:
build: .
restart: always
networks:
- webproxy
- internal
labels:
- traefik.enable=true
- traefik.docker.network=webproxy
# HTTP β†’ HTTPS redirect
- traefik.http.routers.xpulseweb.rule=Host(`xpulse.one`) || Host(`www.xpulse.one`)
- traefik.http.routers.xpulseweb.entrypoints=http
- traefik.http.routers.xpulseweb.middlewares=https-redirect
# HTTPS
- traefik.http.routers.xpulseweb-secured.rule=Host(`xpulse.one`) || Host(`www.xpulse.one`)
- traefik.http.routers.xpulseweb-secured.entrypoints=https
- traefik.http.routers.xpulseweb-secured.tls=true
- traefik.http.routers.xpulseweb-secured.tls.certresolver=le
- traefik.http.services.xpulseweb.loadbalancer.server.port=80
networks:
webproxy:
external: true
internal:
external: true

nginx

server {
listen 80;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ $uri/index.html =404;
}
}

Landingpage Layout

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚
β”‚ xPulse β”‚ ← Logo (Serif, accent)
β”‚ ───────────────────── β”‚
β”‚ P2P Chat. Privat. VerschlΓΌsseltβ”‚ ← Tagline (aktuell Chat-fokussiert,
β”‚ β”‚ spΓ€ter platform-weiter)
β”‚ [β†’ Chat ΓΆffnen] β”‚ ← CTA β†’ chat.xpulse.one
β”‚ β”‚
β”‚ ───────────────────── β”‚
β”‚ β”‚
β”‚ πŸ”’ Ende-zu-Ende verschlΓΌsselt β”‚ ← Feature Pills
β”‚ ⬑ Peer-to-Peer, kein Server β”‚
β”‚ πŸ“΅ Keine Datenspeicherung β”‚
β”‚ πŸ“¦ Installierbar als PWA β”‚
β”‚ β”‚
β”‚ ───────────────────── β”‚
β”‚ β”‚
β”‚ Guide Β· Security Β· Changelog β”‚ ← Navigation Tool-Infos
β”‚ β”‚
β”‚ ───────────────────── β”‚
β”‚ β”‚
β”‚ Datenschutz Β· Nutzungsbeding. β”‚ ← Footer (Plattform-Basis, rechtlich)
β”‚ Haftungsausschluss Β· Impressumβ”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Chat-App `/info` – neue Rolle ab v1.3.0

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ xPulse Chat β”‚
β”‚ Version 1.3.0 β”‚
β”‚ β”‚
β”‚ P2P Chat. Privat. β”‚
β”‚ Ende-zu-Ende verschlΓΌsselt. β”‚
β”‚ β”‚
β”‚ ───────────────────────── β”‚
β”‚ β”‚
β”‚ β†’ Erste Schritte β”‚ /tool/chat/guide/
β”‚ β†’ Sicherheit & AnonymitΓ€t β”‚ /tool/chat/security/
β”‚ β†’ Changelog β”‚ /tool/chat/changelog/
β”‚ β”‚
β”‚ ───────────────────────── β”‚
β”‚ β”‚
β”‚ Datenschutz β”‚ /tool/chat/privacy/
β”‚ Nutzungsbedingungen β”‚ /tool/chat/terms/
β”‚ Haftungsausschluss β”‚ /tool/chat/disclaimer/
β”‚ Impressum β”‚ /imprint/
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Verlinkung Chat ↔ xpulse.one

Ort im Chat Ziel Ab Version
/info – Guide xpulse.one/tool/chat/guide/ v1.3.0
/info – Security xpulse.one/tool/chat/security/ v1.3.0
/info – Changelog xpulse.one/tool/chat/changelog/ v1.3.0
/info – Datenschutz xpulse.one/tool/chat/privacy/ v1.1.1
/info – Nutzungsbedingungen xpulse.one/tool/chat/terms/ v1.1.1
/info – Haftungsausschluss xpulse.one/tool/chat/disclaimer/ v1.1.1
/info – Impressum xpulse.one/imprint/ v1.1.1
Sidebar Version-Pill xpulse.one/tool/chat/changelog/ v1.3.0
Sidebar Footer xpulse.one/tool/chat/privacy/ etc. v1.3.0

Styleguide

Identisch mit der Chat-App und den Feedback-Forms – ein einheitliches Design ΓΌber alle xPulse-PrΓ€senzen.

CSS Custom Properties

:root {
--bg: #0d0d0d;
--surface: #141414;
--border: #222;
--muted: #444;
--text: #c8c8c8;
--text-dim: #555;
--accent: #8703b0;
--accent2: #7eb8a4;
--danger: #c0606a;
--mono: 'JetBrains Mono', ui-monospace, 'Cascadia Code', 'Fira Code', Consolas, monospace;
--serif: 'Fraunces', Georgia, ui-serif, serif;
}

Typografie

Element Font Grâße Gewicht Besonderheit
Logo / Brand --serif 2.4rem 300 color: var(--accent)
Fließtext --mono 13px 400 line-height: 1.6
Labels / Badges --mono 10–11px 400 letter-spacing: 0.08–0.12em; text-transform: uppercase
Section Titles --mono 10px 400 color: var(--accent2); letter-spacing: 0.12em
Code --mono 11px 400 background: var(--surface); border: 1px solid var(--border)

AbstΓ€nde & Formen

border-radius: 2px;
border: 1px solid var(--border);
padding (Karten): 1rem 1.2rem;
max-width (Content): 640px;
margin: 0 auto;

Noise-Overlay

body::before {
content: '';
position: fixed;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E");
pointer-events: none;
z-index: 9999;
opacity: 0.4;
}

Buttons

.btn-primary {
background: var(--accent);
color: #fff;
border: none;
font-family: var(--mono);
font-size: 12px;
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
padding: 0.75rem 1.5rem;
border-radius: 2px;
cursor: pointer;
transition: opacity 0.15s, transform 0.1s;
}
.btn-primary:hover { opacity: 0.85; }
.btn-primary:active { transform: scale(0.98); }
.btn-secondary {
background: none;
color: var(--text);
border: 1px solid var(--border);
}
.btn-secondary:hover { border-color: var(--accent2); color: var(--accent2); }
a {
color: var(--text-dim);
text-decoration: none;
letter-spacing: 0.08em;
text-transform: uppercase;
font-size: 11px;
transition: color 0.15s;
}
a:hover { color: var(--accent); }

Animations

@keyframes fadeIn {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
animation: fadeIn 0.3s ease both;

i18n – Internationalisierung

Strategie

Keine URL-Slugs fΓΌr Sprachen (/de/, /en/ entfΓ€llt). Die Sprache ist eine Nutzer-PrΓ€ferenz, keine Route.

Screenreader-KompatibilitΓ€t

Texte stehen immer als echter Inhalt im DOM – nie leer. Der Default-Text (Deutsch) ist direkt im HTML eingebettet. Beim Sprachwechsel ersetzt JS den textContent / innerHTML der Elemente. Data-Attribute dienen nur als Hook, nicht als Textquelle.

<!-- Korrekt: echter Text im HTML, data-i18n nur als Hook -->
<p data-i18n="chat.guide.pairing.intro">
Um mit jemandem zu chatten, mΓΌsst ihr euch einmalig pairen...
</p>
<!-- Falsch: leeres Element, Text nur via JS -->
<p data-i18n="chat.guide.pairing.intro"></p>

Dateistruktur

locales/
de/
platform.about.json
platform.privacy.json
platform.terms.json
platform.disclaimer.json
tool.chat.guide.json
tool.chat.security.json
tool.chat.changelog.json
tool.chat.privacy.json
tool.chat.terms.json
tool.chat.disclaimer.json
en/
platform.about.json
platform.privacy.json
...

Dateinamen spiegeln die URL-Struktur wider: {scope}.{tool?}.{page}.json. Der locales/-Ordner wird beim Start vollstΓ€ndig geparst – neue Dateien werden automatisch erkannt, kein manuelles Registrieren.

JSON-Format

{
"chat.guide.pairing.intro": "Um mit jemandem zu chatten...",
"chat.guide.pairing.step1": "Eine Person ΓΆffnet β€žPeer hinzufΓΌgen"...",
"chat.guide.faq.storage": "Ausschließlich lokal in deinem Browser..."
}

Flache Key-Value-Struktur. Keys folgen dem Schema {scope}.{page}.{block}.{element}. Kein tief verschachteltes JSON – einfacher zu durchsuchen und zu pflegen.

JavaScript – i18n.js

// Verantwortlichkeiten von i18n.js:
// 1. Sprache aus localStorage lesen (Fallback: 'de')
// 2. Passendes JSON fΓΌr die aktuelle Seite laden
// 3. Alle [data-i18n] Elemente mit textContent/innerHTML befΓΌllen
// 4. <html lang="xx"> setzen
// 5. Lang-Switch: neue Sprache laden, DOM aktualisieren, localStorage schreiben
const STORAGE_KEY = 'xpulse_lang';
const DEFAULT_LANG = 'de';

Jede Seite bindet nur das JSON ein das sie braucht – kein monolithisches Translations-Bundle.

HTML-Integration

<html lang="de">
...
<!-- Sprachwechsel-Button -->
<button data-lang-switch="en">EN</button>
<button data-lang-switch="de">DE</button>
<!-- Übersetzbarer Inhalt -->
<h1 data-i18n="chat.guide.title">Erste Schritte</h1>
<p data-i18n="chat.guide.pairing.intro">Um mit jemandem...</p>

Offene Punkte

Thema Status
i18n – Implementierung Geplant, nΓ€chster Schritt
/tool/chat/status/ – Inhalt & Format TBD
Changelog-Format (manuell vs. auto-build) TBD
TURN-only Modus im Chat Geplant, Version offen
/component/ui/ – Scope & Inhalt TBD

Release-Reihenfolge

xpulse-web v1.0.0 β†’ Plattform Landing + Tool Chat (Guide, Security, Changelog)
+ alle Rechtsseiten (Plattform-Basis + Chat-ErgΓ€nzungen)
↓
chat v1.1.1 β†’ Rechtliche Links auf xpulse.one/tool/chat/* in /info
↓
chat v1.2.0 β†’ v1.1.1 bereits gemergt
↓
chat v1.3.0 β†’ /info als reiner About-Screen, alle Links β†’ xpulse.one
Version-Pill β†’ xpulse.one/tool/chat/changelog/
Sidebar Footer β†’ xpulse.one/tool/chat/* Rechtliches
de/concept/i18n.md 2026-04-20