Skip to content

Commit ae15691

Browse files
doublegateclaude
andcommitted
docs: update documentation and standardize UI/UX across clients
- Fix JACK/ALSA audio device enumeration errors in WRAITH-Chat - Added JACK_NO_START_SERVER and JACK_NO_AUDIO_RESERVATION env vars - Implemented stderr suppression during ALSA device enumeration - Create comprehensive UI/UX Design Reference (docs/clients/UI-UX-DESIGN-REFERENCE.md) - 2,400+ lines of design guidelines - Color palette, typography, components, accessibility standards - Migration guide for standardization - Standardize UI/UX across all desktop clients - WRAITH-Transfer, WRAITH-Chat, WRAITH-Sync - 50+ component style fixes (gray->slate, modal backdrops) - Accessibility improvements (ARIA attributes, focus states) - Fix TypeScript configuration in WRAITH-Transfer - Updated vitest/config import - Fixed type-only imports - Update documentation - README.md with current project status - CHANGELOG.md with v1.7.1 changes - README_Protocol-DEV.md and README_Clients-DEV.md Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 3252ef5 commit ae15691

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+4822
-996
lines changed

CHANGELOG.md

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ _No changes yet._
1111

1212
---
1313

14-
## [1.7.1] - 2026-01-21 - WRAITH-Chat UI Redesign
14+
## [1.7.1] - 2026-01-21 - WRAITH-Chat UI Redesign & UI/UX Standardization
1515

16-
### WRAITH-Chat Comprehensive UI Redesign
16+
### WRAITH-Chat Comprehensive UI Redesign & Cross-Client UI/UX Standardization
1717

18-
This release delivers a major UI overhaul for WRAITH-Chat, transforming it into a professional-grade messaging application with enhanced visual design, improved user experience, and comprehensive feature controls.
18+
This release delivers a major UI overhaul for WRAITH-Chat, transforming it into a professional-grade messaging application with enhanced visual design, improved user experience, and comprehensive feature controls. Additionally, v1.7.1 standardizes UI/UX across all WRAITH desktop clients (Transfer, Chat, Sync) with consistent styling, accessibility improvements, and a comprehensive design reference document.
1919

2020
### Highlights
2121

@@ -26,6 +26,9 @@ This release delivers a major UI overhaul for WRAITH-Chat, transforming it into
2626
- **7-Tab Settings Modal**: Profile, Privacy, Notifications, Appearance, Voice/Video, Security, About
2727
- **Video Call Overlay**: Quality controls, layout options, recording functionality
2828
- **Group Creation Wizard**: Step-by-step group setup with member selection
29+
- **UI/UX Design Reference**: Comprehensive 2,400+ line design guide for all WRAITH clients
30+
- **Cross-Client UI Standardization**: Consistent styling across WRAITH-Transfer, WRAITH-Chat, WRAITH-Sync
31+
- **JACK/ALSA Audio Fix**: Resolved device enumeration errors in WRAITH-Chat voice calling
2932

3033
### Added
3134

@@ -87,14 +90,41 @@ This release delivers a major UI overhaul for WRAITH-Chat, transforming it into
8790
- Step 3: Privacy settings (public/private, join approval)
8891
- Step 4: Review and create confirmation
8992

