๐ TextWhisper Features
๐งฉ Recent Enhancements (May 2025)
- ๐ฌ 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)
๐งฉ Additional Enhancements (May 2025)
- ๐งผ 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
๐ค User Identity
- Logged-in user shown in top-right menu
- URL reflects selected user or list token, and item โ updates dynamically when browsing or sharing
๐ก๏ธ Account Security & Validation
- 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
๐๏ธ List & Item Management
- 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
๐ฌ List Chat & Collaboration
- 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
๐งญ Sidebar & Navigation
- 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
๐ PDF Viewer
- Drag-and-drop PDF upload
- View embedded Google Drive or uploaded PDFs
- Annotation tools: pen, eraser, box eraser
- Save/clear annotations per page
- Undo drawing
- Scroll and zoom while editing
- Double-tap edges to switch to next/previous item
- PDF tab auto-loads on page open if previously active
๐๏ธ Canvas Drawing & Zoom
- Zoomable canvas drawing (touchscreen + touchpad compatible)
- 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
- Modular design with reusable
zoomdraw.css
class
๐ค PDF Upload & Annotation
- Drag-and-drop PDF upload with automatic replacement
- Mobile-safe upload button fallback
- PDFs stored per item and loaded on demand
- PDF annotations: pen, eraser, box erase, undo, clear
- Annotations persist across sessions and offline use
๐ Gesture Navigation
- 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
๐ Text Editing
- Edit mode toggle
- Dual textareas (original + trimmed on wide screens)
- Slider to adjust text trim level
- New, Save, and Delete buttons
- Toolbar visibility synced with edit mode + tab (textTab)
๐ต Music Tab
- Auto-detects and extracts Soundslice links from item text
- Desktop: opens or reuses a named tab and requests fullscreen when possible
- Mobile: opens in existing browser tab or directly in the Soundslice app if installed
- Footer music button adapts behavior to platform (mobile-aware)
- Requires no upload โ just paste a valid Soundslice link in text
โ๏ธ Config Menu
- Home, Logged in as..., Login/Logout
- Edit Mode toggle
- About, Version, App Reset
- Edit toggle moved next to settings icon
๐ด Offline Mode & PWA Support
- 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
๐ง Smart UI Behavior
- 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
๐ Sharing
- Share lists:
https://textwhisper.com/{token}
- Share items:
https://textwhisper.com/{token}/{surrogate}
- Supports usernames and list tokens
- Meta tags for rich preview in chat/social
๐ System Features
- 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
๐ Authentication & Session Management
- All logins (temporary and persistent) are now recorded in
member_tokens
- "Stay logged in" uses secure rotating tokens with cookie + database sync
- Temporary logins (session-only) also generate a database token with
session_only = 1
- One token per device: existing token for same user-agent is cleaned before new login
- Auto-login from cookie when session expires and
remember_token
is still valid
- Device-friendly session display: OS, browser, and device type parsed from User-Agent
- Current session is visually highlighted ("This browser") and not selectable for logout
- User can revoke specific sessions or logout from all devices via checkboxes
- Session validation includes
session_version
to support forced logout
- Tokens rotate on use โ expiry and value are refreshed when reused
- Logout destroys session, clears cookie, and deletes current token from database
๐ฎ Planned Enhancements
- 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)