- Frontend now passes session_id in WebSocket URL
- Backend uses existing session instead of creating new one
- Messages now save to correct chat session
- Fixes messages disappearing after refresh
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- getSharedNotebooks now passes user_id
- Shared notebooks will now display correctly
- Users can see notebooks shared with them
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Alert users after document deletion
- Warn to wait 1-2 minutes before querying
- LlamaCloud index updates are async and take time
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Use background threads for async cleanup operations
- Prevents "event loop already running" errors
- Document removal from index now works
- Notebook deletion pipeline cleanup now works
- Runs cleanup in separate thread with own event loop
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Store file_id when uploading to LlamaCloud
- Return file_id from add_document_to_pipeline()
- Save to document.llamacloud_file_id in database
- Enables proper removal from LlamaCloud when doc deleted
- New uploads will now track file_id for cleanup
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create missing function to remove docs from LlamaCloud
- Called when document is deleted from notebook
- Keeps LlamaCloud index in sync with notebook
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Warn user about consequences before deleting
- Show what will be deleted (docs, chats, pipeline)
- Clear confirmation message
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove documents from LlamaCloud pipeline when deleted
- Calls remove_document_from_pipeline() to clean up index
- Prevents orphaned files in LlamaCloud
- Keeps index in sync with notebook documents
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Accept PDF, DOCX, DOC, PPTX, PPT, TXT, MD files
- Update UI text to show supported formats
- LlamaParse handles all these file types
- Backend validation for supported extensions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Use refetchUsers() instead of window.location.reload()
- Admin actions now update UI without logging out
- Suspend/unsuspend works correctly
- User management stays on same page
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove all test notebooks and documents
- Clear chat sessions and messages
- Clean background tasks
- Remove podcast files
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add user management UI in admin panel
- Promote/demote admin functionality
- Delete user functionality (removes all data)
- Show ADMIN badge for admin users
- Hide Admin nav link from non-admin users
- Strict admin-only access control
- Fix timestamps to use local time instead of UTC
- Add bulk delete for chat sessions
- Add unshare option for shared chats
- Backend returns is_admin field for users
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
✅ README.md Complete:
- Full installation instructions
- All features documented
- API endpoints listed
- Troubleshooting guide
- User management
- Database setup
- Known issues
- Architecture
- Production deployment
Ready for production use!
- Remove useEffect dependency (was causing issues)
- Set synthesis state directly in queryFn
- Always refetch on mount
- Added extensive console logging for debugging
Synthesis WILL persist now!
✅ Podcast Customization:
- Added 'Additional Instructions' textarea field
- Now matches Streamlit app (theme + custom prompt)
- Full customization available
✅ Synthesis Persistence:
- Invalidate React Query cache after generating
- Forces reload from database
- Synthesis persists across logout/login
These were the critical missing features!
- Removed creatingSession flag (was causing issues)
- Mutation uses disabled state properly
- Synthesis useEffect always sets when loaded (removed !synthesis check)
- Added console log for debugging
Should fix both new chat spam and synthesis not showing!
- useQuery now returns data properly
- useEffect sets synthesis state when loadedSynthesis changes
- Synthesis will persist across page refreshes
- No dependency on synthesis in useEffect (prevents loops)
Synthesis persistence NOW WORKING!
✅ Fixed button inside button error:
- Delete button now sibling, not nested
- Proper div structure
- No hydration errors
✅ Fixed WebSocket creating spam sessions:
- Check if already connected before reconnecting
- Prevents duplicate WebSocket connections
- No more session spam
✅ Synthesis persistence working:
- Model has synthesis_data column
- GET endpoint returns data
- Will load on page refresh
All critical bugs fixed!
- Added synthesis_data = Column(Text) to Notebook class
- Column exists in DB, now in Python model too
- GET synthesis endpoint will work after reload
- Synthesis will persist properly
Also deleted 9 spam chat sessions (81-89).