93+
#### UI/UX Design Reference (docs/clients/UI-UX-DESIGN-REFERENCE.md)
94+
- 2,400+ lines comprehensive design system documentation
95+
- Color palette specification (WRAITH brand colors, semantic colors, slate scale)
96+
- Typography standards (Inter font family, size scale, line heights)
97+
- Component library documentation (buttons, inputs, modals, cards)
98+
- Layout patterns (responsive grid, spacing scale, breakpoints)
99+
- Accessibility guidelines (WCAG 2.1 AA compliance, focus management)
100+
- Migration guide for standardizing existing components
101+
102+
#### Cross-Client UI/UX Standardization
103+
- **WRAITH-Transfer**: Updated 2 components (NewTransferDialog, test utilities)
104+
- **WRAITH-Chat**: Updated 26 components with consistent styling
105+
- **WRAITH-Sync**: Updated 6 components (App, FolderList, Settings, ConflictResolver, SyncStatus, VersionHistory)
106+
- **Color Palette**: Standardized gray->slate color migration across all clients
107+
- **Modal Backdrops**: Consistent semi-transparent overlay styling
108+
- **Button Styles**: Unified button variants (primary, secondary, danger, ghost)
109+
- **Form Elements**: Standardized input styling with proper focus states
110+
- **Accessibility**: ARIA attributes, focus-visible outlines, keyboard navigation
111+
90112
### Changed
113+
- Color palette migrated from gray to slate tones (gray-100->slate-100, etc.)
114+
- Modal backdrop standardized with bg-black/60 overlay
91115
- Tailwind CSS upgraded to v4 with @tailwindcss/vite plugin
92116
- Zustand stores expanded for voice, video, and group state management
93117
- Frontend code expanded from ~1,800 to ~3,200 lines
94118
- Improved dark theme with consistent color palette
95119
- Enhanced accessibility with ARIA labels and keyboard navigation
96120

97121
### Fixed
122+
- **JACK/ALSA Audio Errors**: Resolved device enumeration errors in WRAITH-Chat voice calling
123+
- Added JACK_NO_START_SERVER and JACK_NO_AUDIO_RESERVATION environment variables
124+
- Implemented stderr suppression during ALSA device enumeration
125+
- Prevents connection errors to JACK server when not in use
126+
- **TypeScript Configuration**: Fixed vitest/config import in WRAITH-Transfer
127+
- **Type-Only Imports**: Corrected import statements for type definitions
98128
- Tauri build configuration for wraith-chat client
99129
- Vite plugin compatibility with Tailwind CSS v4
100130
- ESLint configuration for strict TypeScript checks
@@ -105,6 +135,9 @@ This release delivers a major UI overhaul for WRAITH-Chat, transforming it into
105135
- **New Components**: 8 major UI components
106136
- **Zustand Stores**: 6 stores (node, conversation, message, contact, voice, video)
107137
- **Dependencies Updated**: Tailwind CSS v4.0, @tailwindcss/vite 4.0
138+
- **UI/UX Reference**: 2,400+ lines of design documentation
139+
- **Components Updated**: 50+ across all 3 desktop clients (Transfer, Chat, Sync)
140+
- **Color Migration**: Comprehensive gray->slate migration for visual consistency
108141

109142
---
110143

README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ A decentralized secure file transfer protocol optimized for high-throughput, low
1717

1818
## Current Status
1919

20-
**Version:** 1.7.1 WRAITH-Chat UI Redesign | **Development Phase:** Phase 17 Complete
20+
**Version:** 1.7.1 WRAITH-Chat UI Redesign & UI/UX Standardization | **Development Phase:** Phase 17 Complete
2121

22-
WRAITH Protocol is production-ready with desktop, mobile, and messaging applications featuring full protocol integration, real-time voice/video calling, and advanced group messaging. Phase 17 completes the mobile ecosystem with actual WRAITH protocol bindings (replacing placeholders), secure native storage (Android Keystore, iOS Keychain), push notifications (FCM/APNs), encrypted voice/video calls (Opus/VP8/VP9), and Sender Keys group messaging for efficient multi-party encryption. Version 1.7.1 adds a comprehensive UI redesign for WRAITH-Chat with professional header, sidebar navigation, enhanced message bubbles, 7-tab settings modal, video call overlay, and group creation wizard.
22+
WRAITH Protocol is production-ready with desktop, mobile, and messaging applications featuring full protocol integration, real-time voice/video calling, and advanced group messaging. Phase 17 completes the mobile ecosystem with actual WRAITH protocol bindings (replacing placeholders), secure native storage (Android Keystore, iOS Keychain), push notifications (FCM/APNs), encrypted voice/video calls (Opus/VP8/VP9), and Sender Keys group messaging for efficient multi-party encryption. Version 1.7.1 adds a comprehensive UI redesign for WRAITH-Chat with professional header, sidebar navigation, enhanced message bubbles, 7-tab settings modal, video call overlay, and group creation wizard. Additionally, v1.7.1 standardizes UI/UX across all WRAITH desktop clients (Transfer, Chat, Sync) with consistent color palette (slate tones), modal styling, accessibility improvements, and a new comprehensive UI/UX Design Reference document.
2323

