UI Updates:
- Changed login page title to "Sandbox-NotebookLM - Login"
- Hidden deploy button in top right (toolbar hidden)
- Added Sandbox-NotebookLM logo to top left header
- Logo is SVG with concentric circles icon
- Logo shows "Sandbox" and "NotebookLM" text
- Montserrat font in logo matches app
CSS Changes:
- [data-testid="stToolbar"] display:none (hides deploy)
- [data-testid="stHeader"] background-image with logo SVG
- Logo positioned 10px from left, centered vertically
- 160px logo size
- Header padding adjusted for logo space
Visual Improvements:
- Cleaner header without deploy button
- Professional branding with logo
- Consistent typography throughout
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Permission System Upgrade:
- Added SHARE permission level to database enum
- Three permission tiers now:
* READ: View and chat only
* WRITE: View, chat, add documents, generate podcasts
* SHARE (Write+Share): All of WRITE + can share with others
- Only owners can grant SHARE permission
- Users with SHARE can add more collaborators
Voice Selection for Podcasts:
- Added 8 popular ElevenLabs voices to choose from
- Speaker 1 (Analytical): Brian, Adam, Charlie, Daniel
- Speaker 2 (Explanatory): Sarah, Bella, Charlotte, Emily
- Voice IDs stored in task parameters
- Passed through to audio generation
- Default: Brian + Sarah (original voices)
Voice Options:
- Brian (Default Male) - nPczCjzI2devNBz1zQrb
- Sarah (Default Female) - Xb7hH8MSUJpSbSDYk0k2
- Adam (Deep Male) - pNInz6obpgDQGcFmaJgB
- Bella (Friendly Female) - EXAVITQu4vr4xnSDxMaL
- Charlie (Casual Male) - IKne3meq5aSn9XLyUdCD
- Charlotte (Professional Female) - XB0fDUnXU5powFXDhCwa
- Daniel (British Male) - onwK4e9ZLuTAKqWW03F9
- Emily (Warm Female) - LcfcDJNUP1GQjkzn1xUU
UI Updates:
- Voice selection dropdowns in podcast generation
- Helpful descriptions for each speaker role
- Permission level shown as "Write + Share" in UI
- Help text explains each permission tier
- Share button visible for users with SHARE permission
Technical:
- Updated audio.py to accept voice parameters
- Updated background_tasks.py to pass voices
- Database enum extended
- Permission checks updated throughout
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Background Document Processing:
- Documents now process in background queue (like podcasts!)
- Upload 10+ PDFs and navigate away immediately
- Each document processes independently (~1 minute each)
- Status tracking for all documents
- Can view processing progress in notebook detail
- Automatic refresh option to check status
Processing Status Display:
- Shows "⏳ X documents currently processing"
- Expandable status list with filename and state
- Icons: ⏳ pending, 🔄 in progress, ✓ completed
- Refresh button to check latest status
- Processing happens in parallel threads
Navigation Fix:
- Fixed CSS to hide Streamlit's auto-generated page list (bottom-left)
- Kept custom navigation at top of sidebar
- Better selector: section[data-testid="stSidebarNav"]
- Custom nav remains visible and functional
Technical:
- Extended background_tasks.py to handle document processing
- Created execute_document_processing_task function
- start_document_processing_background creates tasks
- get_notebook_processing_tasks retrieves status
- Task routing based on task_type
- Proper temp file cleanup in background
User Experience:
- Can upload 20 documents and leave immediately
- No more waiting 20+ minutes on one page
- Processing continues in background
- Come back anytime to check progress
- Much better for large batch uploads
Button Updates:
- "Upload & Process" → "Upload & Process in Background"
- Clear messaging about background processing
- Task IDs shown for tracking
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Rebranding:
- Changed app name from NotebookLlaMa to Sandbox-NotebookLM
- Updated all page titles
- Updated dashboard title and welcome message
UI Improvements:
- Reduced sidebar username size (was too large)
- Changed "Welcome, username!" to just "username" with emoji
- Email shown as caption below username
- Removed redundant bottom-left navigation menu (hidden via CSS)
- Sidebar navigation headers reduced to 14px
- Logout button now full-width for better UX
Typography Refinements:
- Sidebar headers: 16px → 14px
- Navigation items cleaner
- Better visual hierarchy
- More professional appearance
CSS Changes:
- Added [data-testid="stSidebarNav"] display:none to hide duplicate nav
- Reduced sidebar h1/h2/h3 to 14px
- Better spacing in sidebar
- Consistent font weights
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Typography:
- Applied Montserrat font globally across all pages
- Reduced main headers from 44px to 20px
- Subheaders scaled to 18px and 16px
- Body text standardized at 16px
- Source citations reduced to 14px for better readability
- Captions and small text at 13px
Style Improvements:
- Consistent font weights (300-700 range)
- Better line-height for readability (1.3-1.5)
- Reduced spacing for cleaner look
- Styled chat messages for consistency
- Smaller button text (14px)
- Refined expander headers
- Professional color scheme maintained
Files Modified:
- Created styles.py with centralized CSS
- Applied to App.py
- Applied to all 4 notebook pages
- Custom CSS injected via st.markdown
User Experience:
- Cleaner, more professional appearance
- Better visual hierarchy
- Easier to scan and read
- Sources less overwhelming
- Consistent across all pages
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Podcast Enhancements:
- Custom theme/focus field for podcast generation
- Additional instructions textarea for personalized podcasts
- Theme and prompt integrated into outline generation
- Parameters passed through background task system
- Example: "Focus on actionable insights for executives"
Sharing Features:
- Show list of all users notebook is shared with
- Display email and permission level for each
- Add more users to existing shares (incremental)
- Remove users from shares with one click
- Update permissions for existing shares
- "Done" button instead of "Cancel" for better UX
Shared Notebook Improvements:
- Full view access for shared notebooks (all docs, summaries, Q&A)
- Permission-based UI (Read-only vs Write access)
- Read-only users see limited buttons (Chat, Listen to Podcast)
- Write users can add documents and generate podcasts
- Owner badge vs Shared badge in header
- Proper back navigation to Shared Notebooks page
- Fixed "Notebook not found or access denied" error
Access Control:
- Notebook Detail checks ownership OR sharing
- Chat checks ownership OR sharing
- Database validation for share access
- Session state tracks shared status
- Permission level enforced throughout UI
Bug Fixes:
- Fixed shared notebook access in Detail page
- Fixed shared notebook access in Chat page
- Hide edit/delete/share buttons for non-owners
- Hide document remove for read-only users
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Features:
- Shared notebooks now show full detail view (all docs, summaries, Q&A)
- Permission-based access control (Read vs Write)
- Read-only users can view and chat but not edit
- Shared notebook chat now works properly
- Fixed "Notebook not found or access denied" error
Access Control:
- Read permission: View, Chat only
- Write permission: View, Chat, Add Documents, Generate Podcast
- Owner: Full control (View, Chat, Add, Share, Edit, Delete)
UI Improvements:
- Shows "Shared with you (Read-only)" badge for shared notebooks
- Hides edit/delete/share buttons for non-owners
- Hides document remove button for read-only users
- Proper back navigation to Shared Notebooks page
- Access validation in both Detail and Chat pages
Bug Fixes:
- Fixed SQLAlchemy session error in shared notebooks list
- Fixed notebook access check to query database for shares
- Session state properly tracks shared status
- Permission level properly passed between pages
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major Changes:
- Implemented notebook-first architecture (multi-document collections)
- Added user authentication and multi-tenancy
- Created comprehensive database schema (7 tables)
- Built complete notebook management system
- Implemented notebook-level chat across multiple documents
- Added podcast generation from notebooks
- Implemented notebook sharing with permissions
- Fixed MCP server crashes by bypassing for document processing
- Added all enterprise features requested
New Features:
- User login/signup with bcrypt password hashing
- Create/edit/delete notebooks
- Upload multiple PDFs to notebooks
- Add documents to existing notebooks
- Chat across all documents in a notebook
- Generate podcasts from entire notebooks
- Share notebooks with other users
- View shared notebooks
- Persistent chat history per notebook
- Document summaries, Q&A, and highlights
Technical Improvements:
- PostgreSQL database with SQLAlchemy ORM
- Connection pooling and proper cleanup
- Bypassed buggy MCP server for document processing
- Direct LlamaCloud API calls for reliability
- Proper CASCADE deletes
- Session management
- Error handling and logging
Documentation:
- ENTERPRISE_SETUP.md - Setup guide
- IMPLEMENTATION_SUMMARY.md - Technical details
- SIMPLIFIED_PLAN.md - Architecture overview
- CURRENT_STATUS.md - Status and known issues
- FINAL_README.md - User guide
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>