GlassChat Changelog
2026-07-27
- Switch camera filters to MediaPipe
- Fix camera lens shutter carousel
- Restore compact billboard lyrics
- Auto-fit billboard lyric lines
- Prevent billboard lyrics clipping
- Fix story billboard lyric rendering
- Wire camera sound picker
- Refine story music sticker rendering
- Refine story music overlays and camera chrome
- Refine camera and story music overlays
- Fix story editor media transforms
- Restyle camera capture interface
2026-07-26
- Fix story music overlay styles
- Add Snap Camera Kit lenses
2026-07-25
- fix: correctly remove user IPs and Device IDs from global blocklists when unbanned
2026-07-24
- feat: inject global admin custom music into community music players
- feat: retroactively track device IDs for existing sessions on authenticated requests
- feat: add persistent device ID ban to prevent dynamic IP ban evasion; fix: active chat highlight visibility
- fix: make IP ban matching robust against IPv6 mapping and race conditions
- fix: resolve JSX syntax error in ChatRow component caused by duplicate code block
- feat: highlight active chat in the chat list
- feat: add direct IP ban capability to user ban dropdown in Admin Dashboard
- fix: resolve JSX syntax error in AdminDashboard by moving IP Bans tab block to correct location
- feat: add global IP banning feature to Admin Dashboard
- feat: add IP rate limiting to email verification endpoints to prevent resend abuse
- style: fix excess blank space in profile music note pills with short titles
- fix: relax strict archive.org URL validation for custom music clips
- fix: Resolve React Minified Error #300 in AdminDashboard by moving useEffect before early returns
- feat: Add iTunes metadata search in Admin Dashboard for custom music
- feat: Auto-detect audio duration for custom music tracks
- feat: Deduplicate music tracks and allow importing existing archive tracks in Admin Dashboard
- fix: Add missing admin music API endpoints
- feat: Add custom music management to Admin Dashboard and backend APIs
- feat: Add story views and reactions modal
- Fix canvas clipping by removing max-width restriction in story viewer
- Remove conflicting CSS transition on story progress bar to fix stalling when there is no user input
- Fix canvas aspect-ratio clipping, paused story sound message, mobile progress bar, and video background blur
- Fix transform coordinate mismatch by unifying Composer and Viewer at 9:16 aspect ratio, and revert to object-fit: cover
- Make Story Viewer shell transparent to show blurred backdrop
- Add Instagram-style blurred background to Story Viewer and use object-fit: contain to prevent cropping on PC
- Revert Story Viewer aspect ratio to 9/16 for wider PC viewing
- Increase default width of Story Composer side panel to 420px
- Fix Story Composer panel width expanding infinitely by applying panelWidth state and drag handle
- Fix flex truncation in story viewer
- Fix story viewer bug where long song title caused width expansion and update aspect ratio to match phones
- UI Polish: Make story composer side panel horizontally resizable on desktop
- UI Polish: Fix Story Composer editing options white background bug and make side panel auto-expanding
- UI Polish: Match story editor panel CSS to Note Composer styling
- UI Polish: Move Share button to side panel and enforce strict phone aspect ratio for story composer desktop preview
- UI Polish: Story Composer desktop layout improvements
- Fix video editor duration bug showing 00 seconds for recorded webm blobs
- Fix story composer mobile preview: remove aspect ratio constraint for true full screen
- Fix story composer mobile preview: remove default avatar and make full screen
- Mobile UI/UX overhaul: Story Composer and Video Trimmer
- Vertically center story strip arrows to align with avatars
- Fix admin panel auto unban display bug
- Fix desktop story viewer CSS grid collapse bug
2026-07-22
- Fix story viewer desktop frame and overlays
- Fix desktop story frame height
- Fix note pill clipping and story media fit
- Fix desktop story viewer and mobile close
- Fix profile notes and mobile screen share
- Fix desktop stories and audio gating
- Fix mobile call and note gestures
- Fix story viewer viewport fallback
- Polish story viewer navigation chrome
- Fix social moment privacy and story tray UI
- Fix story stacks and community music room
- Fix story tray grouping and avatar rings
- Fix story replies and viewer advance
- Smooth story music overlay editing
- Fix story music overlays
- Stabilize story viewer transitions
- Fix story routing and interactions
- Improve story composer editing controls
- Fix story viewer route and desktop chrome
- Add routed story viewer and preserve note avatars
- Polish story viewer layout
- Fix call popout and story UI
2026-07-21
- Adapt group call tiles to avatar colors
- Use Meet-style group call tile colors
- Fix call popout avatar fallback
- Fix group call popout avatars and tile colors
- Fix note privacy and music note overflow
- Improve adaptive group call layout
- Show note context on note replies
- Keep text notes compact
- Expand note sheet for lyrics
- Open tray notes in compact sheet
- Render note tray items with avatars
2026-07-20
- Show notes in chat tray and fill liked hearts
- Show synced lyrics in music notes
- Remove native note reply focus box
- Fix profile note layout and playback loop
- Refine profile note viewer UI
- Fix profile note viewer interactions
- Unify profile music notes
- Build Instagram-style stories
- Make music notes profile-only bubbles
- Move music notes to profile headers
- Add markdown download for docs
- Add music notes and stories
- Avoid stale archive item artists
- Stabilize call music compact controls
- Keep call music playing when drawer closes
- Improve call music playback mixing
- Speed up archive music loading
- Refine call music layout and synced lyrics
- Improve call music panel interactions
- Fix call music song playback click
- Add archive-backed call music library
2026-07-19
- Communities: fold discover + create (and community switcher) into the nav pill below the pencil; drop the separate community strip so the channel list card is full-width
- In-call music: proper glass player (search, loop, autoplay, seek, prev/play/next, centered cover) + dock it like chat in the right column; when both open they split vertically with a draggable divider (expand/collapse)
- Communities: render inside the real desktop workspace shell - shared DesktopNavRail (same nav pill), resizable channel column with the drag handle, and glass cards; no more bespoke rail. Mobile/tablet layout unchanged
- Communities UI: match the app's curved glass-card shell (gc-desktop-shell + gc-desktop-shell-card) on desktop instead of flat full-bleed panes with hard divider lines; mobile stays full-bleed
- Music M4: import uploaded tracks into community library - musicService.importTracks (bulk, sanitized, member-gated) + POST /:id/music/import, client musicApi.importTracks + MusicChannel 'Import from archive.org item' (fetches item metadata, maps mp3s+covers), tests
- Music M3: gitignore the music-uploader control-plane (built on disk at ./music-uploader, deployed separately to upload.glasschat.app like streamvault)
- Music M2 (part 2): in-call synchronized listening - generalized music rooms to call-scoped rooms (callChatId, access via chat membership/community perms) with ad-hoc URL queue (callMusicTracks + addUrl + music:tracks), CallMusicPanel embedded in GroupCallRoom (music toggle button), useMusicRoom supports both room kinds, tests
- Music M2 (part 1): synchronized community music channel - useMusicRoom hook (subscribe/reconcile audio to shared clock, drift-correct, control emit), custom MusicPlayer (cover/title/artist/seek/lyrics), MusicChannel (player + library add/play/queue), Communities renders music channel + type, tests
- Music M1: backend foundation - music_tracks table + 0005 migration, musicTracksRepo (JSON+PG), in-memory synchronized-playback registry (musicRooms.js), 'music' channel type, musicService (library CRUD + access), library routes, socket music:subscribe/music:control sync handlers, tests
- Communities: move entry point from ChatList header to the navigation bar (BottomNav mobile pill + desktop vertical rail)
- Communities C8 (polish): community settings (edit/delete cascade), public discovery + direct join, unread channel notifications (rail + channel dots), spec delivery-status + deploy-prep; tests
- Communities C7 (flagship): Checklist channel - boards/lists/cards repos (JSON+PG), checklistService (CRUD + move + permission-gated + realtime broadcast), checklist channel type, routes; client ChecklistBoard (columns, checkable cards, add/toggle/delete, drag-drop between lists, realtime sync), tests
- Communities C6: moderation (kick/ban/unban with hierarchy guards, ban blocks join), bans repo (JSON+PG), audit log view, light rate limits on invites/joins; client kick/ban actions + Bans/Audit tabs + community:removed handling, tests
- Communities C5: members (list+profiles, role assignment, leave), roles CRUD+permission editing, invites (create/resolve/join/revoke), join-by-invite page, invites repo (JSON+PG); client members/roles/invite modals + GroupChat extraProfiles name resolution, tests
- Communities C4: channel/category CRUD + reorder + permission-override editing (API+service+routes, MANAGE_CHANNELS gated, audited, realtime broadcast), capabilities in tree, client management UI (add/rename/delete/make-private/drag-reorder), tests
- Communities C3: client shell (rail + channel sidebar), create-community wizard, text channel via GroupChat (chatOverride), voice channel -> group-call join, routes + provider + entry point, tests
- Call presence sounds: distinct Discord-style join/leave/stream-start/stream-stop cues wired to GroupCallRoom LiveKit events, In-Call Sounds setting, tests
- Communities C2: channel=chat message-access authorization (view/send perms), community socket rooms + subscribe, community:created event, tests
- Communities C1: schema+migration, permission engine, repos (JSON+PG), community service (channel=chat), routes (create/list/tree), tests
2026-07-18
- SEO: server-prerender docs/blog/changelog/releases (fix Googlebot soft-404), dynamic sitemap.xml with all public pages + slugs, robots.txt allows public content
- Embed: image editing in group composer, theme switching works in embed, desktop-shell layout option; docs
- Fix embed-session team/member resolution (accept externalTeamId + id alias); group-call stream switch focuses in-layout instead of fullscreen; hide passkey UI in cross-origin embed (RP ID mismatch)
- Embed: add self-service authMode:user (own login/signup, no auto-provision); SignIn: checking-auth screen after OAuth redirect
- Group call: clamp chat width to 1/4-1/2 viewport (call stays >= half); fix unread pill wrapping
- Chat perf: rAF-throttle scroll date-label update + bottom-up early-break scan (fixes lag with many messages)
- Code fullscreen: curved container for Code tab; group call: slide-in/out chat panel with animation
- Code fullscreen download button; group call: fill fullscreen share, main-view stream switcher, no PiP for own screen
- Code detection: classify HTML documents as html, not jsx (CSS braces no longer trip JSX)
- Chat: disable large-text->file limiter; render .md attachments collapsed with download button
- Revert "Chat: revert floating date pill to overlap inline separator (fix duplicate pill)"
- Chat: revert floating date pill to overlap inline separator (fix duplicate pill)
- Chat: 3px more gap between header and floating date pill
- Chat: add ~2.5px more gap between header and floating date pill
- Header: apply visual-viewport keyboard anchoring on mobile only; bump date pill gap to ~4px
- Chat: nudge floating date pill 1.5px further from the header
- Docs + blog: render code blocks with the in-app CodeBlock (copy/collapse/fullscreen)
- Notification tones: offer Crystal + Aurora consistently in Settings and per-chat/group pickers
- Notification tones: drop phantom Crystal/Aurora options, keep curated set
- Fix call backdrop bleed in browser dark theme; match group notification sound to DMs