๐ TextWhisper Features
- Logged-in user shown in top-right menu
- URL reflects selected user or list token, and item โ updates dynamically when browsing or sharing
- User avatars displayed next to usernames in user lists and chat messages for better visual identification.
- Strong password requirements (AโZ, aโz, 0โ9, minimum 6 chars)
- Email confirmation required before login
- Disposable email domains blocked during registration
- Display name validation with anti-spam filters (no gibberish, reserved words, excessive repetition)
- Client-side and server-side input validation for consistency
- Each list has a privacy level that controls who can access it:
- โ๐ Public โ open and searchable by anyone
- โ๐ Private โ visible only to you and invited list-chat members
- โ๐ต๏ธ Secret โ hidden from search, but shareable via private link
- Privacy affects list visibility, chat access, and who can view or join
- You can change a listโs privacy setting anytime from the list menu
- Only owners or admins can invite others or adjust privacy
- All chats are end-to-end encrypted. Only users with list-chat access can read them.
- Create, rename, reorder, and delete lists
- Add/remove items from lists (yours or others')
- Mark lists as Public or Private
- Favorite lists for quick access
- Item actions: add to list, attach PDF, remove
- List actions: offline access, add to My Lists, rename, delete
- Real-time chat scoped to each list
- Floating chat icon (mobile/desktop-aware) or footer toggle
- Displays messages with emoji and multi-line formatting
- Supports invite-only list participation
- Owners, Admins and editors can invite members via email
- Role system: Viewer, Commenter, Editor, Admin, Paused
- Invite UI integrated in chat panel with inline role editing
- Access control enforced server-side for chat visibility and modification
- Unread message count shown per list
- Clickable badge opens the chat directly from the list
- Only invited members can see or send messages for a list
- Smart menu to select unread list chats (shown when clicking chat tab with unread)
- Unread chat selector shows per-list unread counts and current list (if not already listed)
- Chat selection clears unread state automatically (badge + backend timestamp)
- Chat auto-scroll and "new messages" indicator work seamlessly
- Push notifications triggered by messages containing ! or ๐
- Push includes list name as title, respects sound + visibility settings
- Only subscribed and invited users receive pushes
- User avatars shown inline with chat messages
- Timestamps displayed above each chat message bubble
- All chats are end-to-end encrypted
- Sidebar tabs: Lists / Users
- Search box filters users/lists/items
- Sidebar auto-collapses on small screens
- Floating โฎ toggle button (mobile)
- Unified sidebar toggle across header, footer, and floating button
- Sidebar toggle preserves the current tab
- Share Group action available in sidebar group menus
- Event Groups (with members) and Categories (label-only classification)
- Category settings with custom color selection
- Create recurring events per group
- Member/admin check-in and check-out
- Attendance reports with filters (period, group, category)
- Built-in event polls: create, vote, and share in chat
- Owner and user annotations supported (two overlays)
- Hover or tap annotation to see who is the owner
- Scroll and zoom while drawing or viewing
- Annotations persist across sessions and offline use
- Draw with mouse, finger, or stylus using pointer events
- Pinch-to-zoom with consistent panning support
- Line width adjusts non-linearly with zoom for visual stability
- Base annotation overlay per owner or admin
- Additional annotation overlay per user
- Double-tap edges to switch to next/previous item
- Smart margin detection automatically reduces large white borders for a cleaner view
- Optimized screen usage โ PDFs expand to fill available space, especially on tablets
- Adaptive zoom levels based on detected text area
- Configurable navigation arrows for Continuous and Paged view modes
- Continuous view: page up/down via arrows
- Paged view: previous/next page via arrows
- Boundary navigation to previous/next item (PDF) in the list
- Pen tool (uses color picker)
- Highlighter tool draws straight lines, uses same color picker (avoids black)
- Eraser tool (freehand erase)
- Undo last annotation
- Clear all annotations
- Save annotations
- Reload annotations
- Print with annotations included
- Print PDFs with annotations included
- Uses subject as suggested file name
- PDFs stored per item and loaded on demand
- Drag-and-drop PDF upload with automatic replacement
- PDF File upload from PC or device
- Support for pasting direct PDF URLs
- PDF IMSLP search, autofills from text subject
- Mobile-safe upload button fallback
- Swipe left/right (in center of screen, one finger) to go to next/previous item
- Works globally when not in edit mode
- Double-tap screen edges (PDF view) also navigates between items
- Edit mode for owners and admins
- Rich text tools: Bold, Italic, Underline
- Dual textareas (editable + trimmed preview on wide screens)
- Slider to adjust text trim level
- New, Save, Refresh, Delete, and Print controls
- Smarter HTML-based editor for stable formatting
- Toolbar visibility synced with edit mode and the Text tab
- Shows owner and last editor
- Edit history is stored
- Available to all logged-in users (private to each user)
- Highlight text selections with color options
- Add comments in draggable bubble markers
- Freehand drawing directly on the text
- Drawings appear in movable bubbles anchored to the correct word
- Unified Undo for highlights, comments, and drawings
- Accurate touch selection and smooth mobile drawing
- Annotations save automatically and restore when reopening items
- Text stays unchanged โ annotations float safely above it
- Add music via drag-and-drop or by pasting links in the Music panel
- Add music from This device, cloud imports, and supported links
- Upload your own MIDI, MP3, WAV, FLAC, or M4A files per item for in-browser playback
- Paste links from YouTube, Spotify, and Soundslice โ embedded players appear automatically
- Supports built-in MIDI player with channel mute, solo (focus), per-channel volume, and editable names
- MIDI player shows real-time activity pulses and supports seeking via progress bar
- Channel names are editable and saved per file for consistent labeling
- Native HTML5 audio player used for supported audio formats
- Pin any player (YouTube, Spotify, MIDI, audio) to float outside the panel for focused playback
- Floating players are draggable and mobile-aware โ reposition with drag or long-press
- Playback continues uninterrupted when collapsing or pinning/unpinning the player
- Only one pinned player is active at a time โ auto-unpins or restores as needed
- Delete uploaded music files if you are the item owner or an admin
- Soundslice links also open fullscreen or in-app (mobile-aware)
- Footer music button toggles the Music panel and adapts behavior to platform

- Loop playback: repeat the same track or automatically move to the next item
- Set a default audio or MIDI file per item for playlist-style looping
- Loop mode selector directly in the audio player (no loop / repeat track / loop list)
- Player controls fully usable in pinned mode (progress, speed, skip, loop)
- Pinned player stays active while navigating โ draggable on desktop and mobile
- Cleaner right-aligned controls with pin and default checkmark
- Home, Logged in as..., Login/Logout
- Edit Mode toggle
- About, Version, App Reset
- Signed-in avatar indicates active identity/context
- Works as a Progressive Web App (PWA) โ installable like a native app on mobile or desktop
- Offline access for marked lists: view text, PDFs, and annotations without internet
- Service Worker caches the app shell, list metadata, PDFs, and drawing data
- List viewer supports offline loading with a refresh fallback if partially cached
- Version-aware cache invalidation with automatic background updates
- Offline indicator banner shows when no connection is detected
- URL updates dynamically as user switches lists or items
- Direct links to
/token/surrogate open exact content
- Sidebar state (tab, scroll, expanded/collapsed groups) persists
- Soundslice tab launches fullscreen or app depending on device
- Share lists:
https://textwhisper.com/{token}
- Share items:
https://textwhisper.com/{token}/{surrogate}
- Supports usernames and list tokens in URLs
- Accessible via list and item menus (โฎ โ Share this list/item)
- Opens native share options: copy link, Nearby Share, Messages, Mail, Facebook, Chat, and more (based on your device)
- Meta tags for rich previews on social and chat apps
- Works with offline lists too
- "My Friends" view shows all distinct chat-connected users across your lists
- "List Chat Members" allows lazy-loaded viewing of participants per list, including roles and invited users
- Session-based authentication
- Ownership-validated inserts, edits, deletes
- Private lists are hidden from search/guests
- Public content accessible without login
- Optional โStay logged inโ with secure persistent cookie
- โ๏ธ Unified Text Annotation System โ highlights, comments, and drawings now share the same engine
- ๐๏ธ Freehand drawing on text with accurate anchoring to the correct words
- ๐ซง Movable drawing bubbles with stable positions and automatic re-anchoring on text changes
- โ๏ธ New highlight engine โ smoother selection, no duplicated text, better removal
- ๐ฌ Improved comment bubbles โ cleaner editing, stable offsets, full undo of moves and text changes
- โฉ๏ธ Unified Undo System โ undo highlights, comments, drawings, and text edits
- ๐๏ธ Touch improvements โ accurate highlighting and drawing on phones and tablets
- ๐จ New drawing palette with color pickers for pen, highlighter, and draw tools
- ๐
ฑ๏ธ Rich text formatting added: Bold, Italic, Underline
- ๐ง New HTML-based text editor replacing old plain-text engine for stability and precision
- ๐ Refresh action now resets both text and drawing canvas, respecting active tools
- ๐ง Edit mode permissions tightened โ only owners/admins can edit text; all users can annotate privately
- ๐งฒ More consistent tool state syncing between text mode, draw mode, and palette buttons
- ๐ต New audio loop system โ choose between no loop, repeat track, or loop entire list
- ๐ Pinned player enhancements โ cleaner UI, stable playback, draggable on all devices
- โญ Default music per item โ mark one audio or MIDI file as the default for automatic playlist looping
- ๐๏ธ Fully interactive pinned player โ progress bar, speed control, loop mode all work correctly
- ๐ More precise click-handling โ player no longer collapses when adjusting controls
- ๐งฉ Cleaner control layout โ default checkbox aligned next to the pin button for music and MIDI only
- ๐พ Persistent defaults โ default pinned music stored per item for smart auto-play when looping lists
- ๐ Automatic PDF margin detection โ intelligently trims large white page borders for cleaner, space-efficient reading
- ๐ฑ Tablet-optimized view โ maximizes content area so PDFs fill the screen instead of wasting space on margins
- ๐ Smarter zoom behavior โ auto-adjusts zoom levels based on detected text region, no manual fine-tuning needed
- โก Faster page rendering โ margin detection now uses optimized pixel scanning for quicker load times
- ๐ฅ๏ธ Consistent layout across devices โ ensures PDFs look balanced on phones, tablets, and desktops
- ๐ฌ List-based chat: one chat per list, visible only to invited members
- ๐ฅ Inline member invite interface with role control: Viewer, Commenter, Editor, Admin, Paused
- โ Member management is fully integrated into the chat panel UI
- ๐ Unified sidebar toggle logic across footer, hamburger, and floating button (
window.toggleSidebar())
- ๐งญ Footer navigation bar with tab switching, fullscreen toggle, chat toggle, and Soundslice integration
- ๐บ Fullscreen mode via footer button, including support for iOS Safari scroll hack
- ๐ฌ Footer-based chat toggle replaces floating bubble, fixes overlap and maintains state
- ๐จ Edit mode toolbar logic synced across tab switches (text and PDF)
- ๐ง Sidebar toggle and item selection preserve the current active tab
- ๐ก๏ธ Registration hardened with client+server display name validation
- ๐ Display names must be 3โ30 chars and reject gibberish, repetition, and reserved words
- ๐ซ Disposable email addresses are now blocked at signup
- ๐๏ธ New zoomable canvas with stylus/touchpad/finger drawing support
- ๐ Smart line scaling: stroke thickness remains visually stable at any zoom level
- ๐ PDF annotation tools improved with eraser, box erase, and undo
- ๐ค Drag-and-drop PDF upload replaces old version and updates cache
- ๐ด Enhanced offline support with version-aware Service Worker caching
- ๐ Fully redesigned login system with session + persistent token support
- ๐งผ Automatic cleanup of duplicate session tokens per browser/device
- ๐ฒ Login sessions display OS, browser, and device type in plain English
- ๐๏ธ Logout panel with option to revoke specific sessions or all devices
- ๐ข Active session is visually highlighted ("This browser") and non-revocable
- ๐ Session versioning prevents reuse after remote logout
- ๐ Persistent tokens auto-renew upon reuse (rotation + expiry refresh)
- ๐งผ Box eraser with live preview overlay (dashed rectangle)
- ๐ง Undo stack per page for annotation edits
- โ๏ธ Stylus, finger, and touchpad drawing supported across platforms
- ๐ Annotations saved per page and persist across sessions
- ๐ Smart zoom & pan support while drawing (touch-action tuning)
- ๐๏ธ Missing annotation files return silently โ avoids error logging
- โก Fast overlay rendering even without existing annotations
- ๐ฑ Scroll-to-bottom bug fixed on long PDFs
- ๐ Line width auto-scales with zoom for better visual consistency
- ๐งญ Sidebar auto-collapses on iPads in portrait mode
- ๐ Dual textarea display enabled for screens wider than 1000px
- ๐ In edit mode, original (readonly) textarea auto-hides
- ๐ Sidebar and tab state preserved across navigation
- ๐ก๏ธ Role-based drawing control (e.g., viewer cannot annotate)
- ๐ Session-based token management (temporary vs persistent) now unified
- ๐ง Logout preserves referrer logic โ returns to current list or root
- ๐ Improved session labeling: includes IP, device type, and expiration
- ๐ Cleaner device session rendering using parsed User-Agent summary
- ๐งฉ Revoke session UI grouped and styled consistently with form behavior
- ๐ด Unread message count shown per list โ updates in real time
- ๐ด Clickable badge opens the chat directly from the list
- ๐ 'New messages' alert shown in chat when user scrolls up
- ๐ฌ Messages aligned left/right based on sender identity
- ๐ Multi-line messages preserved with proper formatting
- ๐ Emoji insertion via native OS picker
- โ๏ธ Input area supports Shift+Enter for newlines (desktop)
- โณ Auto-scrolls to bottom when new messages arrive (unless scrolled up)
- ๐ Only invited members can see or send messages for a list
- ๐ฝ Smart menu to select unread list chats (shown when clicking chat tab with unread)
- ๐ Unread chat selector shows per-list unread counts and current list (if not already listed)
- โ
Chat selection clears unread state automatically (badge + backend timestamp)
- ๐ง Chat auto-scroll and 'new messages' indicator work seamlessly
- ๐ Push notifications triggered by messages containing ! or ๐
- ๐ Push includes list name as title, respects sound + visibility settings
- ๐ Only subscribed and invited users receive pushes
- ๐ต MIDI and MP3 file upload supported per item
- ๐ Pin music players (MIDI or MP3) to float outside panel for persistent playback
- ๐ค Drag-and-drop music file upload with file type validation and size limits
- ๐ Uploaded audio filenames preserve Icelandic characters (รญ, รฆ, รถ, etc.)
- ๐๏ธ Delete buttons for music files (visible to owner/admin only)
- ๐ Soundslice links supported in text โ rendered in Music tab automatically
- ๐ฅ Pinned music players auto-close when switching away from Music tab
- ๐บ YouTube links now render embedded video players in the Music panel
- ๐ Floating player logic extended to YouTube, Spotify, MIDI, and audio embeds
- ๐ง Music panel parses and displays multiple link types with correct player format
- ๐๏ธ Built-in MIDI player redesigned with channel mute, solo (focus), volume sliders, and editable names
- ๐ Real-time channel activity pulse visualizations in MIDI player
- ๐ Channel names are preserved between sessions using metadata storage
- ๐๏ธ MIDI progress bar supports interactive seeking
- ๐ Pinning/unpinning or collapsing players no longer interrupts playback
- ๐ All chats are end-to-end encrypted. Only users with list access can read them.
- ๐ฅ User avatars displayed next to usernames in user lists
- ๐ฌ User avatars shown inline with chat messages
- ๐ฌ Timestamps displayed above each chat message bubble
- ๐ฅ โMy Friendsโ view shows all distinct chat-connected users across your lists
- ๐ฅ โList Chat Membersโ allows lazy-loaded viewing of participants per list, including roles and invited users
- ๐ Share option added to list and item menus, with support for native app sharing and rich previews
- ๐ 'No PDF found' screen redesigned with consistent layout and permission-aware options
- ๐ฅ In addition to drag/drop and file upload, added support for pasting direct PDF URLs
- ๐ IMSLP search autofills from text subject and reuses a single browser tab
- Secret list tokens (no login sharing)
- Expiring share tokens
- Public list discovery/search
- Market mode for selling contributions
- User-specific annotation layers
- Auto-optimize scanned PDFs (readability + size)
- Import from IMSLP or public sources (curated, with metadata)
- Music-sharing hub (public domain sheet music)