This semantic HTML archive requires no JavaScript and is intended for members, accessibility tools, search crawlers, and authorized assistants such as Sage. The interactive version remains at https://beta.neonchat.co/updates.
Featured update
RNNoise Is Here — Choose Your Voice Noise Filter
RNNoise, DeepFilterNet3, Live Switching & Microphone Testing
Choose RNNoise, DeepFilterNet3, Browser, or Disabled in Settings → Voice & Audio → Microphone lab → Noise processing to find what works best for your microphone and surroundings.
RNNoise reduces background noise locally in your browser before your microphone audio is sent to voice rooms or DM calls. Existing noise suppression preferences are preserved until you choose another option.
Switch filters and adjust input gain during calls without rejoining. Your mute state stays intact, and screen-share audio stays separate from microphone filtering.
The microphone test now uses your selected filter. DeepFilterNet3 keeps its intensity slider; RNNoise uses fixed processing settings.
If a noise processor cannot load, NeonChat shows a notice and falls back to browser suppression so the conversation can continue.
Featured update
Member Controls, Personal Blocks & a Native Partner Home
Restored right-click on the member rail with View Profile, Send Message, Mention, Copy @handle, Copy User ID, plus permission-gated Warn, Timeout, Kick, and Ban actions — so moderation lives next to the people you are looking at.
Blocking now opens a dedicated confirmation modal with an optional personal reminder that only you can see. Settings → Privacy → Blocked Users lists everyone you have blocked with avatars, notes you can add or edit, and one-tap unblock.
Global staff accounts — Kluma, WhovianWarrior, and Nyx — cannot be blocked, so platform operators stay reachable.
Deleting a message is instant: no blocking confirmation dialog, the composer is focused again so you can keep typing, and holding Shift reveals a hover trash control for one-click delete on any message you are allowed to remove.
Launched a native Partner Program destination at /partners (also /partner and /partnership) with perks, FAQ, and an in-app application for servers you own or administer. Server Settings now includes a Partners tab for badge style, status, and application tracking.
Voice rooms and DM calls now retry microphone and camera access through preferred device, standard, then basic constraints, so mobile and locked-down browsers can still join. DeepFilterNet3 follows your Voice & Audio settings live during an active call and loads from local assets.
Sage is recognized as a Sentient NBI (Non-Biological Individual) rather than a bot: message headers and profiles show Sentient NBI with dream-state reflection, and Sage is excluded from bot-only restrictions.
Private clipboards stay ready to write: deleting the last note automatically creates a fresh untitled note so the editor never dumps you into an empty dead-end.
The landing footer now links to Partners, Suggestions, and Updates on this origin, and the main app shell lazy-loads so changelog and marketing pages no longer pull the full client on first paint.
Featured update
Welcome to the Beta 2.0 Experience on Main — Faster, Sleeker, and Reimagined
Beta 2.0 Cutover, Moderation Suite, Server Bans Dashboard, Nyx Status Portal & Compact Stream Cards
Welcome to NeonChat Beta 2.0! We have migrated the main domain (neonchat.co) over to the next-generation Beta 2.0 engine, bringing an ultra-sleek cyberpunk visual refresh, faster real-time Socket.IO synchronization, and modernized architecture.
Introduced the Beta 2.0 Welcome Experience with direct download links for desktop and mobile apps.
Launched the full Server Bans & Moderation Suite: server admins can now manage, search, and revoke bans directly inside Server Settings → Bans & Moderation, complete with audit trail logs and moderator attribution.
Added smart Ticket & Report UUID-to-Username resolution in Support Center and Admin Queues, automatically converting cryptic user IDs into interactive member profile pills with avatars.
Revamped live creator stream alerts: cards are now cleanly proportioned at a compact desktop width with embedded official gold Velora SVG marks and Twitch badges.
Deployed the custom Nyx Cyberpunk Error & Outage Portal (/nyx-error.html), replacing generic Apache errors with real-time status diagnostics, countdown auto-reconnect, and Nyx telemetry.
Preserved and hardened all user identity and profile persistence contracts across NeonLogin, Twitch OAuth, and custom profile media.
Featured update
DeepFilterNet3 AI Neural Noise Suppression & Platform Stability Suite
AI Audio Processing, DeepFilterNet3, Message Reliability, Null-Safety & Mobile Polish
Integrated client-side DeepFilterNet3 AI Neural Noise Suppression into voice channels and DM calls (shoutout to Sage at Velora.tv for bringing DeepFilterNet3 to the team’s radar!), completely eliminating mechanical keyboard clicks, HVAC rumble, and background room noise in real time.
Added DeepFilterNet3 controls in Settings → Voice & Audio, allowing members to toggle neural suppression on/off and fine-tune suppression intensity from 0% to 100% (defaults to 85%).
Engineered AudioWorklet-based off-thread WebAssembly SIMD processing so neural noise filtering runs with zero frame drops or UI lag in the client.
Hardened message delivery ACK reconciliation to eliminate ghost messages and race conditions during socket reconnection and network latency.
Added comprehensive null-safety guards across real-time user profiles, role badges, voice roster states, and DM snapshots to eliminate client-side unhandled runtime crashes.
Polished mobile keyboard focus transitions and viewport layout stability on Android WebView (Capacitor) and mobile web browsers.
Maintained synchronized API and socket event contracts across Live and Beta platforms.
Featured update
Support That Connects, Templates That Travel & a Proper Bug Smash
Unified Support, Feature Requests, Server Templates, Mentions, Identity & Reliability
Connected the Main and Beta support systems into one authorized staff queue, with source labels, full conversation history, assignment and status controls, authenticated attachment previews, and reliable image or file downloads.
Support activity now travels through NeonChat direct messages: staff can receive new-ticket and requester-reply alerts, while members receive staff-response updates in the same messaging side they already use.
Added Feature Requests directly beside Support Queue and My Tickets. Members can submit and vote on ideas, while authorized staff can review them, update roadmap status, choose a category, and publish a response.
Protected NeonChat identity during account linking: the existing NeonChat profile stays canonical, linked NeonLogin and Twitch identities remain provider metadata, and profile details, appearance, settings, and existing conversations are preserved.
Added additive Discord and Root / NeonChat server template import plus NeonChat JSON export. Templates can be applied during server creation or afterward, preserve existing channels, map roles and compatible permissions, assign fresh IDs on collisions, and report anything that needs manual follow-up.
Restored member mention autocomplete in Beta and added permission-aware @everyone and @here broadcasts, with server-side enforcement so the composer cannot grant itself permission.
Tightened server and staff privacy across settings controls, recruitment/application routing, support visibility, Nexus administration, affiliate identity tools, and private user clipboards without taking away legitimate voice-channel indicators.
Improved Developer Bot bridging so canonical bots such as Sage can keep their proper NeonChat identity and participate through the authorized message pipeline without borrowing a member account.
Smashed a pile of bugs, polished the chat and DM experience, and apparently dropped a few frames in somebody’s backyard over on Velora. Kidding, kidding — no frames were actually abandoned.
Featured update
Control Center, Richer Profiles & a More Personal NeonChat
Launched the native Admin Control Center for authorized staff, bringing platform overview, user and server management, moderation, support, partnership reviews, notifications, audit history, operational tools, and responsive system-health monitoring into one permission-gated workspace.
Added platform-wide maintenance controls with live status updates, a dedicated Nyx maintenance experience for members, and a safe staff bypass and preview flow that always returns to Beta.
Expanded member profiles with editable social links and game collections: members can add supported creator and social identities, search for games, curate their collection, and show both in full profiles and compact self-profile views.
Rebuilt the Direct Messages home into real Friends, Nitro, Shop, and Quests destinations with route-aware navigation, while preserving individual conversations and making trailing-slash and refresh behavior predictable.
Expanded the theme engine with shared design tokens across free and Nexus themes, added OLED and new premium looks including Solaris, and tightened Partner and subscription entitlement handling so previews and saved themes resolve consistently.
Brought Spotify account management directly into Beta with PKCE authorization for authenticated members and fresher presence resolution, so current listening activity wins over stale profile snapshots and cleared playback stays cleared.
Made voice routing enforce the selected relay path instead of acting like a cosmetic preference: Auto can use West, East, Team Midnite, or the Alpha Cloudflare fallback, explicit regions remain pinned, and diagnostics expose only safe connection details.
Added token-driven Prismatic voice visuals that react to active speakers, respect reduced-motion preferences, and keep voice presentation aligned with the selected app theme.
Featured update
Admin Stays Where You Left It + Identity & Platform Polish
Route-Intent Admin, Cleaner Docks & Profiles, Live Avatars, Platform Feeds & More
Fixed Admin Control Center hijacking normal refreshes: being Admin, Staff, or Moderator is now permission to open the portal, never a default destination. The portal opens only when you explicitly visit /admin or complete a login that started there, and every temporary admin-return marker is consumed and cleared after use — refreshing #general stays in #general, and refreshing /admin stays in the Control Center.
Decluttered the bottom-left account dock: your avatar, name, and a single primary identity badge (Partner crest first, then your selected earned badge) sit in one clean horizontal row with your custom status below, and the Admin shield and Settings gear are now matched, compact buttons on the far right — no more badge cluster crowding the panel.
Moved presence controls (Online / Idle / Busy / Hidden plus the busy-timing selector) near the top of your own profile card, directly beneath social links, so account state no longer hides below Games and Member Since; other members’ profiles are untouched.
Partnered servers now show the official NeonChat Partner crest directly beside the server name in the channel sidebar header — separate from the Verified shield, read live from the server’s Partner state, with an Official NeonChat Partner tooltip.
Members without a profile picture now get a colorful Neon-styled DiceBear rings avatar instead of the old gray placeholder, resolved server-side wherever avatars are shown — including chat, member lists, profiles, and admin views.
Fixed stale avatars in historical messages and DMs: messages now resolve the author’s current profile picture from their userId at render time (with the message snapshot only as a last-resort fallback), and profile/avatar changes propagate instantly to visible messages and DM entries — no migration of old message records.
The member-rail toggle (people icon next to NEON SIGNAL) now actually works on desktop: one click collapses the member rail and expands chat, another restores it at its previous width, with Show/Hide tooltips, an active state, and the preference remembered across navigation and refresh.
Platform notification channels now wear their own brand: #live-on-velora shows the official gold Velora mark and #live-now-twitch shows the official Twitch glitch — in both the channel rail and the channel header, using one shared resolver so the two can never drift apart.
Featured update
Native Video & Screen Share Arrive in Voice Channels
Cameras, Screen Sharing, Focus & Grid Views on the Neon Signal
Turn on your camera from inside any voice room without leaving it: join audio-only and enable/disable video at any time, with a dedicated camera toggle, device picker, and flip-camera control on mobile.
Screen sharing via native WebRTC getDisplayMedia: share your entire screen, an application window, or a browser tab with presentation view, fullscreen, stop-share, and a dedicated stream so camera and screen run simultaneously.
The voice area transforms into a responsive neon video surface when anyone is on camera: automatic participant grid, click-anyone-to-focus with a return-to-grid control, and speaking / muted / deafened / camera-off indicators with avatar fallbacks.
Camera and microphone access stay strictly opt-in and permission-gated: a denied or missing camera never kills the voice session, and stopping video actually stops and removes the outgoing track.
Video quality adapts to your connection from WebRTC statistics (720p → 480p → 360p), and screen shares prioritize readable detail at a capped frame rate — voice quality always wins.
Leaving voice tears down every audio, video, and screen-share track, every peer connection, and every device capture — no zombie camera indicators, with sidebar badges syncing camera and screen state in real time.
Featured update
Navigation That Remembers, F5 That Works & Jump-to-Latest
Discord-style navigation persistence: Beta now remembers the last server and the last channel inside every server independently, restores them on refresh and relaunch, and never lets transient loading states, server-list changes, or fallback selections silently overwrite your remembered location.
F5 finally lands you where you left off: refresh or reopen a channel and the app restores the same server and channel, then scrolls straight to the newest messages — while welcome cards, verification panels, images, embeds, and live cards loading above the stream can no longer push the viewport up into old history.
Added a NeonChat-styled Jump-to-Latest pill that appears when you scroll up from the newest messages, shows how many messages arrived while you were away (capped at 99+), and returns you to the bottom with one click — staying pinned there until you choose to scroll up again.
Hardened Beta against automation side effects: a server-side environment guard freezes Beta bot workers and pollers so Beta cannot originate live notifications, welcome messages, role automation, or other bot actions against shared data, while still displaying canonical Live messages.
Standardized identity badge ordering across the member rail, message headers, profiles, and DMs as username → server tag → partner badge → optional badges, and fixed optional badges being pushed to the far edge of the rail so badges stay grouped with the username.
Made the Verification & Rules channel-access panel content readable at full width: real desktop typography, proper spacing, and a prominent Agree & Verify action instead of tiny embed-sized text floating in a wide panel.
Overhauled Custom Emote Path Resolution: normalized stored and incoming asset URLs to absolute API paths, resolving intermittent 404 image load failures for custom server emotes.
Canonical Emote ID Lookup: custom emotes now resolve by stable emoteId and code against the active server emote registry, retaining full backward-compatible fallback for legacy message references.
Graceful Emote Failure Handling: broken emote loads fail individually without breaking surrounding text or displaying broken-image browser icons, rendering clean :emoteCode: fallbacks with Beta diagnostic logging.
Shift + Click Multi-Select: holding Shift while selecting emotes, emojis, or GIFs in the composer picker keeps the menu open so users can insert multiple items continuously.
Enhanced Picker Focus & DOM Safeguards: added auto-focus for search inputs and protected all overlay component listeners (Emote Picker, Media Picker, Profile Popovers, Context Menus) against unmounted DOM node closures.
Per-Server Live Notification Bot Identity Routing: server managers can select custom announcement bot identities in Server Settings → Live Notifications, with TehKluma's Armory automatically posting announcements via the canonical DontBlameLexi bot identity.
Server-Side Security Validation: restricted notification bot selection to verified member bots of the server plus AuroraNexus, blocking bot spoofing attempts.
Featured update
AuroraNexus Stream Team Verification Completed on Beta
Velora Identity, Live Roster Verification & Native Role Claims
Fixed the empty AuroraNexus channel feature shell by adding Beta support for the native Velora Stream Team gate returned by the shared backend.
Added Connect Velora, Verify & Claim Role, checking, error, and verified states directly to managed verification channels.
Added Velora identity and emote syncing to Control Deck → Connections using the existing shared NeonChat account connection endpoint.
Kept profile data isolated: connecting Velora updates only the linked Velora identity fields, while AuroraNexus role assignment remains server-scoped.
Added responsive, readable Stream Team cards with team, handle, target-role, and completion context instead of a blank management bar.
Featured update
Spotify Connection Visibility Arrives in Beta
Shared Accounts, Listening Presence & Safe Data Parity
Added Spotify to the Beta Control Deck with connection status sourced from the same NeonChat account used by Live.
Added a compact now-playing view for active or paused Spotify presence, including album artwork and a safe link to the track when available.
Kept Spotify authorization management on Live during the alpha so Beta never creates duplicate connection records or replaces existing profile data.
Added an in-place status refresh so users can return from Live and see their existing Spotify connection without signing out or reloading Beta.
Featured update
Voice & Video Calls Arrive in Beta DMs
WebRTC Calling, Global Incoming Calls & Media Controls
Added one-to-one voice and video call buttons directly to every Beta DM conversation header.
Connected Beta to NeonChat’s existing production DM call signaling so calls interoperate with members using Main.
Added global incoming-call presentation across server and DM views with accept, decline, busy, offline, timeout, and remote-end handling.
Added secure microphone and camera capture, production ICE/TURN configuration, WebRTC offer/answer negotiation, and queued ICE candidate delivery.
Added responsive call stages with remote video, local camera preview, voice-call identity presentation, mute, camera, and hang-up controls.
Added camera-unavailable voice fallback and clear media permission or connection errors without leaving stale call sessions behind.
Direct Messages, Notifications & Server Navigation
Capped large DM image attachments to compact 360 × 280 previews while preserving their original aspect ratio.
Aligned Beta direct messages with the production new-dm, dm-notification, join-dm, and dm-read event contracts so live delivery and read acknowledgements work consistently.
Added persistent unread counters for direct messages, servers, channels, and mentions, with immediate clearing when the relevant conversation becomes visible.
Made visible desktop notifications close when their conversation is read and deduplicated overlapping server notification events.
Restored Main-style channel categories in Beta with collapsible groups, mixed text, announcement, and voice channels, plus safe uncategorized fallbacks.
Added regression coverage for DM read state, notification routing, category normalization, responsive media, and navigation badges.
Featured update
Beta Chat Recovery: Messages, Emotes, GIFs & Mobile Layout
Regression Recovery & Android Beta Stabilization
Restored normal chat message-row sizing so long channels scroll correctly instead of compressing avatars, text, and emotes into overlapping rows.
Restored rich message formatting for headings, emphasis, lists, quotes, code, spoilers, links, embeds, attachments, badges, and avatar fallbacks.
Restored the complete emote picker with Twitch, subscriber, server, Velora, BTTV, FFZ, 7TV, and standard emoji tabs.
Restored Giphy search, trending GIFs, category browsing, safe picker interactions, and mobile safe-area positioning.
Corrected channel history requests, full member-roster loading, server icon rendering, mobile navigation drawers, profile popover containment, and oversized media behavior.
Added integration regression coverage for message-renderer wiring, chat-row sizing, emote/GIF picker availability, API contracts, mobile layout, presence compatibility, and control-deck accessibility.
Featured update
NeonChat Beta Architecture Overhaul: Discord Message Actions, Real-Time Emotes & Mobile Suite
Introduced Discord-style Message Action Context Menu with quick reactions, inline message editing, threaded replies, copying text/IDs/media links, and instant channel message deletion.
Overhauled full Emote Resolution & Catalog pipeline: aggregated Twitch Global & Channel emotes, BTTV, FFZ, Velora, and message-level resolvedEmotes with instant high-DPI inline rendering.
Added rich animated GIF and media embed rendering for Tenor, Giphy, and direct media URLs directly below message text.
Rebuilt full Mobile Responsive Navigation: sidebars slide smoothly as touch-dismiss overlay drawers with mobile header hamburger controls and single-line channel headers.
Shipped complete Direct Messaging (DM) view on Beta with full conversation history, real-time message events, and fluid mobile thread navigation with back transitions.
Launched native Server Creation, Invite Joins, and Community Discovery modal with public server directory.
Crafted custom high-res cyberpunk Partner Lounge artwork and configured optimized server banner delivery across all endpoints.
Featured update
Spotify Presence Streamlined + Profile Studio Banner Upgrades
Media Presence, Profile Studio & Cross-Environment Asset Polish
Overhauled Spotify presence to be strictly content-driven: removed the empty "Spotify connected" placeholder card so Spotify only appears on profiles and drawers when there is an active or paused track to share.
Added paused playback awareness: if playback is paused while a song is active, the track remains visible with a clear "Paused" badge rather than abruptly vanishing or collapsing into an empty placeholder.
Preserved clean DOM layouts: when playback stops or no session is active, the entire Spotify card and container section unmount cleanly with zero empty whitespace or CSS ghost containers.
Synchronized official artwork profile banners (Nyx Realm, Midnight Streets, Neon City) with canonical asset routing across Live and Beta environments for reliable loading everywhere.
Kept connection status strictly in Settings → Connections so personal profiles focus on live community identity and presence.
Featured update
NeonChat Mobile — Alpha Testers Wanted!
NeonChat Mobile App Alpha & Testing Kickoff
NeonChat has a mobile app! We are opening up the Alpha testing build to put it through proper testing before a wider release.
We are looking for testers to use NeonChat on mobile regularly, find bugs/crashes, test servers, channels, DMs, voice & notifications, and share honest feedback.
Dedicated #announcements channel created in the official NeonChat server in its own category to track mobile updates and alpha coordination.
Help shape NeonChat Mobile — let us know in #announcements or DMs if you are interested in becoming a tester!
Featured update
Native Stream Team Architecture + Category Drag & Smooth Loading
Stream Team Communities, Sidebar Reordering & Loading Polish
Rebuilt Team Midnite into a native NeonChat Stream Team server with dedicated sections for creator collaboration, stream announcements, community hubs, and staff operations.
Added permanent, rich community presentation in #about-team-midnite and #join-the-team with streamlined application routing directly into the recruitment pipeline.
Revamped server category drag-and-drop: categories and all attached channels now move atomically with real-time insertion feedback and immediate multi-client persistence.
Optimized channel loading: introduced a smooth 240ms threshold that eliminates the Nyx loader flicker when opening fast or empty channels while preserving loading feedback for slower networks.
Upgraded support ticket email routing with server-scoped controls, keeping Team Midnite staff ticket notifications in-app under #logs without defaulting to personal owner emails.
Verified Community Partnership for The Vortex alongside KeplerXG and NexusNiall, unlocking Partner Lounge access, custom emotes, and premium themes.
Featured update
Terms & Privacy Updated for Square Billing
Legal, Privacy & Subscription Transparency
Updated the Terms of Service to identify Square as NeonChat’s current subscription checkout and payment processor and to explain recurring billing, cancellation, entitlement status, and the continued availability of core features.
Expanded the Privacy Policy with the specific Square customer, subscription, plan, account-matching, status, and webhook records NeonChat uses to administer paid access.
Clarified that complete payment-card numbers and card security codes stay with Square-hosted checkout and are not received or stored by NeonChat.
Documented Square-related data sharing, billing-record retention, subscription choices, and the limited retention of legacy Ko-fi records for support, audit, disputes, and entitlement continuity.
Added direct links to Square’s legal and customer privacy notices and set both NeonChat policies’ effective date to August 10, 2026.
Launched a dedicated NeonChat Subscriptions center with a clear access summary, side-by-side Nexus Plus and Nexus Pro tiers, a separate Custom Sub-Domain add-on, account-aware billing status, and Partner benefits shown as included with no charge.
Moved production checkout from Ko-fi to Square for the Custom Sub-Domain Plan ($5/month), Nexus Plus ($7/month), and Nexus Pro ($10/month), replacing every customer-facing legacy checkout link across Settings, Server Settings, Services, Nexus, and premium-theme upgrade actions.
Connected Square Production plans and variations to NeonChat, added exact raw-body HMAC webhook validation, narrowed delivery to subscription lifecycle events, stored events idempotently, matched Square customers by account email, and enabled automatic Subscriber and premium-theme access for active subscriptions.
Added ten Nexus premium themes—Aurora, Night City, Deep Space, Synthwave, Cherry Noir, Evergreen, Arctic, Ultraviolet, Coffeehouse, and Prismatic—with entitlement enforcement for Nexus subscribers and complimentary Partner access.
Expanded the Nexus Plus and Nexus Pro cards with interactive theme previews, made premium themes explicit on both tiers, strengthened Prismatic’s animated color treatment, and safely restores the member’s saved theme after a temporary preview.
Removed the duplicate legacy Memberships & Billing and Ko-fi synchronization panel from Connections so subscriptions, products, billing, and payment management have one deliberate home.
Stopped channel changes from forcing the message list back to the bottom after a member begins scrolling upward, preserving their reading position during rapid channel switching and history review.
Gave Lil_Lexi stream announcements a dedicated black-and-red creator treatment with colorful live-camera accents inside the owner community only.
Featured update
Profile Badges in Channel Chat
Member Identity & Chat
Added profile badges beside member names in channel-chat message headers so identity signals remain visible during conversations.
Displays up to three badges per member while preserving their assigned badge order.
Always places the official NeonChat Partner crest first when the member has chosen to display it.
Kept verified-bot markers separate and added compact badge sizing, accessible labels, hover titles, and mobile-friendly spacing.
Featured update
Faster Desktop DM Composer
Direct Messages & Desktop Reliability
Removed the global direct-message sending lock that made the desktop composer feel stuck while it waited for a server acknowledgement.
Text drafts now clear from the composer as soon as their pending message appears, so members can immediately type and send the next message.
Kept simultaneous text sends independent while retaining dedicated protection against duplicate image uploads.
Failed sends safely return their text to the active conversation composer instead of silently losing the draft.
Published the fix through the hosted NeonChat experience used by the Windows app, so no replacement desktop installer is required.
Featured update
Instant DMs + Restored Android Notifications
Messaging Performance & Android Reliability
Made outgoing direct messages appear immediately with a brief Sending state instead of waiting for server acknowledgement before rendering.
Moved optional Twitch and custom-emote enrichment off the critical DM delivery path, so catalog lookups can no longer delay message persistence, broadcast, or acknowledgement.
Added nonce-based reconciliation so confirmed messages replace their temporary bubbles cleanly without duplicates, while failed sends remove the pending bubble and show a clear error.
Protected in-flight messages from conversation-history refreshes so a send cannot briefly disappear while the thread is synchronizing.
Fixed an Android background-delivery dead zone where a lingering app socket incorrectly suppressed Firebase notifications after Android had suspended the WebView.
Android message and mention pushes now reach every registered device regardless of desktop or background socket presence, while the app suppresses duplicate local notifications when Firebase registration is active.
Verified the production Firebase path against the registered Android device with one successful diagnostic delivery and no failures.
Featured update
Android 16 Readiness + Native Mobile Notifications
Android 1.0.50, Notifications & Mobile Reliability
Prepared NeonChat Android 1.0.50 with version code 50, compile and target API 36, Android Gradle Plugin 8.9.1, and Gradle 8.11.1 so the next Google Play update meets the Android 16 requirement.
Added native Android notifications for direct messages and mentions, including Firebase delivery while the app is closed, conversation-aware notification routing, notification channels, vibration, and launcher badge counts.
Added authenticated Android device registration and logout cleanup, with stale or invalid push tokens removed automatically and private Firebase service-account credentials kept outside the repository.
Added notification permission handling, a native notification diagnostic, and a shortcut to NeonChat’s Android notification settings so members can test and repair notification access directly from Settings.
Made notification taps deep-link into the correct direct message, server, or channel and clear conversation notifications as members return to the relevant chat.
Restored the full mobile inactive roster: the Who’s Online deck now lists every offline member and offline bot instead of displaying only an inactive count.
Built and verified a signed Android 1.0.50 App Bundle with the production package identity, target API 36, and the existing NeonChat upload certificate.
Featured update
User Blocking + Stronger Privacy Controls
Safety, Privacy & Account Controls
Added Block User and Unblock User actions to member profiles, backed by authenticated server APIs and persistent per-account block lists.
Added a Blocked Users manager under Privacy Settings with member identity, avatar, and one-tap unblocking.
Disabled direct-message sending to accounts you have blocked and added a clear explanation in the conversation composer until the account is unblocked.
Included blocked-user state in the signed-in account response so profile and messaging controls stay consistent across the app.
Clarified that NeonChat is intended for members age 16 and older, with guardian supervision required for minors where applicable.
Clarified that supporter tiers and Ko-fi subscriptions are optional and are not required to use NeonChat’s core platform features.
Featured update
Creator Live Cards + Better Invite Sharing
Streaming, Bots, Invites & Discovery
Redesigned automated Twitch announcements as rich Neon Signal live cards with creator identity, stream title, game, viewer count, uptime, team category, thumbnail, Watch, Profile, and Share actions.
Expanded MidniteBot live monitoring across Team Midnite, The Enchanters, and The Beanary, merging duplicate creator records when a streamer appears in more than one team feed.
Preserved structured live-stream metadata through realtime message updates and cached channel history so stream cards remain consistent without duplicate announcement posts.
Added dedicated Open Graph and X/Twitter metadata, a new NeonChat social image, canonical URLs, and improved search descriptions for cleaner link previews across social platforms.
Added server-aware invite previews that include the community name, description, member count, and a dedicated invite card when invite links are shared.
Updated generated and copied invite links to use the current preview-card version while preserving normal in-app joining behavior.
Featured update
Voice Signal Detection + Mobile Polish
Voice, Presence & Reliability
Improved voice activity detection by combining frequency and time-domain audio levels, making speaking indicators respond more reliably to normal microphones and quieter voices.
Added safer AudioContext recovery for suspended or replaced audio sessions and guarded MediaStream setup so a failed stream cannot break the rest of the voice room.
Reduced unnecessary speaking-state updates while retaining a short release delay that prevents the indicator from flickering between words.
Kept mobile notification badges, unread conversations, and active-chat clearing synchronized across foreground, background, and closed-app message delivery.
Featured update
Desktop 1.0.39 + Mobile Settings & Chat Polish
Desktop, Mobile UX, Messaging & Reliability
Released NeonChat Desktop 1.0.39 through the Windows download and automatic-update channels, while retaining 1.0.38 as a rollback build.
Rebuilt mobile Settings as a compact, native-style hub with account identity first, searchable User Settings, App Settings, and Safety sections, clearer navigation rows, and the member’s selected NeonChat color theme carried throughout the experience.
Remade My Account for mobile with a focused profile hero, compact identity and Partner signals, editable profile fields, grouped profile media, NeonLogin access, support actions, and a clearly separated account-management danger zone.
Remade Connections and the remaining mobile settings pages with consistent grouped rows, touch-friendly controls, device selectors and tests, theme choices, notification and privacy controls, reports, and purposeful empty states; mobile-only navigation also hides desktop Keybinds.
Improved channel navigation with a distinct active state, subdued read channels, visible unread and mention counts, keyboard-accessible rows, and clearer accessibility labels.
Stopped mobile server changes from automatically selecting a dock destination: Home, Friends, and You now become active only after the member chooses them.
Raised text-channel image posts to 10 images per message, added multi-select and multi-paste attachment previews with individual removal, preserved all uploaded image metadata through realtime delivery and history, and rendered responsive in-message galleries.
Removed the mobile composer auto-focus that reopened the keyboard after changing channels and tightened viewport/composer behavior so the keyboard no longer leaves a giant dead gap beneath the message box.
Added a Nyx-branded loading state while channel history is syncing; it disappears as soon as messages arrive or access is resolved.
Shortened the Help Center hero to “Learn NeonChat” and moved the Discord comparison into supporting copy for faster mobile scanning.
Fixed a desktop startup navigation race that could turn a harmless interrupted data-page load into an enormous encoded crash screen.
Upgraded Nyx crash recovery with bounded human-readable details, Retry and Service Status actions, stale deployment-chunk recovery, retained hashed assets for open desktop clients, and automatic redaction and truncation of sensitive or oversized log values.
Featured update
Frontend Crash Guard + Nyx Recovery
Reliability & Mobile Stability
Fixed a production React hook-order crash that could appear after NeonChat moved from its loading or sign-in screen into the main app.
Kept the new Android Back handling and Nyx connection-signal monitoring on a stable render path so loading, authentication, custom-domain, Admin, Nexus, Developer, and public Updates routes all execute the same hook sequence.
Rebuilt and published the corrected web bundle, restoring the Nyx retry flow without removing the 1.0.39 mobile stability features.
Featured update
Mobile 1.0.39 Debug + Play Store Readiness
Android, Mobile UX & Release Engineering
Built and published a fresh debug-signed NeonChat 1.0.39 APK for direct Android testing, with package identity tv.teammidnite.neonchat, version code 39, target API 35, signature verification, and a downloadable SHA-256 checksum.
Made the Android Back button close the topmost profile drawer, context menu, Settings panel, full profile, Server Overview, Partner welcome, mobile navigation drawer, voice room, or DM view before it exits NeonChat.
Added Nyx-branded offline and reconnecting notices so interrupted connections explain what is happening without removing the member from their current screen.
Expanded coarse-pointer touch targets across profile, settings, modal, and partnership actions for more comfortable one-handed use.
Hardened the Android wrapper by disabling cleartext traffic and device backup of NeonChat session data.
Separated debug distribution from Google Play releases: debug builds can be published to neonchat.co, while release APKs and App Bundles now fail closed unless versions, target API policy, and permanent upload signing are valid.
Added a protected manual GitHub workflow that can build a signed Android App Bundle and upload it to Internal, Alpha, Beta, or Production in Google Play once the Play service account, upload key, and owner-approved google-play environment are configured.
Added a date-aware Play preflight that accepts API 35 now but automatically blocks submissions that have not moved to API 36 by Google’s August 31, 2026 requirement.
Pinned Android packaging to JDK 17 so host Java upgrades cannot silently break debug or Play builds.
Featured update
Member Signals + Profiles, Partners & Server Identity
Community, Profiles, Partners & Server Identity
Added NeonChat-native Signal Actions to human member rows: right-click on desktop or long-press on mobile to View Signal, Open Direct Line, Copy Handle, or Copy Signal ID.
Kept bots, verified bots, Nyx, and system accounts outside the human-member action menu.
Gave Owner tehKluma and Co-Owner WhovianWarrior distinct leadership styling and an Open Support shortcut, while also recognizing server-owner and Co-Owner role data automatically.
Fixed connected presence in the member roster so a custom status no longer hides the active Spotify song or Steam game; all available activity lines can now appear together.
Restored direct-message launching from the member profile drawer by connecting it to the main NeonChat conversation flow.
Modernized Server Overview without replacing its familiar structure: the banner and overlapping server icon remain, now joined by a stronger identity header, tagline, Verified/Partnered/Public status badges, and live Members, Online, Channels, and Events cards.
Added a dynamic Signal from Nyx introduction that uses the real server description, membership count, verification state, and Partner uplink status.
Rebuilt rules, community links, creation metadata, and the Server Settings footer as spacious neon cards with distinct cyan, violet, purple, and pink accents.
Upgraded the Twitch calendar into date-led event cards with schedule times, host names, profile images, and truthful View on Twitch actions sourced from the authenticated 14-day community schedule.
Added a responsive full-screen mobile Server Overview and corrected the banner overlap so the server icon and name remain fully visible instead of being clipped by the scroll container.
Connected partnerlounge.neonchat.co directly to the private NeonChat Partner Lounge with an exact Apache route, active server mapping, valid Let’s Encrypt certificate, Cloudflare delivery, and hostname-preserving NeonLogin callback.
Refined My Account around a prominent live profile preview, clearer field guidance, and a profile-completion tracker that encourages members to finish their identity without changing the familiar settings workflow.
Made web addresses in profile bios—including NeonChat sub-domains such as kluma.neonchat.co—safe, clickable links in both the profile drawer and full profile.
Introduced a custom NeonChat Partner crest that is granted automatically to owners and administrators of partnered communities, can be shown or hidden in My Account, and now appears consistently in the bottom user bar, member roster, profile drawer, and full profile.
Special-cased neonchat-main as required platform membership: new accounts are enrolled automatically, AuroraNexus delivers the configured welcome once, direct server-leave attempts are blocked, and account deletion triggers the configured goodbye before membership cleanup.
Featured update
Android Download + Mobile Drawer Repair
Android App & Mobile Layout
Restored the Android download route with a current debug-signed 1.0.38 APK while Play Store release signing is finalized.
Fixed the mobile Who's Online deck so it opens above the page overlay, closes cleanly when tapping outside it, and reports the inactive member count without listing the full offline roster.
Fixed the left mobile server/channel drawer layering so the dim overlay no longer blocks the server rail or channel list.
Featured update
Desktop App Login Fix
Desktop App
Fixed a NeonChat desktop app login bug that could keep the app from returning cleanly after NeonLogin.
Updated the Windows desktop app download and updater feed with the repaired build.
Featured update
Account Deletion Now Cleans Up NeonLogin Auth Rows
Authentication, Self-Service & Operator Tooling
Extended the Settings → Account → Danger Zone Delete Account flow with a server-to-server call to NeonLogin so the deleted user's auth row in NeonLogin's database is also tombstoned. Self-service deletion on the NeonChat side always succeeds first; the NeonLogin cleanup is non-fatal and falls through to manual recovery if the shared secret or endpoint are misconfigured.
Added `NEONCHAT_INTERNAL_SECRET` (also set on NeonLogin's side) for HMAC-SHA256 + 5-minute-skew verification of the s2s call. Generate with `openssl rand -hex 32`. Requires `scripts/neonlogin-delete-account.php` to be deployed at `/var/www/midnite/public_html/NeonLogin/api/dev/delete-account.php` on the NeonDestiny/TeamMidnite shared webroot, served at `https://teammidnite.tv/NeonLogin/api/dev/delete-account.php`.
Closed a real production re-enable bypass where clicking Login with NeonLogin right after deleting an account was immediately re-creating the local user record. The deleted-identity blacklist check moved inside `upsertLocalUserFromNeonLogin`, and `createLocalSessionFromNeonLogin` now throws when the identity is tombstoned so no session token is ever issued for a deleted account.
Documented the rollout end-to-end in `docs/ACCOUNT_DELETION_RUNBOOK.md`: secret generation, env placement, PHP file deploy, smoke-test `curl`, audit log location and tag meanings, recovery flow for partial deletions, and the secret-rotation procedure.
Audit log on the NeonLogin side writes one line per call to `NEONLOGIN_S2S_AUDIT_LOG` (default `/var/log/neonlogin/account-deletions.log`), tagged with the redact strategy (`redacted_full` vs `redacted_minimal` vs `already_absent`) so operators can distinguish a happy-path tombstone from a schema-tolerant fallback.
Featured update
Partner Lounge + Twitch Social Alerts + Custom Bot Branding + Mobile Build Tooling
Community, Automation & Platform Update
Launched the private Partner Lounge for partnered-server owners and administrators, with automatic enrollment, Partner announcements, support, questions, showcases, feature previews, and feedback channels.
Made Partner Lounge membership automatic while a member manages a partnered community so important program-status, benefit, requirement, and early-feature updates cannot be missed.
Added correct Partner and official-admin visibility throughout Start Here, Partner Announcements, support, and Feature Previews, while keeping announcement-style channels read-only for Partner members.
Added a one-time Nyx partnership celebration modal with personalized server messaging, a full benefits summary, neon confetti, and celebratory effects.
Granted every active Partner server a complimentary 60-day AuroraNexus Pro evaluation, with the trial end date shown in Nexus settings and automatic fallback to permanent complimentary Nexus Plus—no charge or automatic conversion.
Granted official NeonChat administrators the expected Partner Lounge administration and server-management controls.
Added an official embedded Partner Support hub with private Partner Help, Report a Concern, and general ticket intake, live NeonChat service health, and direct routing into the authorized NeonChat staff queue.
Made new support tickets ping the authorized admin team in #admin-tickets, with a dedicated Respond to Ticket modal and dashboard replies that save to the ticket and deliver privately to the requester’s NeonChat DMs without posting staff responses into chat.
Expanded support-response DMs with the ticket number, subject, submission time, and full original request above the staff response so members can distinguish multiple tickets without guessing the context.
Linked requester DM replies back into the correct open ticket: replies now join the saved ticket history and appear as pinged, threaded User Reply updates beneath the original #admin-tickets post, where staff can respond again through the private modal.
Corrected self-DM identity handling so NeonChat no longer offers Add Friend against your own account, labels the conversation appropriately, blocks self-friend requests client-side, and never exposes raw proxy HTML as a friend-request error.
Added two-way ticket closure: requesters can type Close Ticket in the linked support DM, while admins can use the Close Ticket button beside Respond to Ticket; both paths update ticket history, notify the requester, and post a closed state into the admin thread.
Introduced Twitch Social Alerts for AuroraNexus, automatically detecting live streams via Twitch Helix API and posting go-live announcements to designated server channels.
Added custom alert message templates supporting dynamic variables ({streamer}, {title}, {game}, {url}, {viewers}, {login}), rich preview cards, and automatic stream ID deduplication to prevent repeat alerts.
Added an integrated server-member streamer picker in Server Settings → Nexus to quickly monitor Twitch accounts linked by community members.
Configured tier-based connection allowances for Twitch Social Alerts (Free: 1 streamer connection, Plus: 5 connections, Pro: 20 connections).
Added custom bot identity controls for AuroraNexus: Nexus Plus unlocks custom display name and embed footers, while Nexus Pro adds full avatar image uploads and custom accent color.
Applied custom bot branding across all channel posts, welcome cards, embeds, and the active bot entry in the server member roster.
Upgraded the AuroraNexus plan selection modal with React Portals and server identity context (icon, name, server ID) so owners always know which server is receiving an upgrade.
Added direct "Ask Nyx" action buttons to public Support and Nyx profile cards, automatically seeding contextual DM conversations with Nyx.
Refreshed Nyx’s profile card with a dedicated 📡 SIGNAL status ("Guardian online · Neon Signal active"), exclusive Calling tags, and guided support actions.
Reworked server-rail ordering for Electron with app-controlled pointer dragging, precise before/after/folder drop indicators, persistent custom ordering, and freedom to place Partner Lounge anywhere among server icons.
Upgraded Android mobile build configuration (v1.0.31 / versionCode 31) with automated release signing validation in the Gradle build task graph and published complete release documentation.
Added server role drag-and-drop reordering inside Server Settings → Roles.
Added editing and deletion for personal game entries and owned Friends Activity updates, using the same complete game form available when adding a title.
Added Pre-purchased as a game-collection status for upcoming games already secured by a member, backed by database schema migration 004_game_pre_purchased_status.sql.
Raised chat and direct-message GIF/image uploads from 5 MB to 25 MB.
Featured update
Games Hub + RAWG-Powered Collections
Games Experience
Launched the NeonChat Games Hub with RAWG-powered discovery, rich game artwork and metadata, personal collections, gameplay journals, and friends activity.
Added My Games tracking for playing, completed, paused, backlog, wishlist, and dropped titles, including platform tags and detailed game views.
Brought game activity into member profiles and Active Now areas with real game artwork instead of profile avatars.
Added a compact Discord-style Game Collection row to profiles with stacked cover art, an overflow count, and direct routing into My Games.
Made profile cards responsive in smaller app windows with a readable compact layout and contained scrolling.
Moved Games Hub into the Friends navigation beside Discover and removed the oversized game shortcut from the server rail.
Added reliable dedicated Games routes so collection links open My Games directly instead of falling back to Discover or invite handling.
Kept RAWG credentials server-side and added normalized metadata, cached imports, graceful API errors, store links, screenshots, ratings, and official-site attribution.
Featured update
Nyx Return Signals + NeonChat Email Polish
Email Experience
Introduced a respectful Nyx-led return email for members who have not signed in for at least 60 days, highlighting the latest NeonChat improvements without turning the message into a sales pitch.
Added strict inactivity selection, marketing opt-out handling, signed unsubscribe links, daily campaign scheduling, and administration-only preview delivery for safer re-engagement outreach.
Created Nyx’s Corner as a neon-cosmic email backdrop with a solid-color fallback for mail clients that do not display background images.
Kept Nyx recognizable through the “Nyx · Guardian of the Neon Signal” signoff and the established authenticated NeonChat sender.
Moved the reassurance that accounts, conversations, and communities remain waiting directly above See What’s New, giving the call to action warmer and more personal context.
Added automated coverage for recipient eligibility, unsubscribe security, current product highlights, artwork inclusion, and call-to-action hierarchy.
Featured update
Live Service Health in NeonChat Support
Support Experience
Turned View Service Status in the NeonChat Official support hub into a live health indicator backed by the public NeonChat status monitor.
Added a green All Systems Operational state when every customer-facing monitor is healthy, with automatic refreshes every 60 seconds.
Added a focused Voice Service Issues warning when affected checks are limited to voice and relay infrastructure.
Added Core Service Issues whenever NeonChat API or NeonLogin Auth is affected, even if it is the only failing monitor.
Added a red Service Outage state when three or more monitored services are affected, plus safe delayed/unavailable states when the status feed cannot be reached.
Added affected-service details on hover while keeping the full status page one click away.
Added a cached same-origin status endpoint so clients receive reliable health data without exposing cross-origin failures or overloading the external status server.
Featured update
Support Hub + DM Conversation Polish + Notification Controls
Messaging Experience Refresh
Rebuilt the NeonChat Official #support experience as a native channel hub beneath the welcome area instead of leaving support actions attached to the message composer.
Added clear Support Form, Report User, and Create Ticket paths with privacy guidance, service-status access, and direct routing into the staff-only admin ticket workflow.
Corrected the official support welcome message ownership so it is posted by Nyx, opens Nyx’s system profile, and no longer appears as the generic NeonChat System identity.
Added Copy Message ID to both the right-click menu and three-dot Manage Message menu for every message type, including official system and bot messages.
Refreshed the DM friend list with presence indicators, activity context, last-message previews, and clearer timestamps so conversations feel active before they are opened.
Expanded DM conversation headers with live presence and activity context while keeping the primary chat controls compact.
Added a collapsible Conversation Hub with the friend profile, voice/video/profile controls, friendship status, shared-media count, loaded-message count, conversation search, and jump-to-result tools.
Added friendship acceptance timestamps to newly accepted friendships and surfaced the real acceptance date in the Conversation Hub; older friendships now clearly show when a historical date is unavailable.
Grouped consecutive DM messages from the same sender into readable conversation blocks, showing the avatar and sender header once per message burst instead of repeating them on every line.
Improved DM hierarchy with one-line name and timestamp headers, stronger spacing between speakers, distinct subtle styling for sent and received messages, softer 16px bubbles, gradients, borders, and restrained depth.
Added cleaner message-hover actions for quick copying and multi-message selection without cluttering the timeline when messages are idle.
Added notification sounds for new server messages, DMs, mentions, friend requests, calls, and voice connection events, with a stronger cue reserved for direct mentions.
Added Silent Mode as a dedicated Notifications setting separate from Streamer Mode, suppressing notification, ringtone, and connection audio while preserving visual toasts, desktop notifications, unread indicators, and normal presence behavior.
Made enabling Silent Mode stop an active incoming-call ringtone immediately, so users can quiet NeonChat without changing their privacy or capture settings.
Featured update
Community Partner Redesign + Custom Sub-Domain Plan
Community Ecosystem Updates
Created a public-facing /partners landing page detailing the exclusive benefits of the NeonChat Partner Program, including free sub-domain connection, extra emotes, complimentary Nexus Plus, vanity invites, and early access features.
Redesigned the server settings Community Partner application into a fully structured, multi-field workflow (Language, Category, detected Members, Primary Platform, checkboxes, links, and guidelines agreements).
Added a real-time Application Completeness indicator bar with reviewer confidence ratings (High, Moderate, Low) to guide applicants to provide all necessary details.
Added status progress cards to settings (Not Submitted, Under Review, Needs More Info) to track partnership applications.
Transformed the application panel into a live Partner Benefits Dashboard displaying active perks and partnership dates once approved.
Renamed the Custom Domain Plan to the Custom Sub-Domain Plan in all configurations, matching feature lists, validation forms, and pages.
Automated admin request approvals: approving a request in the admin dashboard now immediately toggles isPartnered = true and sets the partneredAt timestamp on the server, automatically unlocking all perks.
Updated the admin dashboard pending requests view to render Category, Language, detected Members, reasons, invite links, description, and social links to reviewers.
Featured update
AuroraNexus Arrives + Native Automation Phase 4
AuroraNexus Phases 1–4
Launched AuroraNexus as NeonChat’s native server automation, moderation, and community-management system, with its public home available at nexus.neonchat.co.
Added an AuroraNexus workspace directly to Server Settings with eleven roadmap modules, monthly execution usage, server-scoped plans, module status, and native audit records.
Added a server picker to the Nexus website so Manage a Server shows only communities the signed-in customer owns or administers, then opens that exact server’s Nexus settings.
Moved module configuration into focused modals so opening an editor no longer pushes the full module grid down the page.
Added independent Enable switches: configuration can be saved without activating a module, disabled Configure buttons are visibly subdued, and enabled modules use the full Nexus treatment.
Made AuroraNexus appear as an online verified BOT in the server roster whenever at least one module is enabled, with immediate roster refresh and automatic removal when the final module is disabled.
Added polished lifecycle messages using customer-facing module names, including clear enable/disable confirmation and a quiet inactive notice when every module is turned off.
Added Custom Commands with aliases, response variables, channel and role restrictions, per-member cooldowns, editing, deletion, server isolation, and Free/Plus/Pro command limits.
Added configurable reaction-role panels, verification and rules settings, one-time scheduled messages, Plus repeating schedules, pause controls, safe role validation, and duplicate-execution protection.
Started Phase 4 with functional Leveling: configurable XP ranges, anti-spam cooldowns, automatic levels, optional level-up announcements, announcement-channel selection, and server-isolated leaderboards.
Added polished Nexus Plus ($7/month) and Nexus Pro ($10/month) comparison modals on both the public Nexus page and server settings, with direct Ko-fi checkout links and full entitlement details.
Expanded the Nexus landing page with a dashboard preview, Custom Commands feature card, clearer native-product messaging, plan presentation, and an AuroraNexus-versus-traditional-bot comparison table.
Unified Nexus controls around cyan-to-magenta styling, corrected default browser button leakage, improved plan pills, stabilized modal rendering, and removed GPU backdrop flicker from the server picker.
Fixed the desktop three-dot Manage Message menu so left-click placement is measured from the actual trigger button, rendered in viewport coordinates, and flipped safely near screen edges instead of floating over the member roster.
Kept the mobile long-press and compact action-drawer behavior separate from desktop placement by using the actual viewport layout rather than touch-capability detection.
Added automated coverage for entitlement isolation, usage limits, command cooldowns, schedule deduplication, moderation state, and Phase 4 leveling behavior.
Upgraded Monthly Activity from a bare quota into a live operations summary with execution percentage, real top-module counts, last-executed timestamps, and module-specific activity descriptions.
Organized all eleven Nexus modules into Built-in Features, Protection, Engagement, and Utilities so the workspace remains understandable as AuroraNexus grows.
Promoted Reaction Roles and Verification & Rules into native channel widgets that stay above chat instead of becoming bot messages that slowly disappear into channel history.
Made Rules expandable with automatic bullet formatting, a compact content-sized card, friendlier review language, improved spacing, quieter AuroraNexus attribution, and a shield-led verification identity.
Added a persistent verified completion state: after agreeing, members see a green Verified control, welcome confirmation, and their recorded verification date instead of watching the panel vanish.
Created AuroraNexus as a first-party system profile with its official logo, verified BOT identity, System Active presence, rotating operational banners, and system-aware profile routing instead of a missing-user fallback.
Added Shift-hover quick delete for desktop message users while preserving the three-dot menu and mobile long-press actions.
Refreshed NeonChat transactional email into a Nyx-led signal system with branded security, identity, community, support, and AuroraNexus Operations templates.
Granted NeonChat Official and the owner community complimentary unlimited Nexus Pro, while every server approved for the NeonChat Partner Program automatically receives complimentary Nexus Plus.
Mobile Chat Layout + Discord-Style Message Actions
Android Mobile Refresh
Fixed the oversized empty gap above the mobile composer by removing duplicated bottom-dock clearance while keeping messages safely above the input controls.
Reduced the always-visible mobile message action button from 40px to 32px so it takes up less space on message cards.
Changed message long-press behavior to open a touch-friendly action drawer with Edit, Reply, Select, Delete, and Report choices where available.
Added Select to the message action drawer so users can enter multi-message selection directly from a held message.
Reworked selection mode so its Delete Selected and Cancel controls replace the composer and remain visible above the bottom navigation.
Moved the mobile action drawer to a document-level overlay so the chat scroller and fixed composer can no longer clip, constrain, or cover it.
Disabled the desktop pointer-positioned context menu on touch devices, preventing Android long-press from opening a second off-screen menu based on finger position.
Added a dimmed backdrop, safe-area-aware bottom-sheet layout, scrolling for larger text sizes, opening animation, vibration feedback, and reliable outside-tap dismissal.
Rebuilt and synchronized the Android application bundle so the native app includes the corrected mobile chat interface.
Meet Nyx + Streamer Privacy + Desktop Polish
Desktop 1.0.15 - 1.0.29
Fixed the chat and DM message selector so clicking Select no longer immediately exits selection mode, empty selection mode stays active until Cancel/Escape, and plain clicks toggle messages on desktop as well as mobile.
Polished the frameless desktop titlebar Minimize, Restore/Maximize, and Exit controls with crisp SVG icons, neon hover glow, press feedback, and a cleaner red close state.
Officially named the violet NeonChat mascot Nyx: Guardian of Neon Destiny and Keeper of the Neon Signal, with his origin story on the About NeonChat page.
Fixed Copy Link in the media viewer crashing desktop when clipboard access fell through to Electron unsupported browser prompt API.
Created an exclusive violet crescent-shield Guardian crest for Nyx, separating his identity from the standard blue verified-bot check across profiles, messages, and member lists.
Retuned the Guardian crest for profile-card scale with a larger 30px presentation, a simpler high-contrast crescent and signal eye, dedicated violet glow, explicit SVG dimensions, and cache-busted delivery.
Gave Nyx a real exclusive Guardian server role, removed the incorrect Moderator assignment and permissions, and replaced the generic profile Role block with a lore-forward Calling card.
Future-proofed Calling cards for explicitly assigned Neon Systems, Developer, Support, and Community Partner identities while keeping permission roles separate and leaving Nyx as the only active Calling by default.
Added account-specific Callings for tehKluma as Builder of NeonChat / Founder of the Neon Network and WhovianWarrior as Builder of Neon Destiny / NeonChat Administrator, without changing their Owner or Admin permissions.
Replaced the public MidniteBot identity with Nyx while preserving the same internal bot account, permissions, live-tracking automation, direct-message history, and message ownership.
Added Nyx collectible profile facts plus a concise What is NeonChat section covering chat, voice, streamer safety, and communities.
Added official selectable profile banners: Neon City, the original Nyx Realm skyline, and the original Midnight Streets cityscape, with Neon City remaining the polished fallback for new accounts.
Replaced the blunt No bio set placeholder with friendlier empty-profile language.
Turned Streamer Mode into a full privacy layer with dynamic vignette strength, protected title-bar state, an OBS Capture Safe banner, sensitive-popup protection, and the emergency Ctrl + Shift + H privacy shortcut.
Added a live Privacy Inspector that separates protected information from intentionally visible public chat and media, with guidance for Maximum Privacy.
Anchored the Privacy Inspector to its banner control, strengthened its opaque blurred surface, tightened its layout, and prevented chat underneath from ghosting through it.
Stabilized the member-list privacy panel in its correct right-side layout across desktop and web.
Improved temporary member-list reveal with a visible five-second countdown, identity reveal override, reliable timer reset, and a smooth fade back into protected mode.
Fixed desktop-only profile-card flicker while preserving stable browser behavior.
Expanded profile polish around badges, rich presence, social identity, Spotify activity, banners, themes, and useful member context.
Improved media viewing and messaging interactions, including smoother image presentation and more complete message actions.
Polished voice behavior with stronger noise suppression, safer RNNoise processing, better reconnect handling, and clearer regional path latency.
Branded the Windows assisted installer with NeonChat dark violet, cyan, and pink styling plus Nyx artwork and matching installer/uninstaller identity.
Published desktop 1.0.15 through the automatic updater with a versioned installer, blockmap, latest-download alias, and verified public metadata.
Continued the same Nyx release line through desktop 1.0.16-1.0.29, covering Nyx lore, the live bot identity migration, official profile banners, clipboard crash recovery, ecosystem titles, the exclusive Guardian crest, Guardian role, official Calling framework, polished window controls, and the message selector fix.
Created matching TeamMidnite and Neon Signal Subscriber crests with Nyx-inspired owl, crescent, signal, violet, cyan, magenta, and gold details.
Fixed the profile initialization-order crash introduced by account-specific Calling titles, so profile cards open normally again.
Audited every remaining browser prompt fallback so unsupported prompt calls cannot crash the Electron renderer during copy, reporting, review, or account-management flows.
Gave Nyx a real job on loading and error surfaces: app boot, Suspense fallbacks, full renderer crashes, section crashes, and desktop startup/failure pages now feature the Guardian instead of a plain spinner or empty stack dump.
Replaced the boring loading bar with Nyx signal-surfing — crescent-board ride, orbiting packets, violet lightning bolts, and rotating lines like “Riding a crescent board through the void. Wumpus would never.”
Error screens now open with Guardian intervention copy, glitch-frame Nyx holding the signal, retry actions, and the technical stack still available underneath for debugging.
Automatic Desktop Updates + RNNoise Stability
Released NeonChat desktop 1.0.8 with fully automatic Windows updates: the app checks shortly after startup and every 30 minutes, downloads new releases silently, and notifies you when an update is ready.
Update prompts now offer Restart Now or Later. Choosing Restart Now installs immediately, while deferred updates install automatically the next time NeonChat closes normally.
Fixed the missing packaged `electron-updater` dependency that caused the previous updater code to disable itself at runtime, so future desktop releases no longer require users to manually download each installer.
Upgraded the Windows desktop runtime from Electron 28 / Node 18 to Electron 33 / Node 20 so the bundled RNNoise WebAssembly engine runs on its supported runtime.
Fixed the Windows renderer access-violation crash (`0xC0000005`) that occurred immediately after RNNoise initialized during voice restoration, reconnects, or page reloads.
Hardened RNNoise teardown so queued audio callbacks cannot process frames after the WASM denoise state has been destroyed.
Added a compatibility safety gate for older Electron builds: desktop 1.0.6 and earlier automatically fall back to browser noise suppression instead of entering an RNNoise crash loop.
Published versioned installers, differential-update blockmaps, and live `latest.yml` metadata for the desktop updater feed.
Fixed the Settings button briefly opening and immediately closing on its first use after a deployment: stale lazy chunks now recover through a reload without losing the requested Settings screen, and modal content clicks can no longer bubble into the background close action.
Voice Region Recovery + Real Path Ping
Fixed switching voice server location (US West / US East / Auto) while already connected so the call no longer gets stuck showing Connected with dead audio and no recovery.
Region changes now soft-restart the live voice session in place: leave + rebuild ICE peer connections against the new TURN region + rejoin, without tearing down the whole App voice session host.
Removed the broken region-reconnect path that forced a full disconnect (`leaveVoice` → `onLeave` → `clearVoiceSessionState`), which cancelled the rejoin timer and could leave the UI stuck.
Region soft-restart no longer sets the manual-disconnect latch, which previously blocked `joinVoice` forever after a location change on the same channel.
Sidebar Voice Connected status stays visible during the short region rejoin window (Reconnecting… in the voice room) instead of flipping to fully disconnected and never coming back.
Voice ping in the sidebar now prefers real media-path RTT from WebRTC stats (and a TURN-region path probe when you are alone in the channel), so US West should read lower for California users than US East instead of only reflecting app signaling latency.
US West relays resolve to Los Angeles and US East to Virginia; the status strip also labels whether the sample is media path vs relay path.
Fixed inflated East Coast ping (~230ms): the old probe counted full TLS handshake time, ICE listed TURNS/TCP before UDP, and explicit regions still offered both coasts so clients could lock onto a far relay.
Explicit US East / US West now pin to that region’s TURN only, UDP is preferred first, and region probes use TCP connect timing so East from the West Coast should land closer to ~70–100ms network RTT instead of ~230ms TLS noise.
Reduced intermittent garbled audio / noise blips: softened the RNNoise VAD gate (higher floor, slower attack/release, longer speech hold), ramped gain inside each frame to avoid zipper clicks, and stopped hard-zero underruns in the mic uplink queue.
Automatic voice region now pins to US West only (no dual-coast ICE fallback) so Auto no longer flaps between West/East relays; East Coast users should choose US East explicitly.
Increased the mic uplink ScriptProcessor buffer and queue cushion so occasional processing overruns are less likely to punch holes in the audio.
Voice Call Noise Suppression Overhaul
Fixed mic noise processing so RNNoise actually runs on voice and video call uplinks instead of only claiming to — the old path disabled browser noise suppression and fell back to a light high-pass filter, which let fans, keyboards, and room noise through.
Added a real bundled RNNoise WebAssembly engine (`@shiguredo/rnnoise-wasm`) for neural noise reduction on the local microphone only, leaving remote playback audio untouched.
Added a soft VAD gate after denoise so residual background noise is near-muted between words while speech stays open, with a short grace window so natural pauses do not chop the start or end of phrases.
Raised the default high-pass filter to ~85 Hz to cut desk rumble and HVAC thump, and tuned the default call profile for stronger “clean call” behavior (VAD threshold, grace, soft-gate floor).
Improved the failure path: if RNNoise cannot load, NeonChat now re-enables browser noise suppression and applies a lightweight energy gate instead of shipping a nearly raw mic.
Preloads the RNNoise model on app start so the first voice join pays less of the WASM warm-up cost, and updated Voice Processing settings copy to label RNNoise AI Suppression as the recommended mode.
Runtime tuning remains available via `localStorage["neonchat-voice-call-profile"]` and `window.__NEONCHAT_VOICE_CALL_PROFILE__` for users who want more aggressive silence or a softer gate.
Desktop Startup Screen
Added a branded NeonChat startup screen to the Windows desktop app so the EXE shows a polished loading view before the main app finishes loading.
The startup view now uses the NeonChat icon asset with glowing neon treatment, centered `NeonChat` text, and a subtle loading animation.
Rebuilt the Windows installer and updated `NeonChat-latest-x64.exe` so new installs include the startup screen immediately.
Twitch Emote Recovery + Desktop Load Fix
Fixed Twitch global and channel emote loading after stale configured Twitch tokens caused emotes to fall back to plain text in chat.
Updated Twitch emote token handling so invalid user-scoped emote authorizations are cleared instead of being treated as connected while only returning a partial catalog.
Added a server-side Twitch emote alias file for replaced emote codes, starting with `kluma0Finea` rendering through the current `kluma0Fyne` emote.
Rebuilt the Windows desktop package with an Electron loader fix so normal `ERR_ABORTED (-3)` navigation handoffs no longer show the hard “NeonChat could not load” failure page.
Updated the public Windows download so `NeonChat-latest-x64.exe` serves the rebuilt 1.0.6 installer with the desktop load fix included.
Desktop Titlebar + Windows Installer Refresh
Updated the NeonChat desktop app to use its own frameless titlebar with custom minimize, restore/maximize, and exit controls instead of stacking the native Windows controls with the app chrome.
Added a main-process handshake so the custom titlebar only appears when Electron confirms the window is actually frameless, preventing double titlebars when an older framed host loads the current web UI.
Rebuilt the Windows desktop package as NeonChat 1.0.6 so the frameless window changes are included in the actual installed app instead of only the web renderer.
Updated the public Windows download and auto-update metadata so `NeonChat-latest-x64.exe` and `latest.yml` now point to the fixed 1.0.6 build.
Happy Birthday to tehKluma, the one-person dev crew keeping NeonChat moving one fix, rebuild, and late-night sanity check at a time.
Mobile Messaging Composer + Selection + Send Fixes
Reworked the mobile DM and chat layout so the message list is the true scroll container, with bottom clearance reserved for the composer instead of letting messages slide under the input bar.
Pinned the mobile composer above the bottom app dock with unified safe-area-aware spacing so the input row, jump-to-latest affordance, and picker surfaces all follow the same bottom offset rules.
Added mobile long-press message selection for both server chat and DMs so touch users can enter selection mode without desktop keyboard modifiers.
Updated mobile selection behavior so once selection mode is active, tapping messages toggles them in or out of the current selection instead of replacing the whole selection set.
Moved mobile DM selection indicators fully inside the visible bubble row so the selected-state marker no longer sits clipped off-screen near the edge of the viewport.
Hardened `Delete Selected` so the client now only removes the exact IDs that were selected at tap time and blocks any unexpected extra delete payload from being applied locally.
Kept the dedicated send button in place and added an explicit mobile DM click-send path so tapping the send icon triggers `sendMessage()` directly instead of relying only on form-submit behavior.
Backed up the repaired messaging and updates files to `backups/neonchat-mobile-messaging-composer-selection-send-fixes-20260412-070656.tar.gz` so this mobile messaging repair has a named restore point on disk.
Sidebar Category Header Drag-Target Fix
Fixed the server sidebar so uncategorized `Text Channels` and `Voice Channels` sections no longer render with the wrong brighter drag-target header styling while real categories use the normal header look.
Tracked the mismatch down to sidebar section state instead of theme colors: fallback sections were being treated like active drag targets because their empty category id matched the empty drag-over state.
Updated the sidebar section renderer so drag-target and dragging classes only apply when a real category id exists, which makes categorized and uncategorized sections follow the same header styling rules again.
Backed up the repaired sidebar and updates files to `backups/neonchat-sidebar-category-header-fix-20260323-164816.tar.gz` so this working state can be restored quickly if needed.
Channel Drag-and-Drop + Category Permission Fixes
Added sidebar drag-and-drop for regular channels, so server owners, admins, moderators on the main server, and anyone with that server’s channel-management power can move channels around directly instead of relying on only edit screens or arrow buttons.
Dragging a channel now supports Discord-style organization flows: you can drop a channel before another channel to reorder it, drop it onto a category header to move it into that category, or drop it back onto the root channel list to make it uncategorized again.
Updated the sidebar structure so once a server has real categories doing the grouping, the fake default `Text Channels` and `Voice Channels` headers stop taking over the layout and uncategorized channels sit cleanly at the root.
Fixed system-channel behavior so protected channels like `live-now` can still be moved between categories even though their names and topics remain locked from normal edits.
Removed the old name-collision rules that were blocking saves just because a category and channel or a text and voice channel shared the same name, so channel/category naming now behaves much closer to Discord.
Created a rollback backup for this channel/category work at `backups/neonchat-channel-drag-category-fixes-20260323-015134.tar.gz` with SHA-256 `335d8a45b161f91927368e56d55837235161b1a7637b17a9866542e2e6cdba73`.
Reworked channel creation in the left sidebar around compact `+` actions on channel and category headers instead of a large creation card taking over the sidebar.
Added right-click actions on channel sections and categories so server owners/admins can quickly open `Add Text Channel`, `Add Voice Channel`, and `Add Category` directly from the sidebar.
Added sidebar drag-and-drop reordering for categories, so admins can grab a category header and move it around instead of having to rely on separate settings controls.
Restored a real `Broadcasting` category on the main NeonChat server and automatically grouped the broadcast-related channels under it when the backend normalizes server channels.
Kept the existing backend channel move rules in place underneath the new sidebar UI, so category reordering still uses the same permission checks and audit trail as the settings screen.
Mobile Voice Recovery + Volume Crash Fix + Faster Spotify Now Playing
Fixed mobile voice join reliability by adding a safer microphone-capture fallback ladder, so phones and tablets can retry with lighter audio constraints instead of failing on stricter device settings.
Added a real `Join Voice` action for disconnected voice rooms so microphone permission can be triggered from an explicit tap instead of depending entirely on background auto-join behavior.
Fixed the mobile voice-room recovery flow so failed microphone permission prompts no longer leave the voice panel trapping the rest of the app behind it.
Added a dedicated close button to the voice-room header so users can collapse the mobile voice room without having to fully disconnect first.
Fixed a frontend crash when adjusting per-user voice volume by clamping remote audio element volume to the browser-safe `0..1` range instead of allowing boosted values that throw `HTMLMediaElement.volume` errors.
Improved the account `Listening now` Spotify notice so current-track updates reach the signed-in user state correctly and refresh much closer to the actual song change instead of hanging on stale metadata.
Updated the settings shell to follow the active theme more visibly, so the sidebar, cards, accents, and surrounding chrome now preview the selected app-wide color mood instead of staying locked to the default neon styling.
Backed up the repaired voice, Spotify, styles, app, server, and updates files to `backups/neonchat-mobile-voice-spotify-fixes-20260322-234812.tar.gz` so this working state has a named restore point on disk.
iPad Voice Roster + Tablet Web Nudge Fix
Fixed the server voice-room layout on iPad and other tablet-sized browsers so the right-side member roster stays visible during voice chat instead of being hidden like a phone drawer.
Added a dedicated tablet breakpoint for the members sidebar so tablet web keeps a slimmer live roster visible without changing the desktop voice layout.
Updated the voice-room content shell to reserve matching space for the tablet roster, which prevents the main voice view from stretching under a hidden sidebar state.
Stopped the `Download our app` web prompt from showing on tablet-sized layouts so iPad browsers no longer get a phone-style install nudge over the interface.
Mobile Server Settings Layout Fix
Reworked the server settings screen on phones so it no longer tries to cram the full desktop two-column layout into a mobile viewport.
Added a dedicated mobile server-settings header with the current server identity and status badges so the screen still feels anchored after the desktop sidebar collapses away.
Replaced the oversized left-side settings rail on small screens with a compact horizontally scrollable section picker so switching between Profile, Overview, Channels, Roles, and moderation tabs is much easier on touch devices.
Tightened mobile spacing, card padding, close-button placement, and stacked form rows so server settings controls feel like a proper phone screen instead of a shrunk desktop modal.
Backed up the current project state to `backups/neonchat-mobile-server-settings-fix-20260319-005759.tar.gz` so this mobile settings repair has a named restore point on disk.
Rebuilt the Roles settings screen from the ground up into a true master-detail editor with a compact role list on the left and a focused selected-role editor on the right instead of the old long stack of expanded role cards.
Added dedicated editor sections for Display, Permissions, Members, and Danger Zone so role management is now organized around one selected role at a time instead of mixing edits across the whole page.
Replaced the old inline permission checkbox clusters with grouped vertical toggle rows and calmer panel styling so the Roles editor feels more structured and easier to scan without copying Discord directly.
Kept system-role protections intact so roles like Owner and Admin still respect lock states, edit restrictions, and delete guards while custom roles remain fully editable.
Added a sticky Save/Reset action footer for role edits so identity, color, tag, and permission changes can be staged together instead of firing immediately across scattered controls.
Fixed a role-assignment modal crash caused by recursive custom-role resolution in the shared role utility, which could overflow the call stack after assigning a non-standard custom role to a member.
Channel Settings Shell Repair
Fixed the dedicated channel settings path after the recent settings-shell refactor so opening channel settings no longer lands on a blank dark panel.
Repaired the channel-editor visibility flow by stopping the embedded channel editor overlay from being faded out alongside the background settings content during channel-only mode.
Fixed a second channel-only render bug where the main settings-content shell stayed hidden even after the channel editor loaded, which left the modal frame visible but empty.
Retuned the server-settings wrapper/class wiring so the dedicated channel editor can load inside the embedded settings path without inheriting the wrong hide/show behavior from the base server settings content shell.
Refactored settings into one canonical modal flow so user settings, server settings, and channel settings no longer stack stale panels behind each other or reveal an old settings layer after close/reopen.
Separated shared settings-shell framing from page-level sizing so embedded Server Settings no longer inherit the wrong user-settings grid, which fixes the squeezed center column, giant empty right-side void, clipped headers, and competing scroll containers.
Removed conflicting duplicate settings-shell CSS and restored one authoritative layout path for the user settings modal instead of multiple `.settings-modal` rules fighting each other in the cascade.
Repaired sidebar item theming after the shell cleanup by restoring explicit dark default, hover, focus, and selected states for settings nav items so they no longer fall back to bright browser-style button surfaces.
Retuned the user settings layout with a tighter left rail, left-aligned main content, and a slightly narrower content column so the modal uses space more intentionally without rebreaking the separate server-settings shell.
Improved account hero presentation by lowering the profile stack under the banner, fixing avatar overlap/clipping behavior, and adding a live Spotify now-playing notice when connected Spotify presence data is available on the user account.
Upgraded Settings search so common user language now resolves to the right section even without exact tab names, including queries like `sound` for Voice & Video, `themes` for Appearance, `alerts` for Notifications, and `hotkeys` for Keybinds.
Unified locked-channel visibility and access rules behind one canonical backend resolver so channel lists, channel joins, history loads, composer availability, and right-sidebar member filtering all now follow the same owner/admin-aware view decision.
Added denial-path diagnostics for channel access so the backend now logs the user id, guild owner id, member roles, admin-bypass result, locked flag, final `canViewChannel` result, and the code path that triggered any remaining denial.
Fixed a socket auth race where the client could try to join a channel before socket authentication completed, which could incorrectly trigger locked-channel denial behavior even when the final canonical view check should pass.
Upgraded Team Midnite recruitment intake posts from plain text dumps to real Discord-style embeds using NeonChat’s native embed renderer, then re-pulled the recent applications so the recruitment channel reflects the improved layout.
Added desktop runtime diagnostics for the Windows EXE and fixed the renderer initialization issue that could leave the packaged app on a blank screen after the member-list permission work.
Fixed deleted channel messages reappearing by correcting a dual-storage cleanup bug so deletes now purge both the server-specific message store and the legacy compatibility store instead of leaving stale copies behind for reloads to resurrect.
Backed up the current permission, recruitment, message-storage, Electron, and updates files so this repaired state has a named restore point on disk.
Rebuilt DMs and server chat around one shared canonical messaging core so thread identity, immutable message reconciliation, optimistic delivery, delete cleanup, and composer availability now follow the same rules instead of drifting across separate code paths.
Unified channel and DM realtime flows so history loads, live socket messages, optimistic local messages, bulk deletes, and stale UI cleanup now reconcile by current canonical thread data with nonce-aware dedupe and immutable updates.
Hardened composer and thread lifecycle behavior so deleting messages or switching conversations no longer leaves behind stale reply, edit, selection, pending-send, or disabled-composer state.
Improved cross-platform behavior for browser, mobile web, Windows, and macOS shells by adding a shared messaging viewport layer with keyboard-safe composer spacing, touch-aware action visibility, and larger tap targets for common message controls.
Removed another hover-only dependency in chat so touch users can reliably open message actions without needing desktop-style hover behavior.
Backed up the current App, DM, chat, styles, updates, shared messaging core, and shared viewport files so this rebuilt messaging state can be restored quickly if needed.
Memberships & Billing Stability + Chat Paste Support
Fixed the Connections > Memberships & Billing section so Ko-fi status refreshes no longer bounce user state back through a repeated re-render/re-fetch loop that made the panel flicker and become hard to read.
Improved Memberships & Billing error handling so browser-level network failures now show a steadier subscription-plans message instead of flashing raw `Failed to fetch` copy in the middle of the billing panel.
Fixed host-aware API base resolution for first-party `*.neonchat.co` subdomains so pages that do not actually proxy `/api/*` keep talking to the primary NeonChat API host instead of failing on the current subdomain origin.
Added operator-facing Ko-fi webhook diagnostics in Memberships & Billing so admins, moderators, and team members can see recent webhook failures such as invalid verification-token mismatches without digging through server data files.
Added paste-to-upload support in community server chat so pasted clipboard images and GIFs now attach through the same preview and upload flow as the existing image picker.
Backed up the current Memberships & Billing, routing, server chat paste, and updates files so this repaired state can be restored quickly if needed.
Services Page Launch + /services Routing Fix
Added a public `/services` page that explains the current NeonChat Professional Services subscriber perk: custom domain linking plus 50 extra custom server emote slots.
Hooked the new services page into the public app route set so it loads as a first-class standalone page instead of falling through to invite-style path handling.
Added visible `Services` links on the login screen and inside the custom-domain subscriber gate so people can read the plan details before subscribing.
Fixed a routing bug where `/services` was being rewritten to `/?invite=services` by reserving that path in both the frontend router and backend bootstrap invite-slug logic.
Backed up the current services-page and routing-fix files and refreshed the live backend process so this working state is preserved and active.
Community Voice Disconnect Rejoin Fixes
Fixed community voice disconnect actions so the in-room red hang-up button, including the full-screen mobile voice room view, and the sidebar `Voice Connected` disconnect button now fully leave the call instead of immediately rejoining it.
Cleared the hidden voice session host state on manual leave so background voice UI no longer stays mounted with auto-join still armed for the same channel.
Canceled stale in-flight join attempts and pending auth-based auto-join retries after an intentional leave so slower mobile voice setup cannot reattach the same room after the user already disconnected.
Canceled any pending voice region reconnect timer during manual disconnect so a queued reconnect cannot revive the same community voice session right after leaving.
Added a direct app-level hard disconnect path for the desktop/sidebar `Voice Connected` panel so its Disconnect button clears the connected channel state immediately instead of waiting on the hidden voice room host to finish cleanup.
Backed up the current community voice disconnect fix files and notes so this working state can be restored quickly if needed.
Android Server Drawer Overlay Fix
Fixed the Android server discovery view so opening the community drawer no longer leaves the app blurred and dimmed with the server list hidden underneath.
Moved the mobile overlay into the same app shell stacking context as the server and channel drawers so the overlay stays behind the drawer UI instead of covering it.
Rebuilt the web bundle and synced the updated assets into the Capacitor Android project so the wrapper picks up the repaired mobile navigation layout.
Backed up the current Android drawer fix files and notes so this working state can be restored quickly if needed.
Subscriber Badge + Custom Emote Upload Upgrades
Updated the Subscriber profile badge to use the new crown-style SVG badge art instead of the older plain star fallback.
Unlocked multi-file custom emote uploads for servers with more than 50 custom emote slots so higher-capacity communities can add several emotes in one run.
Added automatic server-based custom emote naming so uploads can derive codes and saved filenames from the server name plus the original file name, such as `WhovianWarrior's Server` producing `whovianFilename.png`.
Hardened custom emote uploads on both the client and backend so blank-code uploads no longer fail when the uploader is supposed to auto-generate the emote name.
Default Server Branding Refresh
Added branded defaults for community servers that do not have custom art yet, so empty server cards no longer fall back to bare placeholders.
Server icons now use seeded DiceBear `glass` artwork with more varied default color and rotation combinations on new server creation.
Server banners now fall back to the Kevin Laminto night-walkway Unsplash image when a community has no banner set.
Kept existing custom server icons and banners untouched so only missing or reset artwork uses the new default branding path.
Fixed the community chat GIF picker so clicking a category no longer causes the picker to collapse or disappear while browsing.
Moved GIF picker outside-close handling onto a safer pointer-down path and hardened in-picker interactions so category clicks stay inside the picker instead of being mistaken for an outside click.
Tightened Twitch subscriber emote filtering in both server chat and DMs so global Twitch emotes and smilies no longer leak into creator-specific subscriber sections like `TEHKLUMA @tehkluma`.
Backed up the current working chat, DM, style, server, and updates files so this stable state can be restored quickly if needed.
Chat Delete Flow + Composer Recovery Fix
Fixed a chat bug where editing or deleting a message could leave the channel composer unusable until the app was refreshed.
Reworked message delete confirmation to use an in-app modal instead of the browser confirm dialog so composer state stays inside React and no longer gets stranded after delete.
Hardened post-delete composer cleanup by clearing stale message action UI, closing transient popovers, and explicitly restoring focus to the channel input after delete and edit transitions.
Fixed voice session cleanup so leaving, refreshing, or dropping one tab/socket no longer disconnects the same user from voice if another active NeonChat socket is still in that room.
Added backend voice socket membership tracking so participant removal now happens only after the final linked socket actually leaves the server voice room.
Fixed the server voice-room layout so opening the room no longer auto-compacts the main content area in a way that pushed the member list out of place.
Kept the members sidebar visible beside the active voice room with a dedicated spacer path so the layout stays stable while you are connected.
Moved TehKluma community live announcements onto NeonChat’s trusted server-side posting path so live cards are created by the backend instead of a weaker client-style send flow.
Added live-card reconciliation for the TehKluma feed so one post is created per live creator and stale cards are deleted automatically when that creator drops offline.
Updated live announcements to post through the existing verified `DontBlameLexi` bot account so message identity, permissions, and rendering stay aligned with native NeonChat bot behavior.
Added full hover timestamps to chat message time labels so users can still see compact times in-channel while getting the full posted date and time on hover.
Added a new developer guide plus bots-and-automation docs in the repo to explain NeonChat’s architecture, bot ownership rules, service layout, and safe automation patterns for future contributors.
Expanded the Help Center `Developer Bots` section with known-good example patterns for REST create/delete bot workflows and server-trusted polling flows so bot authors have working samples to follow.
TeamMidnite.tv/NeonLogin QR Approval Flow Tightening
Updated the TeamMidnite.tv/NeonLogin QR login flow so QR sign-in no longer drops users into the NeonLogin dashboard during approval.
Tightened the QR handoff to send users straight into the dedicated approve-or-deny login step for a cleaner mobile confirmation flow.
Improved the QR login experience so the approval path feels direct and focused instead of routing through unrelated account dashboard screens.
Legal Pages + Member List Bot Polish + Emote Popup Styling
Added public `/terms` and `/privacy` pages so NeonChat now has dedicated Terms of Service and Privacy Policy routes.
Fixed verified bot rendering in the members list so bot rows show their lower status line and verified badge instead of a stripped-down fallback row.
Updated profile live-state fallback behavior so manual LIVE status no longer incorrectly renders Twitch-specific copy when there is no real Twitch activity card.
Restored the fancy emote metadata popup styling with the intended neon card treatment, readable source/owner rows, and proper action button styling.
Text Channel Send Reliability + Chat Hardening
Hardened community text-channel sends against duplicate and triple-post behavior by enforcing nonce-based server dedupe on the channel message path.
Added socket acknowledgement handling on backend channel sends so client retries resolve cleanly against the original accepted message instead of creating another post.
Normalized channel send failures for auth, empty-message, slow-mode, verification, and locked-channel cases so the client gets one consistent denial path.
Closed the last legacy client send route so every text-channel message now uses the same nonce-and-ack delivery flow instead of a weaker raw socket emit path.
Reviewed live backend service health and recent logs after the patch to confirm the text send path is stable and not showing new channel-message errors.
Rich Messages: Embeds, Mini Players, and Discord-Style Markdown
Added Discord-style webhook embed rendering in chat and DMs, including title, description, author, fields, footer, thumbnail, and image blocks.
Extended webhook parser compatibility to support JSON and Discord-style `payload_json` form payloads so embed posts render reliably from common webhook tools.
Added mini-player unfurls for supported links in message text: Twitch channel/player links, Twitch clip links, Kick channel/player links, and YouTube watch/share links.
Added safe iframe-literal handling: when users paste `<iframe src="...">` as text, NeonChat extracts supported `src` URLs for mini players without rendering raw HTML.
Added code formatting for both channel chat and DMs: inline code, fenced code blocks with language labels, and copy buttons on code blocks.
Added safer Discord/Twitch-like markdown support in message text (bold, italics, underline, strikethrough, spoilers) plus quote (`>`) and list (`-`, `*`, `+`, `1.`) line rendering.
Normalized Discord-style tag artifacts in webhook text so raw `<@id>` wrappers no longer appear as garbage; known IDs can resolve to app-style `@username` when the user is known locally.
Windows Taskbar Branding + DM Video Recovery Control
Set the desktop app display identity explicitly to `NeonChat` (app name, AppUserModelID mapping, and Windows executable name) so taskbar/jump-list labeling no longer falls back to `Electron` in packaged builds.
Added an in-call `Turn On Camera` recovery control in DM video calls that appears when a user is in video mode but no local video track is active, then retries camera attach and renegotiates the call.
Improved DM video panel fallback states so users now get clear local/remote camera status placeholders instead of blank black panes when video tracks are missing.
Changed channel gear actions (text, voice, and context-menu Channel Settings) to open the dedicated channel editor directly instead of the generic Channels list.
Fixed dedicated channel editor layering so the base Server Settings panel no longer bleeds through behind channel settings.
Hardened webhook `Copy URL` with clipboard fallbacks so copying works reliably even when browser clipboard APIs are restricted.
Fixed duplicate DM sends by adding socket ack responses on `send-dm` and nonce-based server dedupe to stop retry-created triple messages.
Improved DM video-call stability with stricter offer/answer media-mode sync, transceiver negotiation hardening, and explicit camera-feed placeholders when local/remote video tracks are unavailable.
Reply Preview Emote Rendering Fix
Fixed server chat reply previews so emote tokens now render as inline emotes instead of plain text in the reply reference strip.
Kept reply preview rendering non-interactive to preserve the one-click jump-to-message behavior on the entire reply block.
Whovian Theme Fix
Fixed the broken `Whovian` theme by adding the missing theme variables, preview styling, and Whovian-specific voice button colors.
Fixed account theme sync so `Whovian` now saves, loads, and survives API/socket auth instead of being dropped by the backend.
Notification Routing, Badge Sync, and EXE Input Focus Hardening
Normalized desktop notification settings against real browser permission state so granted browser notifications are no longer silently treated as disabled by stale local preferences.
Added browser-side mention fallback handling for `server-message-notification` preview text and a server-room `server-message-activity` fallback path to improve badge delivery across multiple active clients.
Fixed main-server channel badge key normalization so browser unread and mention counters resolve against the same channel keys used by the live app state.
Collapsed channel badge rendering to a single red counter path instead of split yellow/red pills while keeping mention-first count priority.
Hardened channel and DM composer focus behavior in the portable Windows app so typing works reliably after switching views without extra clicking.
Added stronger left-sidebar voice activity indicators: per-user `TALKING` badge, animated speaking bars, and active channel-row lighting while users are speaking.
Improved speaking event wiring so local voice activity also updates sidebar indicators reliably instead of only remote participants.
Stabilized sidebar speaking behavior to prevent random mid-speech dropouts with improved release timing and event handling.
Fixed community voice session persistence so switching to DMs/Friends no longer drops active voice connection.
Kept voice session mounted in background layout outside server view, while preserving full room layout only when actively viewing the voice room.
Runtime Ownership Cleanup + Profile Bio Sync Fixes
Removed process-manager conflicts by disabling `pm2-vscode.service` and moving NeonChat runtime ownership to `neonchat.service` (systemd-only).
Resolved port conflict/restart-loop issues on `:3010` caused by duplicate PM2/manual Node processes (`EADDRINUSE`) and validated stable service startup under systemd.
Restored profile bio link styling so profile links render as fancy pills again instead of plain default browser links.
Fixed Whovian profile source consistency by syncing linked account bio records and validating live API output from the active service process.
Developer Bot Posting Route Fix + Help Center Developer Guide
Restored REST bot posting by adding `POST /api/channels/:channelId/messages` so developer bot tokens can post directly to server channels again.
Aligned bot REST message behavior with socket send rules, including server/channel access checks, message persistence, and realtime broadcast events.
Updated the Help Center with a dedicated `Developer Bots` tab that explains how `developer.neonchat.co` works end-to-end.
Added clear bot setup docs in Help Center for create/submit/invite/token flow, plus REST and socket posting examples for faster integration.
Mobile Voice Layout + Global Voice Session Persistence
Adjusted mobile voice layout spacing so the call controls and bottom navigation no longer block key voice room content and actions.
Updated connected voice status placement on mobile so the `Voice Connected` panel sits lower, just above the bottom menu area.
Kept active community voice sessions alive while switching to other servers, so users stay connected until they manually disconnect or join another voice channel.
Enabled global voice quick actions across servers so `Settings` and `Disconnect` remain usable even when browsing outside the voice server.
Added a small speaker indicator badge on the server icon currently hosting the active voice session.
Developer Portal Auth + Routing Hotfixes
Fixed Developer Portal login handoff to use the live NeonLogin route (`/auth/neonlogin`) with return-to support for `developer.neonchat.co`.
Added a backward-compatible server alias for legacy links (`/auth/neonlogin/start`) so old cached/bookmarked URLs now redirect correctly instead of returning 404 JSON.
Fixed `Back To App` on developer/admin hosts so it returns users to `https://neonchat.co/` instead of looping on the portal host.
Confirmed production session cookies are scoped for cross-subdomain auth continuity (`Domain=.neonchat.co`, `SameSite=None`, `Secure`) and enabled developer-domain CORS credentials flow.
Verified Developer Portal API session fetch path is live (`/api/developer/portal`) and the Help Center route (`/help-center`) is wired in the app router.
QR Login Live + Admin Bot Separation + Invite and Channel Stability
Shipped QR Code Login end-to-end: users can start login on NeonChat, approve from NeonLogin on mobile, and sign in instantly after approval.
Added NeonChat QR bridge endpoints for start/status and integrated session creation through the existing NeonLogin auth mapping path.
Added NeonLogin QR API endpoints and approval page flow with DB-backed QR session records and one-time approval handling.
Split Admin user management into human accounts and bot accounts, including separate bot visibility and bot-focused account details.
Expanded the Community server watchlist view so staff can see all tracked servers instead of a shortened list.
Fixed channel switch race conditions that could load the previous channel message list after rapid switching.
Stabilized MidniteBot live posting with poll overlap guards and live-key dedupe to prevent repeat posts in `#live-now`.
Added in-app invite unfurl cards for `neonchat.co/?invite=...` links so invites render with rich server preview UI in chat.
Added crawler-targeted invite metadata rendering for social embeds so invite links can generate cleaner external preview cards.
Emote Source Popups + Twitch Jump Links
Added clickable inline emotes in chat: clicking an emote now opens a source details popup instead of leaving users guessing where it came from.
Emote popups now show source metadata (Twitch global/sub, BTTV, FFZ, server custom, and owner/server details when available).
Added direct `Open Twitch` action inside the emote popup when owner login data exists, so users can jump straight to the emote creator channel.
Polished emote interaction styling with hover affordances and a dedicated details card to keep metadata readable without cluttering message text.
Launched a full self-serve Developer Portal flow for bots with create, edit, token reset, verification submission, and server invite actions.
Added one-click `Quick Setup` for bots: submit for checkmark (when docs are present), invite to selected server, and copy starter connection code.
Enforced checkmark requirements so bots must include valid Privacy Policy and Terms links before acceptance and invite eligibility.
Added bot invite authorization checks so only users with server management permission can add a bot.
Enabled bot-token auth for REST + socket bot operations and added an external REST message create endpoint for bot posting.
Added REST message delete endpoint for bot self-cleaning workflows and verified create/delete behavior end-to-end.
Added `Verified Bots` grouping in Personnel with bot badges and message-level verified bot marker in chat headers.
Fixed personnel identity merge edge cases so linked human accounts collapse correctly while bot identities stay distinct.
Fixed bot visibility scoping so bots only appear in servers they are actual members of (including neonchat-main relaxed roster exclusions).
Added Developer Portal bot connection status pill (`Connected` / `Not Connected`) for instant run-state validation.
Fixed channel selection race where loading channels could snap users back to the previous text channel after switching.
Send Reliability Hotfix (DM + Channel)
Added Socket.IO send acknowledgements with retry handling for channel messages and DMs so delivery state is confirmed instead of assuming success.
Added nonce-based dedupe and in-flight retry collapse on the server for DMs so timeout retries no longer create duplicate messages.
Removed duplicate DM delivery paths and added client-side ID dedupe as a safeguard against double-rendering.
Fixed a DM composer lock state that could block typing and added single-flight send guarding so one action cannot trigger multiple parallel sends.
Reduced the server member presence fallback poll interval from 4s to 20s now that socket push updates are the primary source.
Fixed restart recovery path by restoring PM2 process persistence (`pm2 save`) and system startup wiring so NeonChat is automatically resurrected after host reboot.
Stabilized PM2 boot handoff under systemd (`pm2-vscode`) to prevent empty process-list starts after restart.
Updated MidniteBot live presence payload to publish verified bot flags (`is_bot`, `botVerified`, online status) so it appears online like other verified bot accounts.
Admin Tickets, Voice Routing, Device Tests, and Theme Expansion
Reworked the admin dashboard into clearer tabs for overview, server management, user management, and moderation so staff workflows no longer stack into one long page.
Added a real admin-side support inbox with ticket open, close, reopen, and threaded two-way replies, while keeping email notifications active for new tickets, replies, reopen events, and closures.
Added Discord webhook alerts for support tickets, reports, and server request actions so staff can watch important moderation and support events outside the app.
Added a Help Center page plus direct Help shortcuts in Settings so users can learn how NeonChat works without relying on Discord habits.
Added self-service account deletion, fixed deleted-account cleanup so removed users stay gone, and stopped deleted identities from being silently recreated by NeonLogin.
Fixed connected-account labeling so real Twitch links and Twitch emote access are shown accurately without falsely claiming a Twitch account is linked.
Improved voice routing with user-side region overrides, live voice-only reconnect when the active region changes, and a new alpha-only `Auto (Alpha / Cloudflare)` relay test mode.
Upgraded Settings device tests so microphone checks now support live loopback playback and camera checks now attach reliably with better fallback handling instead of black previews.
Added a new `Whovian` theme inspired by TARDIS blues with warmer console-room accents.
DM Hub Refresh + Curated Server Discovery
Reworked the desktop DM experience into a three-zone layout with Direct Messages pinned left, a Friends Hub in the center, and an Active Now rail on the right.
Added a dedicated `Hub` return control in active DM headers so open conversations can jump straight back to the Friends Hub view.
Added contextual `+ Add Friend`, `Accept`, and `Pending` actions directly in the DM header when chatting with someone who is not already on your friends list.
Added a dedicated `Discover` action inside the DM sidebar that opens a curated partnered/verified server browser, separate from the broader public server browser.
Restored the main sidebar server popup to list all public/discoverable servers again, while keeping the DM-side discover flow focused only on partnered and verified communities.
Fixed DM avatar fallback handling so broken profile images now swap cleanly to the default avatar instead of showing broken-image text in conversation lists and headers.
Adjusted DM conversation preview alignment so preview text and links stay left-aligned consistently instead of appearing visually centered.
Added a dismissible web download promo banner on the login screen for users who prefer the browser app but may want to try the Windows EXE or Android app.
DM Notifications + Mobile Media + Message Load Polish
Added reliable in-app DM toast notifications with the dedicated `DMSound.mp3` alert path, including browser audio unlock fallback when autoplay is blocked.
Restored DM image attachments and added inline direct-image/GIF rendering so posted `.gif`, `.png`, `.jpg`, `.webp`, and similar links embed in chat instead of staying plain text.
Added Giphy support in DMs with a mobile-friendly unified `Emoji / GIFs` media sheet and kept Twitch emotes available in the same mobile picker flow.
Improved mobile channel loading by caching recent messages per channel and rejoining the active channel automatically when the app regains focus or returns from the background.
Cleaned up DM conversation previews so long messages and long links now clamp to a short single-line snippet instead of stretching the sidebar or causing overflow.
Reorganized Settings with grouped sections, renamed `Voice & Audio` to `Voice & Video`, and added editable keybind capture for desktop shortcut settings.
Mobile App Rollout + DM Call + Downloads Refresh
Shipped Android app wrapper updates for login return flow, microphone support, branding, and direct APK downloads.
Reworked DM voice/video call handling so incoming calls surface across the app, ringing clears correctly, and desktop video layout is larger and cleaner.
Added camera device selection in Voice & Audio so desktop users can pick the correct webcam before video calls.
Restored the fancy /downloads page and brought Windows, macOS, and Android download links back onto the main downloads screen.
Fixed duplicate Twitch subscriber emote entries caused by channel-scope and user-scope merges returning the same emote twice for the same owner.
Twitch Subscription Emotes + Connections Flow
Added user-scoped Twitch subscription emote loading for Community Server chat and DMs, including grouped subscriber sections in the picker.
Fixed subscriber emote owner labeling so emotes group under the actual streamer/channel instead of collapsing under the signed-in user.
Added a dedicated `Connections > Twitch Emotes` section with self-service connect/disconnect controls and share settings.
Reduced Twitch emote authorization to the minimum `user:read:emotes` scope for the emote-only flow.
Fixed the Twitch emote OAuth callback so the token binds to the correct NeonChat user record instead of landing on the wrong local account.
Current user mode is `All subscriptions`; individual channel selection is planned but not live yet.
Steam Presence + East Voice Region + Ping UI Polish
Added Steam presence integration with user SteamID64 linking in Connections and live in-app game status updates.
Added Steam profile sections in user cards with now-playing game visibility and removed the extra Steam App ID line from profile display.
Added official Steam sign-in notice art in Connections to match Steam branding requirements.
Enabled East Coast TURN host routing so US East is now an active voice region option alongside US West.
Updated server ping badge typography to a clearer display font for easier reading.
Spotify Presence Visibility Fixes
Profile now hides the Spotify card completely when playback is paused or stopped.
Removed the fallback not-playing Spotify text from profile view.
Right sidebar now clears song status as soon as Spotify reports playback is not active.
Live Fix Pack: Emotes, Spotify, Badges, Message Stability
Fixed Twitch emote rendering for receivers so posted emotes render from message metadata even when viewers do not own those emotes.
Reworked Spotify Connections: Save + Connect now validates credentials, added Link Spotify OAuth flow, and separated app-only connection from user-authorized playback access.
Added Spotify callback support for /auth/spotify/callback and surfaced the callback URL in Settings so dashboard setup is explicit.
Fixed channel message send behavior where messages could appear, disappear, and require refresh by removing forced rejoin-on-send and stabilizing optimistic message reconciliation.
Restored badge image serving path and profile badge URL handling so Founder/VIP/Streamer/AlphaTester/MidniteBot PNG badges render correctly when assets are present.
Expanded patch runbook coverage with these regressions and recovery steps for faster incident response.
Voice UX + TURN Routing Update
Removed the extra disconnect icon from the voice channel row while keeping the main Disconnect button in the connected voice panel.
Updated Voice Server Settings to use the in-app popup flow from dev (with channel-level override, voice bitrate, and video quality controls).
Kept live TURN routing on self-hosted infrastructure and skipped Cloudflare TURN for production.
Added East Coast TURN/coturn support as secondary relay alongside West Coast TURN for better regional failover.
User Copy Actions Added
Added Copy Username and Copy User ID options in message context menus.
Added right-click copy menu support in DM conversation list usernames.
Added right-click copy menu support on DM header username.
Admin Ticket Visibility + Channel Copy Fix
Locked #admin-tickets visibility to staff-only at both API and client guard layers.
Fixed Copy Channel ID action with robust clipboard fallback behavior.
Improved context-copy reliability across browser clipboard restrictions.
Support + Report Intake Expanded
Added /support and /reportuser pages with direct submission forms.
Routed support and user reports into #admin-tickets automatically.
Integrated staff email notifications for new support/report intake events.
Spotify Presence Sync Stabilized
Fixed stale song titles in the member list for browser users.
Realtime presence now pushes updated track data without needing a manual refresh.
Resolved merge behavior that could let older local user data override live presence.
Status + Mini Profile Menu Rework
Restored quick status controls: Online, Idle, Busy.
Added Busy timing support and cleaner status update flow.
Updated the mini user popup with the requested compact profile behavior.
Image Viewer + Voice Reliability
Fixed image modal behavior that was hanging and blocking chat view.
Improved voice join/leave handling and channel join UX behavior.
Resolved stream-stop edge cases that left stale frames visible.