Wahre Lebenswerte - Portal-Erlebnis Umsetzung

Projekt-Briefing für VS Code Session


1. Projekt-Kontext

Marke & Vision

Wahre Lebenswerte - Eine Marke für Menschen, die den “Weg ins Neue” gehen wollen. Die Website soll kein klassisches Scrollen sein, sondern ein immersives Erlebnis - inspiriert von Apple’s cinematischen Scroll-Erlebnissen, aber mit interaktivem Charakter.

Kernidee

Besucher “durchschreiten” ein Portal (Hero-Bild mit Torbogen) und erleben dann eine geführte oder selbstbestimmte Reise durch die Philosophie und Werte der Marke.


2. Das neue Hero-Bild

Datei: /images/wlw-landingpage-hero2.webp (oder neuer Pfad)

Beschreibung:

  • Vordergrund: Staubige Felsen, schmaler Pfad, links/rechts Abgrund (bedrohlich, ungemütlich)
  • Mittelgrund: Torbogen (weiter entfernt als vorher)
  • Hintergrund: Strahlend helles Licht, blühende Landschaften hinter dem Tor
  • Emotion: “Da will ich hin!” - Einladung trotz düsterem Vordergrund

Funktion:

  • Statisch beim Laden mit leichtem Zoom-In (nicht Fade-In)
  • Nach 2-3 Sekunden erscheinen Controls
  • Beim Start der Reise: Zoom in den Torbogen hinein (als würde man durchgehen)

3. Die drei Erlebnis-Modi

Modus 1: Meditativ & Achtsam (~2:30 Min)

  • Audio: 1.0x Geschwindigkeit
  • Pausen zwischen Sequenzen: 3-4 Sekunden
  • Scroll-Geschwindigkeit: ~40 Pixel/Sekunde (langsam)
  • Animationen: Ausführlich, smooth

Modus 2: Bewusst & Fokussiert (~1:30 Min)

  • Audio: 1.2x Geschwindigkeit (klingt noch natürlich)
  • Pausen zwischen Sequenzen: 1-2 Sekunden
  • Scroll-Geschwindigkeit: ~60 Pixel/Sekunde
  • Animationen: Kompakter, aber nicht hektisch

Modus 3: Freies Scrollen

  • Kein Audio
  • Manuelles Scrollen durch User
  • Minimale Scroll-Animationen (Intersection Observer basiert)
  • Klassisches Webseiten-Erlebnis

Modus-Wechsel (WICHTIG!)

  • User kann jederzeit durch manuelles Scrollen von Modus 1/2 zu Modus 3 wechseln
  • System erkennt manuelles Scrollen → Audio stoppt sanft (Fade-out 0.5s)
  • “🎧 Führung fortsetzen” Button erscheint (unauffällig am Rand)
  • User kann zurück zu Modus 1 oder 2 → Audio startet im aktuellen Abschnitt von vorne

4. Die 5-Akt-Struktur

AKT 0: Portal-Durchschreitung (15 Sek)

Technik: CSS Transform + Scale Animation

Hero-Bild (leichter Zoom-In beim Laden)
↓ (2-3 Sek warten)
Controls erscheinen: [Tor durchschreiten] + Modus-Wahl
↓ User klickt
Zoom-Animation ins Tor (scale 1 → 2.5, ~15 Sek)
↓ White Flash / Überblendung
Akt 1 beginnt

AKT 1: Der Ruf (20 Sek meditativ / 15 Sek dynamisch)

Content:

"Im ansteigenden Chaos, der Verwirrung und dem Niedergang 
der jetzigen Zeit steigen Fragen in uns auf…

- Was ist Wahrheit?
- Weshalb sind wir hier?
- Was bedeutet es, wirklich Mensch zu sein?"

Visuelle Idee:

  • Nebel/Unschärfe/abstrakte wirbelnde Formen (Chaos visualisiert)
  • Drei Fragen erscheinen nacheinander als Lichtpunkte
  • Fragen sammeln sich, formen einen Pfad nach vorne

Animation-Details:

  • Nebel: Sanfte Bewegung (CSS animation oder Canvas)
  • Fragen: Fade-in + leichtes Pulsieren
  • Stagger: Frage 1 → Pause 2s → Frage 2 → Pause 2s → Frage 3
  • Am Ende: Fragen verbinden sich zu Pfad

Grafik-Assets benötigt:

  • Nebel-Textur oder animiertes SVG
  • Frage-Elemente (als Text oder illustrierte Bubbles)

AKT 2: Der Kompass (15 Sek)

Content:

"Kann uns die Suche nach Antworten auf diese Fragen 
auf den WEG INS NEUE führen?

