xPulse Chat β UI/UX Layout Concept v1.3.0
Status: CONCEPT Β· Ziel-Version: v1.3.0
Erstellt im Rahmen der v1.2.0 Entwicklung als Planungsgrundlage fΓΌr den nΓ€chsten Schritt.
Ziel
Einheitliches, konsistentes App-Layout ΓΌber alle Views hinweg. Mobile-first, responsive β auf Desktop mit dauerhaft sichtbarer Sidebar.
App Shell
Grundstruktur
1 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 2 β [β°] Area Title / Status [π€ username βΎ] β β Top Bar (nur rechts ΓΌber Content ) 3 ββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ€ 4 β β β 5 β Logo β Dynamic Content Area β 6 β ββββββββ β β 7 β Peer Liste β (Chat / Peer Detail / β 8 β (scrollbar) β Profil / Text Pages) β 9 β β β 10 β ββββββββ β β 11 β Guidelines β β 12 β Version β β 13 β Info β β 14 ββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββ
Komponenten
Bereich
Beschreibung
Left Sidebar
Immer sichtbar (Desktop) / Overlay (Mobile)
Top Bar
Nur ΓΌber dem Dynamic Content, nicht ΓΌber Sidebar
Dynamic Content
Wechselt je nach Route
Footer
EntfΓ€llt komplett
Inhalt (von oben nach unten)
1 ββββββββββββββββββββ 2 β π· xPulse β β Logo 3 β ββββββββββββ β 4 β β 5 β ββ Peers ββ [+]β β "+" Button: title="Peer hinzufΓΌgen" 6 β π’ Bob β Peer Liste (scrollbar) 7 β π΄ Carol β mit Online-Status Badge 8 β π΄ Dave β aktiver Peer highlighted 9 β β 10 β (leer state ) β 11 β β 12 β ββββββββββββ β 13 β Info Β· Guidelinesβ β Footer Links (zentriert) 14 β Disclaimer β 15 β [Version 1.3 .0 ] β β Pill β Link zu /changelog (einziger Weg) 16 ββββββββββββββββββββ
Kein aktiver Benutzer in der Sidebar!
Login/Profil nur ΓΌber das User-MenΓΌ in der Top Bar rechts erreichbar.
Verhalten
Desktop (β₯ 768px): Sidebar dauerhaft sichtbar, feste Breite (~220px)
Mobile (< 768px): StandardmΓ€Γig eingeklappt, per Hamburger-Button (β°) als Overlay ΓΆffenbar
Overlay: Dunkler Backdrop hinter Sidebar, Klick auf Backdrop schlieΓt Sidebar
Klick auf Peer in der Liste β navigiert zu Chat, Sidebar schlieΓt sich auf Mobile
Top Bar
Nur ΓΌber dem Dynamic Content Bereich (nicht ΓΌber der Sidebar).
1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββ 2 β [β° nur Mobile] Area Title / Status [π€ username βΎ] β 3 βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
User MenΓΌ Dropdown (rechts)
1 [π€ username βΎ] 2 ββββββββββββββββ 3 β Mein Profil β 4 β ββββββββββ β 5 β Logout β 6 ββββββββββββββββ
Area Title β je nach Route
Route
Area Title
Subtitle / Status
/peer/list
P2P Chat
β
/peer/add
Peer hinzufΓΌgen
β
/peer/add/:hash (Re-Pair)
Peer {Login} Re-Pair
β
/peer/:hash
Peer {Login}
β
/chat/:hash
Chat mit {Login}
Status (siehe unten)
/profile
Mein Profil
β
/info
Info
β
/changelog
Changelog
β
/guidelines
Usage Guidelines
β
/disclaimer
Disclaimer
β
Chat Status im Area Title
1 Chat mit Bob π΄ offline 2 Chat mit Bob π‘ verbindeβ¦ 3 Chat mit Bob π’ online Β· im Chat: nein 4 Chat mit Bob π’ online Β· im Chat: ja 5 Chat mit Bob π’ verbunden
Dynamic Content β je nach Route
`/peer/list` β Default State
1 βββββββββββββββββββββββββββββββββ 2 β β 3 β Hallo Alice π β 4 β β 5 β WΓ€hle einen Peer aus β 6 β um zu chatten β 7 β β 8 βββββββββββββββββββββββββββββββββ
Die Peer-Liste selbst ist in der linken Sidebar β die rechte Content-Area
zeigt den personalisierten Willkommens-State wenn kein Peer ausgewΓ€hlt ist.
`/chat/:hash` β Chat View
1 βββββββββββββββββββββββββββββββββ 2 β Chat Messages (scrollbar) β 3 β β 4 β [Typing Indicator] β 5 βββββββββββββββββββββββββββββββββ€ 6 β [textarea] [β] β 7 βββββββββββββββββββββββββββββββββ
Kein separater Header β Status ist im Top Bar Area Title
Kein chat-input-hint Footer β Status ist im Area Title sichtbar
Input disabled wenn Peer offline oder nicht verbunden
`/peer/add` β Peer hinzufΓΌgen / Re-Pair
1 βββββββββββββββββββββββββββββββββ 2 β Pairing Code Eingabe / β 3 β Code generieren β 4 β β 5 β [Pairing Timer Bar] β 6 β β 7 β Status / Feedback β 8 βββββββββββββββββββββββββββββββββ
Add: Area Title Peer hinzufΓΌgen
Re-Pair: Area Title Peer {Login} Re-Pair
Gleiche View, gleiche Komponente β nur Area Title unterscheidet sich
Erreichbar ΓΌber [+] Button in der Sidebar neben "Peers" Label
1 βββββββββββββββββββββββββββββββββ 2 β π€ Avatar + Status Badge β 3 β Login + Chat Icon β 4 β β 5 β Peer Hash: ... β 6 β HinzugefΓΌgt: ... β 7 β β 8 β β 9 β β 10 β β 11 βββββββββββββββββββββββββββββββββ
`/profile` β Profil View
Wie bisher, nur ohne eigenen Header (Area Title ΓΌbernimmt).
Text Pages (`/info`, `/guidelines`, `/disclaimer`)
Wie bisher, nur ohne eigenen Header (Area Title = Page Title).
Nur reiner Inhalt β keine Tabs.
`/changelog` β Changelog
1 βββββββββββββββββββββββββββββββββ 2 β CHANGELOG.md β 3 β (rendered Markdown) β 4 β β 5 βββββββββββββββββββββββββββββββββ
Erreichbar nur ΓΌber Version-Pill im Sidebar Footer β bewusste Entscheidung
Weniger Links im Footer, inhaltlich logisch: "welche Version? β was hat sich geΓ€ndert?"
Mobile Navigation
1 βββββββββββββββββββββββ 2 β β° Chat mit Bob π’ [π€βΎ] β β Top Bar 3 βββββββββββββββββββββββ€ 4 β β 5 β Dynamic Content β 6 β β 7 βββββββββββββββββββββββ 8 9 Sidebar offen (Overlay): 10 ββββββββββββ¬βββββββββββ 11 β β xPulse β (blur β 12 β ββββββ β + β 13 β π’ Bob β dark β 14 β π΄ Carol β overlay)β 15 β ββββββ β β 16 β Info β β 17 β v1 .3 .0 β β 18 ββββββββββββ΄βββββββββββ
CSS / Layout Technisch
CSS Grid fΓΌr App Shell: grid-template-columns: 220px 1fr (Desktop)
Media Query @media (max-width: 768px) β Sidebar als position: fixed Overlay
--sidebar-width: 220px als CSS Custom Property
Top Bar: position: sticky; top: 0 ΓΌber dem Content-Bereich
Sidebar Peer-Liste: overflow-y: auto; flex: 1 (scrollbar zwischen Logo und Footer)
Was entfΓ€llt
Aktuell
In v1.3.0
Jede View hat eigenen Header
Einheitliche Top Bar
Back-Buttons in Views
Navigation via Sidebar
peers-footer mit Button
[+] Button in Sidebar neben "Peers" Label
chat-input-hint Footer
Status im Area Title
Inkonsistente Inline-Styles
Ausgelagerte CSS-Dateien
peer-detail als eigene View optional
KΓΆnnte als rechte Panel-Sidebar werden
Offene Fragen / Entscheidungen
Frage
Entscheidung
Breadcrumbs oder Area Title?
Area Title
Changelog nur Pill oder auch Footer Link?
Nur Version-Pill
peer-detail separate Route oder Panel?
Separate Route
Sidebar-Breite auf Tablet
TBD
Chat Info Panel (rechts im Chat)
Separates optionales Panel rechts im Chat β kein Full Peer Detail , nur Chat-relevante Infos:
1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββ 2 β Chat mit Bob π’ β Toggle Panel β 3 ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββ€ 4 β β Chat Info β 5 β Chat Messages β ββββββββββββ β 6 β β π€ Bob β 7 β β π’ online β 8 β β im Chat: ja β 9 β β β 10 β β verbunden seit: β 11 β β 03.03.2026 13:54 β 12 β β Nachricht: 42 β 13 β β β 14 ββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββ€ 15 β β 16 βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Toggle via [βΉ] Button im Area Title des Chat-Inhaltsbereichs (rechts im Titel, nicht in der Top Bar!)
Top Bar rechts ist exklusiv fΓΌr das User-MenΓΌ
Mobile: Panel als Overlay von rechts (mit Backdrop)
Desktop: Panel ΓΆffnet sich neben dem Chat (kein Overlay)
Zustand (offen/zu) wird in localStorage gespeichert: xpulse_panel_chat_info
Alle Panel-ZustΓ€nde werden in localStorage gespeichert:
Key
Default
Beschreibung
xpulse_panel_left
open
Linke Sidebar (Desktop)
xpulse_panel_chat_info
closed
Chat Info Panel (rechts)
Mobile: Sidebar immer als Overlay, kein localStorage fΓΌr open/closed
Desktop: Sidebar ohne Overlay, kein Backdrop β einfach ein/ausklappen
Default Sidebar Desktop: open
Default Chat Info Panel: closed