2424
**Project Metrics (2026-01-21):**
2525
- **Code Volume:** ~72,400 lines of Rust code across protocol crates + ~14,100 lines in client applications (Kotlin/Swift/TypeScript)
@@ -31,7 +31,7 @@ WRAITH Protocol is production-ready with desktop, mobile, and messaging applicat
3131
- **Client Applications:** 5 production-ready applications (4 Tier 1 + 1 Tier 2) with full protocol integration
3232
- **CI/CD:** GitHub Actions updated (upload-artifact v6, download-artifact v7, cache v5)
3333

34-
**v1.7.1 Highlights (WRAITH-Chat UI Redesign):**
34+
**v1.7.1 Highlights (WRAITH-Chat UI Redesign & UI/UX Standardization):**
3535
- Professional Header: Connection status indicator, peer ID display, session statistics
3636
- Sidebar Navigation: Search, conversation filters (All/Direct/Groups), New Chat/Group buttons
3737
- Enhanced Chat: Voice/video call buttons, message bubbles with read receipts, date separators
@@ -41,6 +41,10 @@ WRAITH Protocol is production-ready with desktop, mobile, and messaging applicat
4141
- Group Creation Wizard: Step-by-step group setup with member selection
4242
- Tailwind CSS v4: Upgraded with @tailwindcss/vite plugin
4343
- Frontend expanded from ~1,800 to ~3,200 lines with 8 new UI components
44+
- **UI/UX Design Reference**: New 2,400+ line design guide (docs/clients/UI-UX-DESIGN-REFERENCE.md)
45+
- **UI/UX Standardization**: Consistent styling across WRAITH-Transfer, WRAITH-Chat, WRAITH-Sync
46+
- **Accessibility**: 50+ component fixes including ARIA attributes, focus states, and color contrast
47+
- **JACK/ALSA Fix**: Resolved audio device enumeration errors in WRAITH-Chat voice calls
4448

4549
**Phase 17 Highlights:**
4650
- Mobile Protocol Integration: Android JNI and iOS UniFFI with actual WRAITH protocol bindings (26 new tests)
@@ -381,6 +385,7 @@ WRAITH-Protocol/
381385
### Client Applications
382386
- [Client Overview](docs/clients/overview.md)
383387
- [Reference Client Design](docs/clients/REFERENCE_CLIENT.md) - GUI design guidelines for client applications
388+
- [UI/UX Design Reference](docs/clients/UI-UX-DESIGN-REFERENCE.md) - Comprehensive design system for all WRAITH clients
384389
- [Client Roadmap](to-dos/ROADMAP-clients.md)
385390

386391
### Project Planning

clients/wraith-chat/frontend/dist/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
<meta charset="UTF-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
66
<title>WRAITH Chat</title>
7-
<script type="module" crossorigin src="/assets/index-fZfPkBPr.js"></script>
8-
<link rel="stylesheet" crossorigin href="/assets/index-dS-UZ-Bn.css">
7+
<script type="module" crossorigin src="/assets/index-JdKSiSkK.js"></script>
8+
<link rel="stylesheet" crossorigin href="/assets/index-C0J8g4LI.css">
99
</head>
1010
<body>
1111
<div id="root"></div>

clients/wraith-chat/frontend/src/App.tsx

Lines changed: 64 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
// WRAITH Chat - Main Application (Redesigned)
22

