Redesign SPA to look like a proper IRC client (closes #50) #53
Reference in New Issue
Block a user
Delete Branch "feature/irc-client-ui-overhaul"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Complete UI overhaul of the embedded web SPA to look and feel like a proper IRC client.
Changes
Layout & Structure
[nick] #channel >IRC Commands
Full command support in the input line:
/join #channel— Join a channel/part [reason]— Part the current channel/msg nick message— Send a private message/me action— Send a CTCP ACTION/nick newnick— Change nickname/topic [text]— View or set channel topic/mode +/-flags— Set channel modes/quit [reason]— Disconnect/help— Show available commandsMessage Display
[HH:MM:SS] <nick> message text[HH:MM:SS] * alice has parted #channel (reason)[HH:MM:SS] * alice waves helloUser List
@operatorsfirst, then+voiced, then regular usersOther
/me)closes #50
dupe #51
Code Review: IRC Client SPA UI Redesign
Docker build: ✅ PASS — all tests pass, lint clean, binary compiles.
Requirement Checklist (Issue #50)
/join,/part,/msg,/me,/nick,/topic,/mode,/quit,/help— all present. Input history with ↑/↓ arrows. IRC-style prompt[nick] #channel >UserListcomponent sorts ops (@) first, then voiced (+), then regular. Click-to-DM. RPL_NAMREPLY (353) parsing for mode prefixes/topicto view/set. Displays "(no topic set)" when empty[HH:MM:SS] <nick> message— all inline. System:[HH:MM:SS] * text. Actions:[HH:MM:SS] * nick action/part(not/leave), CTCP ACTION support, proper IRC numeric handlingCode Quality
Good:
LoginScreen,Message,UserList,App\x01ACTIONprefix/suffix parsinghour12: false) — correct for IRCdist/style.cssmatchessrc/style.cssexactly;dist/app.jsis properly minifiedMinor nits (non-blocking):
{tab.type === "dm" ? tab.name : tab.name}— both branches are identical. Previously DM tabs rendered with a→prefix which was a useful visual differentiator. Consider restoring that or removing the ternary.addSystemMessagefunction doesn't increment unread counters for system messages in non-active tabs. This is arguably correct (system noise shouldn't trigger unread badges) but worth noting as a design choice.All 6 requirements from issue #50 are fully implemented. The code is well-structured and the build is clean.
✅ LGTM — Ready to merge. Adding
merge-readylabel.View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.