xPulse
πŸ‡¬πŸ‡§ EN

xPulse Chat – UI/UX Layout Concept v1.3.0

Status: CONCEPT Β· Target Version: v1.3.0 Created during v1.2.0 development as a planning basis for the next step.


Goal

A uniform, consistent app layout across all views. Mobile-first, responsive – on desktop with a permanently visible sidebar.


App Shell

Basic Structure

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [☰] Area Title / Status [πŸ‘€ username β–Ύ] β”‚ ← Top Bar (right side above content only)
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚ β”‚
β”‚ Logo β”‚ Dynamic Content Area β”‚
β”‚ ──────── β”‚ β”‚
β”‚ Peer List β”‚ (Chat / Peer Detail / β”‚
β”‚ (scrollbar) β”‚ Profile / Text Pages) β”‚
β”‚ β”‚ β”‚
β”‚ ──────── β”‚ β”‚
β”‚ Guidelines β”‚ β”‚
β”‚ Version β”‚ β”‚
β”‚ Info β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Components

Area Description
Left Sidebar Always visible (desktop) / overlay (mobile)
Top Bar Only above the dynamic content, not above the sidebar
Dynamic Content Changes depending on route
Footer Removed entirely

Content (top to bottom)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ πŸ”· xPulse β”‚ ← Logo
β”‚ ──────────── β”‚
β”‚ β”‚
β”‚ ── Peers ── [+]β”‚ ← "+" button: title="Add Peer"
β”‚ 🟒 Bob β”‚ Peer list (scrollbar)
β”‚ πŸ”΄ Carol β”‚ with online status badge
β”‚ πŸ”΄ Dave β”‚ active peer highlighted
β”‚ β”‚
β”‚ (empty state) β”‚
β”‚ β”‚
β”‚ ──────────── β”‚
β”‚ Info Β· Guidelinesβ”‚ ← Footer links (centered)
β”‚ Disclaimer β”‚
β”‚ [Version 1.3.0] β”‚ ← Pill β†’ link to /changelog (only way to reach it)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

No active user in the sidebar! Login/Profile is only accessible via the user menu in the top bar on the right.

Behaviour


Top Bar

Only above the dynamic content area (not above the sidebar).

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [☰ mobile only] Area Title / Status [πŸ‘€ username β–Ύ] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

User Menu Dropdown (right)

[πŸ‘€ username β–Ύ]
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ My Profile β”‚
β”‚ ────────── β”‚
β”‚ Logout β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Area Title – by Route

Route Area Title Subtitle / Status
/peer/list P2P Chat –
/peer/add Add Peer –
/peer/add/:hash (Re-Pair) Peer {Login} Re-Pair –
/peer/:hash Peer {Login} –
/chat/:hash Chat with {Login} Status (see below)
/profile My Profile –
/info Info –
/changelog Changelog –
/guidelines Usage Guidelines –
/disclaimer Disclaimer –

Chat Status in Area Title

Chat with Bob πŸ”΄ offline
Chat with Bob 🟑 connecting…
Chat with Bob 🟒 online · in chat: no
Chat with Bob 🟒 online · in chat: yes
Chat with Bob 🟒 connected

Dynamic Content – by Route

`/peer/list` – Default State

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚
β”‚ Hello Alice πŸ‘‹ β”‚
β”‚ β”‚
β”‚ Select a peer β”‚
β”‚ to start chatting β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

The peer list itself is in the left sidebar – the right content area shows the personalised welcome state when no peer is selected.


`/chat/:hash` – Chat View

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Chat Messages (scrollbar) β”‚
β”‚ β”‚
β”‚ [Typing Indicator] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [textarea] [↑] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

`/peer/add` – Add Peer / Re-Pair

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Pairing Code Input / β”‚
β”‚ Generate Code β”‚
β”‚ β”‚
β”‚ [Pairing Timer Bar] β”‚
β”‚ β”‚
β”‚ Status / Feedback β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ πŸ‘€ Avatar + Status Badge β”‚
β”‚ Login + Chat Icon β”‚
β”‚ β”‚
β”‚ Peer Hash: ... β”‚
β”‚ Added: ... β”‚
β”‚ β”‚
β”‚ [β†’ Open Chat] β”‚
β”‚ [⟳ Re-pair] β”‚
β”‚ [Remove] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

`/profile` – Profile View

Same as before, just without its own header (Area Title takes over).


Text Pages (`/info`, `/guidelines`, `/disclaimer`)

Same as before, just without their own header (Area Title = Page Title). Pure content only – no tabs.


`/changelog` – Changelog

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ CHANGELOG.md β”‚
β”‚ (rendered Markdown) β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Mobile Navigation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ☰ Chat with Bob 🟒 [πŸ‘€β–Ύ] β”‚ ← Top Bar
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Dynamic Content β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Sidebar open (overlay):
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ βœ• xPulse β”‚ (blur β”‚
β”‚ ────── β”‚ + β”‚
β”‚ 🟒 Bob β”‚ dark β”‚
β”‚ πŸ”΄ Carol β”‚ overlay)β”‚
β”‚ ────── β”‚ β”‚
β”‚ Info β”‚ β”‚
β”‚ v1.3.0 β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

CSS / Layout Technical


What Is Removed

Current In v1.3.0
Each view has its own header Unified Top Bar
Back buttons in views Navigation via sidebar
peers-footer with button [+] button in sidebar next to "Peers" label
chat-input-hint footer Status in Area Title
Inconsistent inline styles Extracted CSS files
peer-detail as optional separate view Could become a right panel sidebar

Open Questions / Decisions

Question Decision
Breadcrumbs or Area Title? Area Title
Changelog via pill only or also footer link? Version pill only
peer-detail separate route or panel? Separate route
Sidebar width on tablet TBD

Chat Info Panel (right in chat)

Optional separate panel on the right side of the chat – not a full peer detail, only chat-relevant info:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Chat with Bob 🟒 [β„Ή] ← Toggle Panel β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚ Chat Info β”‚
β”‚ Chat Messages β”‚ ──────────── β”‚
β”‚ β”‚ πŸ‘€ Bob β”‚
β”‚ β”‚ 🟒 online β”‚
β”‚ β”‚ in chat: yes β”‚
β”‚ β”‚ β”‚
β”‚ β”‚ connected since: β”‚
β”‚ β”‚ 03.03.2026 13:54 β”‚
β”‚ β”‚ Messages: 42 β”‚
β”‚ [typing indicator] β”‚ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [textarea] [↑] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Panel / Sidebar State (localStorage)

All panel states are stored in localStorage:

Key Default Description
xpulse_panel_left open Left sidebar (desktop)
xpulse_panel_chat_info closed Chat info panel (right)
en/concept/ui-layout-v1.3.0.md 2026-04-17