Als Stab und Stütze begleitet uns dabei der Begriff
WAHRE LEBENSWERTE"

Visuelle Idee:

  • Pfad aus Akt 1 führt zum Logo
  • Logo schwebt ein mit warmem Glow
  • Natur-Symbolik drumherum (Wurzeln, Ranken)
  • Optional: Wanderstab oder Baum-Visualisierung

Animation-Details:

  • Logo: Fade-in + sanftes Schweben (translate Y)
  • Glow-Effekt: CSS box-shadow mit Animation
  • Ranken wachsen von unten (SVG path animation oder CSS clip-path)

Grafik-Assets benötigt:

  • Logo (vorhanden: /images/WL Logo_transp.png)
  • Ranken/Wurzeln als SVG (illustriert)
  • Optional: Wanderstab-Illustration

AKT 3: Die Bedeutung (30 Sek meditativ / 20 Sek dynamisch)

Content:

"Was lösen die Worte WAHRE LEBENSWERTE in uns aus?

Begriffe, die noch verborgen wirken, aber jetzt lebendig werden wollen.
Werte, die stark mit den ursprünglichen Kräften der Natur verbunden sind
und unser Leben auf das Wesentliche zurückführen.

Auf der ganzen Welt finden sich Menschen zusammen,
die in ihrem Leben dem WEG INS NEUE folgen..."

Visuelle Idee:

  • Vier Elemente: Erde, Wasser, Luft, Feuer/Licht
  • Als abstrahierte, elegante Formen (illustrativ)
  • Tanzen/bewegen sich um zentralen Punkt (Mensch-Silhouette?)
  • Text erscheint: “Körper – Seele – Geist”
  • Verbindungslinien zwischen Elementen

Animation-Details:

  • Elemente erscheinen nacheinander (Stagger 0.5s)
  • Kreisförmige Bewegung (CSS animation: rotate + transform-origin)
  • Verbindungslinien: SVG path drawing
  • Mensch-Silhouette: Fade-in in der Mitte

Optional: Video-Rahmen

  • Kreis mit Loop: Zeitraffer Pflanzenwachstum oder fließendes Wasser
  • Stumm, ambient
  • Klick → Modal mit Ton

Grafik-Assets benötigt:

  • Vier Element-Illustrationen (abstrakt-naturalistisch)
  • Mensch-Silhouette (einfach, elegant)
  • Optional: Video-Datei für Rahmen

AKT 4: Der Weg (25 Sek meditativ / 18 Sek dynamisch)

Content:

"Unser Ziel ist es, Menschen zu begleiten, die dem Leben 
einen tieferen Sinn geben wollen.

Alles, was das Logo oder Siegel von WAHRE LEBENSWERTE trägt,
ist Ausdruck dieser Ausrichtung.

Der Weg führt von der Ernte der Zutaten über den Herstellungsprozess
bis hin zu Verkauf und Versand durch die Hände von Menschen,
die freudig und vertrauensvoll diese Geschenke der Natur bieten."

Visuelle Idee:

  • Weg entsteht vor dem Betrachter (wie Pfad durch Gras)
  • Entlang des Weges: Menschen-Silhouetten (Gemeinschaft)
  • Produkte/Siegel als leuchtende Punkte am Wegrand
  • Kreislauf visualisieren: Ernte → Herstellung → Versand

Optional: Kontrast-Bild

  • Entweder: Bestehendes Bild (/images/Kontrast-neue-und-alte-Welt.webp)
  • Oder: Neues Bild mit Transformation (alte Welt wird von neuer überflutet)
  • Animation: Wenn verwendet, Split-Screen mit Scroll-Effekt (links alt → rechts neu)

Animation-Details:

  • Weg: SVG path animation (stroke-dasharray)
  • Silhouetten: Fade-in + leichtes Bewegen (simulate walking)
  • Leuchtpunkte: Pulsieren, nacheinander erscheinen
  • Kreislauf: Rotierendes Diagramm oder fließende Pfeile

Grafik-Assets benötigt:

  • Weg-Pfad als SVG
  • Menschen-Silhouetten (verschiedene Posen)
  • Produkt-Icons oder Siegel-Symbol
  • Kreislauf-Illustration (Ernte → … → Versand)

AKT 5: Die Einladung (20 Sek meditativ / 15 Sek dynamisch)

Content:

"Dies ist erst der Anfang.

WAHRE LEBENSWERTE sind eine Einladung:
den WEG INS NEUE zu gehen,
innezuhalten,
Kraft zu schöpfen
und gemeinsam echte Werte lebendig werden zu lassen.

Kommen Sie mit auf den WEG INS NEUE!"

