Chat-Integration: Live-Chat neben/bei Player wenn Stream aktiv (iframe, KiWiIRC o.ä.) #55

Closed
opened 2026-06-01 13:05:14 +02:00 by holm · 2 comments
Owner
Dimension Bewertung Einschätzung
Aufwand ████░░░░░░ Mittel — iframe-Embed + Sichtbarkeitssteuerung per JS
Nutzen ███████░░░ Hoch — Community-Funktion, bindet Hörer live ein
Bruchhäufigkeit █░░░░░░░░░ n/a — neues Feature
Nachhaltigkeit ████████░░ Hoch — iframe-Ansatz ist wartungsarm
Dringlichkeit ███░░░░░░░ Niedrig — abhängig von Stream (#54)

Feature

Wenn der Live-Stream (Issue #54) aktiv ist, soll ein Chat-Fenster ein- und ausgeblendet werden können. Der Chat selbst liegt auf externer Infrastruktur (KiWiIRC, Rocket.Chat o.ä.) und wird als iframe eingebettet.

Konfiguration

In podcast.toml unter [stream]:

[stream]
url      = "https://stream.example.org/live.mp3"
name     = "Zentonic Live"
chat_url = "https://kiwiirc.com/nextclient/#zentonic"  # optional

Wenn chat_url fehlt → kein Chat-Button.

UI

  • Chat-Toggle-Button im Sticky Player (Sprechblasen-Icon, nur wenn stream.chat_url gesetzt)
  • Chat-Panel: position: fixed, neben oder über dem Sticky Player, per Toggle ein-/ausklappbar
  • Größe: responsiv, auf Mobile Full-Screen-Modal, auf Desktop Sidebar (z.B. 320px)
  • iframe lädt erst beim ersten Öffnen (lazy load → kein Tracking solange Chat zu)

Abhängigkeiten

  • Setzt Issue #53 (Sticky Player) und Issue #54 (Stream) voraus
  • Chat-Button nur sichtbar wenn chat_url vorhanden — unabhängig vom Stream-Status (kann auch immer offen sein)

Technisch

  • chat_url im Site-JSON, per data--Attribut am Player-Element eingebettet
  • iframe: sandbox="allow-scripts allow-same-origin allow-forms allow-popups"
| Dimension | Bewertung | Einschätzung | |---|---|---| | Aufwand | `████░░░░░░` | Mittel — iframe-Embed + Sichtbarkeitssteuerung per JS | | Nutzen | `███████░░░` | Hoch — Community-Funktion, bindet Hörer live ein | | Bruchhäufigkeit | `█░░░░░░░░░` | n/a — neues Feature | | Nachhaltigkeit | `████████░░` | Hoch — iframe-Ansatz ist wartungsarm | | Dringlichkeit | `███░░░░░░░` | Niedrig — abhängig von Stream (#54) | ## Feature Wenn der Live-Stream (Issue #54) aktiv ist, soll ein Chat-Fenster ein- und ausgeblendet werden können. Der Chat selbst liegt auf externer Infrastruktur (KiWiIRC, Rocket.Chat o.ä.) und wird als iframe eingebettet. ## Konfiguration In `podcast.toml` unter `[stream]`: ```toml [stream] url = "https://stream.example.org/live.mp3" name = "Zentonic Live" chat_url = "https://kiwiirc.com/nextclient/#zentonic" # optional ``` Wenn `chat_url` fehlt → kein Chat-Button. ## UI - Chat-Toggle-Button im Sticky Player (Sprechblasen-Icon, nur wenn `stream.chat_url` gesetzt) - Chat-Panel: `position: fixed`, neben oder über dem Sticky Player, per Toggle ein-/ausklappbar - Größe: responsiv, auf Mobile Full-Screen-Modal, auf Desktop Sidebar (z.B. 320px) - iframe lädt erst beim ersten Öffnen (lazy load → kein Tracking solange Chat zu) ## Abhängigkeiten - Setzt Issue #53 (Sticky Player) und Issue #54 (Stream) voraus - Chat-Button nur sichtbar wenn `chat_url` vorhanden — unabhängig vom Stream-Status (kann auch immer offen sein) ## Technisch - `chat_url` im Site-JSON, per `data-`-Attribut am Player-Element eingebettet - iframe: `sandbox="allow-scripts allow-same-origin allow-forms allow-popups"`
Author
Owner

Chat-Panel-Toggle gemerged — bereit zur v00-Abnahme

Gemerged nach dev (281cc57, Branch feat/55-chat, Base korrekt 68bf304).

Umgesetzt:

  • Chat-Toggle-Button im Sticky-Player (Sprechblasen-Glyph, Unicode), nur bei stream.chat_url ({% if stream and stream.chat_url %}), unabhängig vom Stream-Status.
  • Chat-Panel position:fixed: Mobile Full-Screen-Modal, Desktop (≥640px) Sidebar 320px. zentonic26-Stil.
  • Lazy-Load: iframe-src erst beim ersten Öffnen gesetzt (kein Tracking solange zu). sandbox="allow-scripts allow-same-origin allow-forms allow-popups".
  • aria-pressed/aria-expanded, opacity-Fade (respektiert globale prefers-reduced-motion).
  • Erweitert die #54-State-Maschine, keine Duplikation. build.sh unverändert (toml_to_json reicht chat_url durch).
  • [stream]-Demo in podcast.toml auskommentiert (kein toter Button).

Wichtig — erster vollständiger public/-Rebuild: Da w-55 korrekt von origin/dev startete (Player #53 + Stream #54 + Feed #56 alle present), ist die committete sample_project/public/ jetzt der erste konsistente Demo-Stand: Sticky-Player-Markup in index+episode (je 10 Treffer), Feed absolute URLs. Zuvor war public/ aus player-losen Templates gebaut.

Für v00-Abnahme: Chat-Panel visuell (Mobile-Modal ↔ Desktop-Sidebar-Übergang @640px), Kontrast aria-pressed-Zustand des Chat-Buttons. Chat end-to-end nur mit echtem chat_url testbar.

🤖 angelegt von Claude o00 (API/Token holm)

## Chat-Panel-Toggle gemerged — bereit zur v00-Abnahme Gemerged nach `dev` (`281cc57`, Branch `feat/55-chat`, Base korrekt `68bf304`). **Umgesetzt:** - Chat-Toggle-Button im Sticky-Player (Sprechblasen-Glyph, Unicode), nur bei `stream.chat_url` (`{% if stream and stream.chat_url %}`), unabhängig vom Stream-Status. - Chat-Panel `position:fixed`: Mobile Full-Screen-Modal, Desktop (≥640px) Sidebar 320px. zentonic26-Stil. - **Lazy-Load**: iframe-`src` erst beim ersten Öffnen gesetzt (kein Tracking solange zu). `sandbox="allow-scripts allow-same-origin allow-forms allow-popups"`. - `aria-pressed`/`aria-expanded`, opacity-Fade (respektiert globale `prefers-reduced-motion`). - Erweitert die #54-State-Maschine, keine Duplikation. `build.sh` unverändert (toml_to_json reicht `chat_url` durch). - `[stream]`-Demo in podcast.toml auskommentiert (kein toter Button). **Wichtig — erster vollständiger `public/`-Rebuild:** Da w-55 korrekt von `origin/dev` startete (Player #53 + Stream #54 + Feed #56 alle present), ist die committete `sample_project/public/` jetzt der **erste konsistente Demo-Stand**: Sticky-Player-Markup in index+episode (je 10 Treffer), Feed absolute URLs. Zuvor war public/ aus player-losen Templates gebaut. **Für v00-Abnahme:** Chat-Panel visuell (Mobile-Modal ↔ Desktop-Sidebar-Übergang @640px), Kontrast `aria-pressed`-Zustand des Chat-Buttons. Chat end-to-end nur mit echtem `chat_url` testbar. > 🤖 angelegt von Claude o00 (API/Token holm)
Author
Owner

v00-Abnahme #55 — PASS ✓ (browser-verifiziert)

Chat-iframe auf f095e4b mit aktivem [stream]+chat_url-Build getestet:

Kriterium Ergebnis
Chat-Toggle-Button im Sticky-Player (nur bei aktivem Stream) ✓ PASS
Lazy-load: iframe-src leer vor Toggle, = chat_url nach Toggle-Open ✓ PASS (DOM-belegt)
Toggle auf/zu, aria-pressed/aria-expanded false→true→false ✓ PASS
zentonic26-Styling, realer KiwiIRC-Client lädt im Panel ✓ PASS
Standard-Build (ohne Stream): kein Chat-Markup (graceful) ✓ PASS

Kein Blocker → geschlossen durch v00.

🤖 angelegt von Claude v00 (API/Token holm)

## v00-Abnahme #55 — PASS ✓ (browser-verifiziert) Chat-iframe auf `f095e4b` mit aktivem `[stream]`+`chat_url`-Build getestet: | Kriterium | Ergebnis | |---|---| | Chat-Toggle-Button im Sticky-Player (nur bei aktivem Stream) | ✓ PASS | | **Lazy-load**: iframe-`src` leer vor Toggle, = `chat_url` nach Toggle-Open | ✓ PASS (DOM-belegt) | | Toggle auf/zu, `aria-pressed`/`aria-expanded` false→true→false | ✓ PASS | | zentonic26-Styling, realer KiwiIRC-Client lädt im Panel | ✓ PASS | | Standard-Build (ohne Stream): kein Chat-Markup (graceful) | ✓ PASS | Kein Blocker → geschlossen durch v00. > 🤖 angelegt von Claude v00 (API/Token holm)
holm 2026-07-01 20:18:02 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Zentonic/zentonic-publisher#55
No description provided.