- Implemented strict separation between 'pending' (queued) and 'uploaded' (waiting) states
- Added queue position indicator (Queue #N) for pending jobs
- Fixed React hook dependency bug that caused queue positions to display as #-
The jobScanner was running every 10 seconds and re-enqueueing jobs that
were already in the queue but hadn't started processing yet. This caused
completed files to be re-transcribed when auto-transcribe was enabled.
Changes:
- Removed jobScanner goroutine (10-second polling loop)
- Removed scanPendingJobs function
- Added recoverPendingJobs that runs ONCE at startup to recover
any pending jobs left from previous server runs
- Jobs are now only enqueued when explicitly requested:
- Upload with auto-transcribe enabled
- Manual transcription start
- Server restart recovery (one-time)
- Created WandAdvancedIcon component (Wand2 with + badge)
- Updated AudioFilesTable to use new icon for 'Transcribe (Advanced)'
- Updated SwipeableItem to use new icon in mobile swipe actions
- Makes it clear advanced transcribe is related to regular transcribe
- Created GlobalUploadContext for global upload functionality
- Header now uses context when props not provided
- Upload from Settings/AudioDetail shows toast notifications
- Upload from Dashboard shows progress bar
- All add button options (Quick Transcribe, YouTube, Record, etc.) work everywhere
- Added backdrop-blur-sm to Dialog and AlertDialog overlays
- Fixed dialog flash bug by setting modal default to true
- GetTranscript returns 200 with available=false when transcript not ready
- GetJobExecutionData returns 200 with available=false when no execution
- GetJobLogs returns JSON with available=false when no logs exist
- Updated frontend hooks to handle new response format with available field
- Added .gitignore entries for prompt.txt and .agent folder
- Add Transfer-Encoding chunked and X-Accel-Buffering headers to chat and summarize handlers
- Start response immediately with c.Status(http.StatusOK)
- Fix SummaryDialog: wider desktop, reading font, no inner border, darker text
- Add generating animation while waiting for first LLM chunk
- Add real-time thinking message parsing with streaming cursor
- Implement ThinkingBlock component with auto-expand during generation
- Redesign chat cards following Scriberr design system (dual-shadow, micro-borders)
- Add intelligent context trimming with auto-removal of old messages
- Display context usage badge with warning at 80%+
- Add context headers (X-Context-Used, X-Context-Limit, X-Messages-Trimmed)
- Fix Ollama system message handling by embedding in first user message
- Add transcript loading fallback mechanism
- Add SwipeableItem component with framer-motion physics animations
- Implement iOS-style swipe gesture to reveal Transcribe/Delete actions
- Add first-visit discovery nudge animation (localStorage)
- Integrate with AudioFilesTable, replace mobile kebab menu
- Add robust gesture coordination: swipe vs long-press vs click
- Cancel long-press on finger movement (10px threshold)
- Suppress clicks for 150ms after swipe ends
- Track swipe state via onSwipeStateChange callback
- Replace status pills with icons in Audio Detail view
- Make settings changes (summary profiles) reactive
- Update karaoke highlight to use text accent color
- Remove transcription card styling on mobile
- Remove Scriberr logo from chat panel
- Initialize visualizer with static wave pattern to avoid blank canvas
- Persist frequency data on pause instead of clearing canvas
- Ensure animation loop handles static state rendering
- Switch transcript font to Literata with improved typography
- Fix audio icon hover visibility in file list
- Implement CSS Highlight API for high-performance karaoke word highlighting
- Update text colors for better contrast
- **Resizer**: Increased hit area for easier grabbing; added visual hover state.
- **Split View**: Removed shadow causing visual gap; reduced to single pixel border.
- **Chat Button**: Consolidated into single responsive button (hidden text on mobile).
- Updated ChatInterface:
- Replaced 'Bot' icon with 'Sparkles' to better represent AI service.
- Removed 'Scriberr AI' text label for cleaner look.
- Applied 'lifted' style (shadow-sm) to message bubbles.
- Refined input area and Send button with brand colors.
- Updated ChatSessionsSidebar:
- Implemented 'lifted' card style as default state.
- Simplified hover effects to maintain position (no translation).
- Enhanced active state visibility.
- Integrated chat into AudioDetailView as a resizable split-screen side panel.
- Added ChatSidePanel for managing chat sessions and mobile overlay.
- Removed standalone ChatPage and associated routes.
- Removed 'Open Chat' action from Dashboard; added 'Chat' button to Audio Detail header.
- Refactored ScriberrLogo to export ScriberrIcon for use in the chat header.
- Adjusted global Header to align with main content in split view.
- Updated AudioDetailView layout validation and cleanup.
- Switch primary interface font to 'Outfit' for a premium aesthetic
- Increase font sizes in AudioFilesTable (headers text-sm, cells text-base) to compensate for Outfit's x-height
- Restore bold font weights globally for clearer visual hierarchy
- Update index.html and index.css for optimal font loading and variable definitions
- Fix checkbox padding in audio files table
- Improve bulk actions toolbar responsiveness on mobile
- Update tooltip font sizes for better readability
- Dashboard: restored spacing between header and table, updated margins
- ExecutionDialog: implemented curated parameter display based on model
- ExecutionDialog: optimized metric cards and timestamp layout for mobile
- implemented backwards search to find the LATEST started segment
- prevents highlighter from getting stuck on the first segment's last word
- ensures robust highlighting when switching views or seeking