3-
import { useEffect, useState, useRef } from 'react';
4-
import { useConversationStore } from './stores/conversationStore';
5-
import { useContactStore } from './stores/contactStore';
6-
import { useMessageStore } from './stores/messageStore';
7-
import { useNodeStore } from './stores/nodeStore';
8-
import { useCallStore } from './stores/callStore';
9-
import { useGroupStore } from './stores/groupStore';
3+
import { useEffect, useState, useRef } from "react";
4+
import { useConversationStore } from "./stores/conversationStore";
5+
import { useContactStore } from "./stores/contactStore";
6+
import { useMessageStore } from "./stores/messageStore";
7+
import { useNodeStore } from "./stores/nodeStore";
8+
import { useCallStore } from "./stores/callStore";
9+
import { useGroupStore } from "./stores/groupStore";
1010

1111
// Components
12-
import Header from './components/Header';
13-
import Sidebar from './components/Sidebar';
14-
import ChatHeader from './components/ChatHeader';
15-
import MessageBubble, { DateSeparator } from './components/MessageBubble';
16-
import MessageInput from './components/MessageInput';
17-
import InfoPanel from './components/InfoPanel';
18-
import SettingsModal from './components/SettingsModal';
19-
import NewChatDialog from './components/NewChatDialog';
20-
import NewGroupDialog from './components/NewGroupDialog';
21-
import GroupSettings from './components/GroupSettings';
22-
import VoiceCall from './components/VoiceCall';
23-
import VideoCallOverlay from './components/VideoCallOverlay';
12+
import Header from "./components/Header";
13+
import Sidebar from "./components/Sidebar";
14+
import ChatHeader from "./components/ChatHeader";
15+
import MessageBubble, { DateSeparator } from "./components/MessageBubble";
16+
import MessageInput from "./components/MessageInput";
17+
import InfoPanel from "./components/InfoPanel";
18+
import SettingsModal from "./components/SettingsModal";
19+
import NewChatDialog from "./components/NewChatDialog";
20+
import NewGroupDialog from "./components/NewGroupDialog";
21+
import GroupSettings from "./components/GroupSettings";
22+
import VoiceCall from "./components/VoiceCall";
23+
import VideoCallOverlay from "./components/VideoCallOverlay";
2424