Visuelle Idee:

  • Kamera zieht zurück/nach oben (Zoom-out)
  • Zeigt den gesamten zurückgelegten Weg
  • Viele kleine Lichtpunkte (Menschen) versammeln sich
  • Am Horizont: offener, heller Raum (“das Neue”)
  • Logo erscheint nochmal, klein aber zentral

Animation-Details:

  • Reverse Zoom (scale 1 → 0.5, aber mit translate für “nach oben”)
  • Lichtpunkte: Particle-Effekt oder viele kleine Divs mit Stagger-Animation
  • Horizont: Gradient von warm zu hell
  • Text: Zeilenweise Fade-in mit größerem Zeilenabstand

Grafik-Assets benötigt:

  • Horizont-Grafik (optional, kann auch CSS Gradient sein)
  • Lichtpunkt-Sprites oder generiert via JS

5. Technische Anforderungen

Tech Stack

  • Framework: Hugo (Static Site Generator)
  • JavaScript: Vanilla JS (ES6+) - kein React/Vue
  • Animations: CSS Transitions + JavaScript (evtl. GSAP wenn schon vorhanden)
  • Audio: HTML5 Audio API
  • Scroll: Intersection Observer API + Custom Scroll Control

Dateistruktur (Hugo)

/content/
  ├── _index.de.md          # Content-Datei (bereits vorhanden)
/layouts/
  ├── index.html            # Template
/static/
  ├── css/
  │   ├── portal.css        # Neue Styles für Portal-Erlebnis
  ├── js/
  │   ├── portal-experience.js   # Haupt-Controller
  │   ├── audio-manager.js       # Audio-Steuerung
  │   ├── sequence-animator.js   # Sequenz-Animationen
  ├── audio/
  │   ├── 01-der-ruf.mp3         # ElevenLabs generiert (noch zu erstellen)
  │   ├── 02-kompass.mp3
  │   ├── ...
  ├── images/
  │   ├── wlw-landingpage-hero.webp  # Neues Hero-Bild
  │   ├── nebel-animation.svg        # Zu erstellen
  │   ├── ...

Browser-Kompatibilität

  • Moderne Browser (Chrome, Firefox, Safari, Edge - letzte 2 Versionen)
  • Mobile: iOS Safari, Chrome Android
  • Fallback: Ohne JS wird normaler Scroll-Content angezeigt

Performance-Ziele

  • First Contentful Paint: < 1.5s
  • Time to Interactive: < 3s
  • Hero-Bild: WebP, max 500KB
  • Audio-Dateien: MP3, max 500KB pro Datei
  • Animationen: 60fps auf Desktop, 30fps auf Mobile akzeptabel

6. JavaScript-Architektur

Haupt-Controller: portal-experience.js

class PortalExperience {
  constructor() {
    this.mode = null; // 'meditative', 'dynamic', 'scroll'
    this.sequences = this.loadSequences();
    this.currentSequenceIndex = 0;
    this.audioManager = new AudioManager();
    this.animator = new SequenceAnimator();
    this.isAutoScrolling = false;
    this.userInterrupted = false;
  }

  init() {
    this.setupEventListeners();
    this.showInitialScreen();
  }

  startGuidedMode(tempo) {
    this.mode = tempo; // 'meditative' oder 'dynamic'
    this.disableManualScroll();
    this.playSequence(0);
  }

  switchToScrollMode() {
    this.mode = 'scroll';
    this.audioManager.fadeOut();
    this.enableManualScroll();
    this.showResumeButton();
  }

  detectManualScroll() {
    // Erkennt, wenn User während Auto-Modus scrollt
    // → Wechselt zu Scroll-Modus
  }

  playSequence(index) {
    const sequence = this.sequences[index];
    this.audioManager.play(sequence.audio, this.mode);
    this.animator.animate(sequence.animations);
    this.autoScroll(sequence.scrollTarget);
  }
}

Audio-Manager: audio-manager.js

class AudioManager {
  constructor() {
    this.currentAudio = null;
    this.volume = 1.0;
  }

  play(audioFile, tempo) {
    // Lädt und spielt Audio
    // tempo: 'meditative' (1.0x) oder 'dynamic' (1.2x)
    this.currentAudio = new Audio(audioFile);
    this.currentAudio.playbackRate = tempo === 'dynamic' ? 1.2 : 1.0;
    this.currentAudio.play();
  }

  fadeOut(duration = 500) {
    // Sanftes Ausblenden des aktuellen Audios
  }

  stop() {
    if (this.currentAudio) {
      this.currentAudio.pause();
      this.currentAudio.currentTime = 0;
    }
  }
}

