Added:
- TOTP 2FA with QR setup, manual secret entry, backup codes
- Native OS notification toasts for new messages when tab/window hidden
Fixed:
- 2FA setup QR and secret not rendering (field name mismatch)
- Backup code browser validation error (empty pattern attribute)
- Missing copy button for backup codes
- Add 'unsafe-eval' to CSP scriptSrc for plugins using new Function()
- servers.js health check extracts origin to avoid /path/api/health 404s
- Website updated: v2.3.1 server links, v1.0.1 desktop links
- Replace generic GitHub releases link with direct .exe, .AppImage, .deb download buttons
- More user-friendly for non-technical users
- Sync docs/ from website/
- Replace all haven-app.com references with https://ancsemi.github.io/Haven/
- Delete website/CNAME (domain not owned)
- Fix desktop promo popup and banner links to point to website download section
- Sync docs/ from website/
- Include package-lock.json version bump to 2.3.0
- Show screen share container before assigning srcObject so browser
decodes frames immediately instead of rendering a black rectangle
- Move role Save button to always-visible modal footer (next to Close)
- Replace in-button 'Saved' flash with proper green toast notification
- Bump version to 2.2.3, update changelog, website & docs
Added:
- Discord history import Direct Connect (paste token, pick server, select channels)
- Discord history import File upload (DiscordChatExporter JSON/ZIP)
- Tabbed import modal (Upload File | Connect to Discord)
- Full server structure import (text, announcement, forum, media, threads)
- Forum tag resolution and display
- Discord avatar preservation (webhook_avatar column)
- Channel type indicators in import picker
Fixed:
- E2E key loss on password change (re-wraps key with new password)
- Scroll-to-bottom loop when images load while scrolled up
- ARM64 Docker support (#34)
Changed:
- Website, README, GUIDE updated with Discord import docs
- Version bumped to 2.0.0
- Reverted PiP to native browser system (draggable across screens)
- YouTube playlist controls now work (list= param preserved in embed URL)
- YouTube auto-advance on video end for playlists
- Bot Updated toast fixed from red/error to green/success
- Toast z-index raised above modals
- Bot channel dropdown ordered with sub-channel indentation
- Uncategorized DMs now collapsible with localStorage persistence
- HTTPS redirect uses actual host instead of hardcoded localhost
- Removed duplicate /api/upload-avatar route, added 2MB size check
- Guarded global get-webhooks handler to not conflict with per-channel
- E2E safety number now full 60 digits (SHA-512 instead of SHA-256)
- Reset YouTube playlist flag on Spotify URLs
- GitHub Actions workflow attaches haven.tar.gz with fixed dir name (closes#22)
- Role inheritance: server roles cascade to all channels, channel roles
cascade to sub-channels (getUserEffectiveLevel, userHasPermission,
getUserHighestRole all use getChannelRoleChain helper)
- Voice dot color matches user's highest role color (server sends
roleColor in broadcastVoiceUsers / request-voice-users)
- Transfer Admin modal redesigned with warning box, note, and error
styling
- Noise-suppression slider track made visible (6px, border, 0.3 alpha)
and thumb enlarged to 14px
- User hover tooltip now opaque (bg-secondary, no backdrop-filter,
solid box-shadow)
- Version bump 1.6.0 -> 1.7.0 in package.json, website, docs
- Changelog entries added for v1.6.0 and v1.7.0
- Update all cache busters from ?v=webhooks1 to ?v=1.6.0 (CSS + all JS files)
Root cause: mobile browsers served stale cached CSS/JS despite server restart
- Fix mobile input flex-wrap: textarea now uses flex: 1 0 calc(100% - 48px)
to force media buttons onto their own row (old flex:1 let everything fit one row)
- Add !important to mobile hamburger/users button display:flex at <=768px
- Update website + docs download links from v1.4.7 to v1.6.0
- Add v1.5.0 and v1.6.0 to version history on website
- Changed hero subtitle from 'no install for them' to 'no download necessary'
- Added Music & Video Streaming as first feature card in the All Features grid
- Rich Chat moved to second position
- Applied to both website/index.html and docs/index.html
- Replace single hero image with rotating carousel of all 6 Issue #1 screenshots (2s interval, crossfade)
- Update all website descriptions: 25+ themes, sub-channels, editable channels, sound effects, roles
- Update meta tags (og:description, twitter:description, meta description) to 25+ themes
- Move channel collapse arrow to LEFT of channel name (between # and name)
- Remove margin-left:auto/order:99 from arrow CSS so it sits naturally on the left
- Sync website/index.html with docs/index.html
- Avatar upload: clone-replace button to clear stale listeners, add debug logging
- Replace dead hero image (bb10e3ca) with working asset (c6628170) in docs + website
- Update og:image and twitter:image meta tags to match
- Login theme bar: add flex-wrap, increase icon size (28px), constrain width
- Add: Status indicator dots overlaid on user avatars (green=online, yellow=away, red=dnd, grey=offline/invisible) with dark border cutout, responsive sizing for mobile
- Fix: .env.example still referenced Tenor API updated to GIPHY with correct URL
- Fix: CSS comment 'Tenor key' 'GIPHY key'
- Sync: website/index.html replaced with canonical docs/index.html
- Add: Help & Support footer link to docs/index.html
- Add: Deploy checklist note in CHANGELOG.md
- Replace dead mobile screenshot URLs with permanent ones from issue #4
- Add fill gradient to voice volume sliders (.volume-slider)
- Update dynamic voice sliders to track --fill CSS variable
- Make .channel-section flex:1 with overflow so sidebar scrolls properly
(fixes theme bar pushed off screen on mobile)
- Convert DM section to collapsible sub-menu (Discord-style toggle)
- Click header to expand/collapse, state persists in localStorage
- Shows total unread badge when collapsed
- Auto-expands when a new DM opens
- New docs/support.html: troubleshooting, FAQ, bug report instructions, contact info
- Added Help link to docs/index.html nav and footer
- Download buttons now point to v1.4.5 tagged release
- Version history updated with v1.4.5 as latest