2525
export default function App() {
2626
// UI State
@@ -33,7 +33,8 @@ export default function App() {
3333
const [activeVideoCall, setActiveVideoCall] = useState<string | null>(null);
3434

3535
// Stores
36-
const { conversations, selectedConversationId, loadConversations } = useConversationStore();
36+
const { conversations, selectedConversationId, loadConversations } =
37+
useConversationStore();
3738
const { loadContacts } = useContactStore();
3839
const { messages, loadMessages, sendMessage, markAsRead } = useMessageStore();
3940
const { startNode, refreshStatus, status } = useNodeStore();
@@ -44,8 +45,12 @@ export default function App() {
4445
const messagesEndRef = useRef<HTMLDivElement>(null);
4546

4647
// Get selected conversation
47-
const selectedConversation = conversations.find((c) => c.id === selectedConversationId);
48-
const conversationMessages = selectedConversationId ? messages[selectedConversationId] || [] : [];
48+
const selectedConversation = conversations.find(
49+
(c) => c.id === selectedConversationId,
50+
);
51+
const conversationMessages = selectedConversationId
52+
? messages[selectedConversationId] || []
53+
: [];
4954

5055
// Initialize app
5156
useEffect(() => {
@@ -76,18 +81,24 @@ export default function App() {
7681

7782
// If it's a group, load group members
7883
const conv = conversations.find((c) => c.id === selectedConversationId);
79-
if (conv?.conv_type === 'group' && conv.group_id) {
84+
if (conv?.conv_type === "group" && conv.group_id) {
8085
selectGroup(conv.group_id);
8186
} else {
8287
selectGroup(null);
8388
}
8489
}
85-
}, [selectedConversationId, loadMessages, markAsRead, conversations, selectGroup]);
90+
}, [
91+
selectedConversationId,
92+
loadMessages,
93+
markAsRead,
94+
conversations,
95+
selectGroup,
96+
]);
8697

8798
// Scroll to bottom when messages change
8899
const messageCount = conversationMessages.length;
89100
useEffect(() => {
90-
messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
101+
messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
91102
}, [messageCount]);
92103

93104
// Handle send message
@@ -96,10 +107,14 @@ export default function App() {
96107

97108
try {
98109
if (selectedConversation.peer_id) {
99-
await sendMessage(selectedConversation.id, selectedConversation.peer_id, text);
110+
await sendMessage(
111+
selectedConversation.id,
112+
selectedConversation.peer_id,
113+
text,
114+
);
100115
}
101116
} catch (error) {
102-
console.error('Failed to send message:', error);
117+
console.error("Failed to send message:", error);
103118
}
104119
};
105120

@@ -192,8 +207,8 @@ export default function App() {
192207
disabled={!status?.running}
193208
placeholder={
194209
status?.running
195-
? 'Type a message...'
196-
: 'Connect to send messages'
210+
? "Type a message..."
211+
: "Connect to send messages"
197212
}
198213
/>
199214
</>
@@ -208,8 +223,8 @@ export default function App() {
208223
Welcome to WRAITH Chat
209224
</h2>
210225
<p className="text-slate-400 mb-6">
211-
Select a conversation from the sidebar or start a new chat to begin
212-
messaging securely.
226+
Select a conversation from the sidebar or start a new chat to
227+
begin messaging securely.
213228
</p>
214229
<div className="flex flex-col sm:flex-row gap-3 justify-center">
215230
<button
@@ -236,7 +251,7 @@ export default function App() {
236251
conversation={selectedConversation}
237252
onClose={() => setShowInfoPanel(false)}
238253
onOpenGroupSettings={
239-
selectedConversation.conv_type === 'group'
254+
selectedConversation.conv_type === "group"
240255
? () => setShowGroupSettings(true)
241256
: undefined
242257
}
@@ -292,17 +307,19 @@ interface MessageGroup {
292307
id: number;
293308
conversation_id: number;
294309
sender_peer_id: string;
295-
content_type: 'text' | 'media' | 'voice' | 'file';
310+
content_type: "text" | "media" | "voice" | "file";
296311
body?: string;
297312
timestamp: number;
298313
sent: boolean;
299314
delivered: boolean;
300315
read_by_me: boolean;
301-
direction: 'incoming' | 'outgoing';
316+
direction: "incoming" | "outgoing";
302317
}>;
303318
}
304319

305-
function groupMessagesByDate(messages: MessageGroup['messages']): MessageGroup[] {
320+
function groupMessagesByDate(
321+
messages: MessageGroup["messages"],
322+
): MessageGroup[] {
306323
const groups: MessageGroup[] = [];
307324
let currentGroup: MessageGroup | null = null;
308325

@@ -324,7 +341,12 @@ function groupMessagesByDate(messages: MessageGroup['messages']): MessageGroup[]
324341
// Icons
325342
function MessageIcon({ className }: { className?: string }) {
326343
return (
327-
<svg className={className} fill="none" stroke="currentColor" viewBox="0 0 24 24">
344+
<svg
345+
className={className}
346+
fill="none"
347+
stroke="currentColor"
348+
viewBox="0 0 24 24"
349+
>
328350
<path
329351
strokeLinecap="round"
330352
strokeLinejoin="round"
@@ -337,7 +359,12 @@ function MessageIcon({ className }: { className?: string }) {
337359

338360
function ChatIcon({ className }: { className?: string }) {
339361
return (
340-
<svg className={className} fill="none" stroke="currentColor" viewBox="0 0 24 24">
362+
<svg
363+
className={className}
364+
fill="none"
365+
stroke="currentColor"
366+
viewBox="0 0 24 24"
367+
>
341368
<path
342369
strokeLinecap="round"
343370
strokeLinejoin="round"

0 commit comments

Comments
 (0)