Sequenz-Animator: sequence-animator.js

class SequenceAnimator {
  animate(animationConfig) {
    // animationConfig = Array von Animation-Objekten
    // z.B.: [
    //   { element: '.nebel', type: 'fadeIn', duration: 1000 },
    //   { element: '.frage-1', type: 'slideIn', delay: 2000 }
    // ]
  }

  fadeIn(element, duration) { /* ... */ }
  fadeOut(element, duration) { /* ... */ }
  slideIn(element, direction, duration) { /* ... */ }
  zoom(element, fromScale, toScale, duration) { /* ... */ }
  // ... weitere Animation-Methoden
}

Sequenz-Datenstruktur (JSON/Object)

const sequences = [
  {
    id: 'portal-entry',
    scrollTarget: '#tor',
    duration: {
      meditative: 15000,
      dynamic: 15000 // Tor-Zoom ist gleich schnell
    },
    audio: null, // Kein Audio, nur Zoom
    animations: [
      {
        element: '.hero-image',
        type: 'zoom',
        from: 1,
        to: 2.5,
        duration: 15000,
        easing: 'ease-in-out'
      },
      {
        element: '.hero-overlay',
        type: 'fadeOut',
        delay: 12000,
        duration: 3000
      }
    ]
  },
  {
    id: 'akt1-der-ruf',
    scrollTarget: '#akt1',
    duration: {
      meditative: 20000,
      dynamic: 15000
    },
    audio: '/audio/01-der-ruf.mp3',
    animations: [
      {
        element: '.nebel',
        type: 'fadeIn',
        duration: 2000
      },
      {
        element: '.frage-1',
        type: 'fadeIn',
        delay: 3000,
        duration: 1000
      },
      {
        element: '.frage-2',
        type: 'fadeIn',
        delay: 8000,
        duration: 1000
      },
      {
        element: '.frage-3',
        type: 'fadeIn',
        delay: 13000,
        duration: 1000
      }
    ]
  },
  // ... weitere Sequenzen
];

7. UI-Komponenten

Start-Screen (nach Hero-Zoom-in)

<div class="portal-mode-selector">
  <h2>Wie möchten Sie die Reise erleben?</h2>
  
  <div class="mode-options">
    <label class="mode-option">
      <input type="radio" name="mode" value="meditative">
      <div class="mode-card">
        <span class="mode-icon">🧘</span>
        <h3>Meditativ & Achtsam</h3>
        <p>~2:30 Minuten</p>
      </div>
    </label>
    
    <label class="mode-option">
      <input type="radio" name="mode" value="dynamic">
      <div class="mode-card">
        <span class="mode-icon">✨</span>
        <h3>Bewusst & Fokussiert</h3>
        <p>~1:30 Minuten</p>
      </div>
    </label>
    
    <label class="mode-option">
      <input type="radio" name="mode" value="scroll">
      <div class="mode-card">
        <span class="mode-icon">📖</span>
        <h3>Selbst erkunden</h3>
        <p>Freies Scrollen</p>
      </div>
    </label>
  </div>
  
  <button class="btn-start">Reise beginnen</button>
</div>

Controls während geführter Tour

<div class="portal-controls">
  <button class="btn-prev" title="Zurück">◀</button>
  <button class="btn-play-pause" title="Pause">⏸</button>
  <button class="btn-next" title="Weiter">▶</button>
  <button class="btn-audio-toggle" title="Ton an/aus">🔊</button>
  <button class="btn-exit" title="Zum freien Scrollen">⏩</button>
  
  <div class="progress-bar">
    <div class="progress-fill"></div>
    <div class="progress-sections">
      <span class="section" data-section="0">①</span>
      <span class="section active" data-section="1">②</span>
      <span class="section" data-section="2">③</span>
      <span class="section" data-section="3">④</span>
      <span class="section" data-section="4">⑤</span>
    </div>
  </div>
</div>

Resume-Button (im Scroll-Modus)

<div class="portal-resume">
  <button class="btn-resume">
    🎧 Führung fortsetzen?
  </button>
</div>

<!-- Modal beim Klick -->
<div class="resume-modal">
  <h3>Möchten Sie die Führung fortsetzen?</h3>
  <p>Sie befinden sich bei: <strong id="current-section-name"></strong></p>
  
  <div class="tempo-choice">
    <button class="btn-tempo" data-tempo="meditative">Meditativ</button>
    <button class="btn-tempo" data-tempo="dynamic">Dynamisch</button>
  </div>
  
  <button class="btn-cancel">Abbrechen</button>
</div>

8. CSS-Struktur

Basis-Klassen

/* Haupt-Container */
.portal-experience {
  position: relative;
  overflow: hidden; /* Während Auto-Modus */
}

/* Hero-Section */
.hero-portal {
  height: 100vh;
  position: relative;
  overflow: hidden;
}

.hero-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform-origin: center center;
  transition: transform 15s ease-in-out; /* Für Zoom */
}

.hero-image.zooming {
  transform: scale(2.5);
}

/* Sequenz-Sections */
.sequence-section {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transform: translateY(50px);
  transition: opacity 1s, transform 1s;
}

.sequence-section.active {
  opacity: 1;
  transform: translateY(0);
}

/* Animationen */
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes slideInUp {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Controls */
.portal-controls {
  position: fixed;
  bottom: 30px;
  left: 50%;
  transform: translateX(-50%);
  background: rgba(0, 0, 0, 0.7);
  backdrop-filter: blur(10px);
  padding: 15px 20px;
  border-radius: 50px;
  display: flex;
  gap: 15px;
  align-items: center;
  z-index: 1000;
}

/* Progress Bar */
.progress-bar {
  width: 200px;
  height: 4px;
  background: rgba(255, 255, 255, 0.3);
  border-radius: 2px;
  position: relative;
}

.progress-fill {
  height: 100%;
  background: white;
  border-radius: 2px;
  transition: width 0.3s ease;
}

9. Nächste Schritte - Priorisiert

Phase 1: Technisches Fundament (JETZT in VS Code)

  1. Portal-Controller aufsetzen

    • Modus-Auswahl UI
    • Basis-Eventlistener
    • Scroll-Kontrolle (enable/disable)
  2. Audio-Manager bauen

    • Play/Pause/Stop Funktionen
    • Playback-Rate für Tempo
    • Fade-in/Fade-out
  3. Tor-Durchschreitung

    • Hero-Bild Zoom-Animation
    • Übergang zu Akt 1
    • White-Flash-Effekt
  4. Akt 1 + 2 prototypisch

    • Mit Platzhalter-Grafiken (einfache Divs/SVGs)
    • Mit Platzhalter-Audio (oder Text-to-Speech für Testing)
    • Fade-Animationen funktionsfähig

Phase 2: Content-Vorbereitung (Parallel)

  • Audio-Texte finalisieren → ElevenLabs
  • Zeichnerin briefen: Element-Illustrationen
  • Video-Team fragen: Wo Videos einsetzen?
  • Kontrast-Bild: Neu oder transformieren?

Phase 3: Integration (Nächste Session)

  • Echte Audio-Dateien einbinden
  • Illustrationen integrieren
  • Timing feintunen
  • Akt 3-5 vervollständigen

Phase 4: Polish

  • Mobile-Optimierung
  • Performance-Tuning
  • Video-Rahmen
  • Testing & Bugfixes

10. Offene Fragen / Entscheidungen

  • Kontrast-Bild: Neu erstellen oder bestehendes transformieren?
  • Video-Rahmen: In welchen Akten? (Team-Feedback abwarten)
  • Gemälde-Integration: Wie/wo einbinden? (Später entscheiden)
  • Zeichnerin: Verfügbarkeit? Stil-Briefing erstellen?
  • GSAP: Bereits im Projekt vorhanden oder Vanilla JS bevorzugt?

11. Wichtige Erinnerungen

  1. User-Kontrolle steht im Vordergrund

    • Nie zwingen, immer Ausweichmöglichkeiten bieten
    • Manuelles Scrollen = automatischer Modus-Wechsel
  2. Performance vor Perfektion

    • Lieber einfachere Animationen, die smooth laufen
    • Mobile ist gleichwertig wichtig
  3. Progressive Enhancement

    • Ohne JS muss Content lesbar sein
    • Audio ist Enhancement, nicht Requirement
  4. Emotion vor Technik

    • Die Reise soll sich gut anfühlen
    • Pausen sind wichtig (nicht durchhetzen)

12. Für Claude in VS Code

Hallo! Hier sind die wichtigsten Infos für den Start:

  • Wir bauen ein immersives Portal-Erlebnis für “Wahre Lebenswerte”
  • Hugo-Projekt, Vanilla JS, kein Framework
  • Fokus jetzt: Technisches Fundament für 3 Modi + Tor-Animation + Akt 1-2
  • Platzhalter-Content ist OK für Prototyp
  • Frag nach dem aktuellen Code, dann bauen wir darauf auf

Erste Schritte:

  1. Zeig mir die aktuelle Projektstruktur
  2. Lass uns portal-experience.js anlegen
  3. Tor-Zoom-Animation als erstes Feature
  4. Dann Modus-Auswahl UI

Los geht’s! 🚀