Commit graph

38 commits

Author SHA1 Message Date
DJP
d0ae72ea2b Hide keyboard shortcut hints in header 2025-10-01 19:03:53 -04:00
DJP
ab0ad2c30d Add logo, hide deploy button, fix login title
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>
2025-10-01 19:03:27 -04:00
DJP
44b8e7fcfd Fix permission enum case mismatch (lowercase to uppercase) 2025-10-01 18:57:49 -04:00
DJP
030cd2ef30 Add Write+Share permission and voice selection
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>
2025-10-01 18:15:26 -04:00
DJP
ec608b15fa Add background document processing and fix navigation
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>
2025-10-01 18:09:02 -04:00
DJP
673a3f747e Rebrand to Sandbox-NotebookLM and refine UI
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>
2025-10-01 18:04:58 -04:00
DJP
6cdca94608 Add Montserrat typography and refined UI styling
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>
2025-10-01 17:59:33 -04:00
DJP
dc1f27e041 Add custom podcast themes and complete sharing management
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>
2025-10-01 17:56:24 -04:00
DJP
075e568455 Fix shared notebook permissions and access control
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>
2025-10-01 17:51:18 -04:00
DJP
ce09d57cef Add background podcast generation and UX improvements
Features:
- Background podcast generation (navigate away while processing!)
- Podcast status tracking (pending/in_progress/completed/failed)
- Database-backed task queue (no external dependencies)
- Podcast length control with slider (5-30 minutes)
- Fixed podcast delete to update UI immediately
- Collapsible source citations in chat (dropdown with count)
- Real-time status checking for background tasks

Technical:
- Created background_tasks.py module
- Added background_tasks table to database
- Threading-based background execution
- Task status tracking: PENDING, IN_PROGRESS, COMPLETED, FAILED
- Proper database session management in shared notebooks
- Fixed SQLAlchemy DetachedInstanceError in sharing view

UX Improvements:
- "Generate in Background" button instead of blocking
- Status indicator shows when podcast is generating
- "Check Status" refresh button
- Sources collapsed by default with count badge
- Podcast delete shows success message before rerun
- Can navigate away during long-running operations

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-01 17:47:10 -04:00
DJP
b7cd5a58c7 Fix shared notebooks SQLAlchemy session error 2025-10-01 17:39:19 -04:00
DJP
68b12a3143 Add notebook-level synthesis and advanced features
New Features:
- Cross-document synthesis: Analyzes all docs together to find themes
- Cross-document Q&A: Questions that span multiple documents
- Structured podcast outline generation
- Podcast length control (5-30 minutes slider)
- Better visual source indicators with 🔗 badges
- Comparative findings across documents
- Key insights from combined analysis

Technical Changes:
- Created notebook_synthesis.py module
- Added NotebookSynthesis pydantic model
- Added PodcastOutline pydantic model
- Enhanced podcast generation with 3-step process
- Improved source attribution display
- Better visual hierarchy in notebook detail page

User Experience:
- "Generate Cross-Document Analysis" button
- Shows overall summary synthesizing ALL docs
- Displays common themes across documents
- Comparative findings (similarities/differences)
- Cross-document questions for exploration
- Podcast length selector (5, 10, 15, 20, 25, 30 min)
- Inline source citations with better formatting

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-01 17:37:28 -04:00
DJP
b9a1e09904 Add comprehensive README and fix notebook sharing bug 2025-10-01 17:34:34 -04:00
DJP
2292f8a511 Transform NotebookLlaMa to enterprise multi-user NotebookLM clone
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>
2025-10-01 17:28:06 -04:00
Clelia (Astra) Bertelli
a9a0e77f67
Merge pull request #13 from run-llama/TuanaCelik-patch-1
Update README.md
2025-07-08 15:33:50 +02:00
Clelia (Astra) Bertelli
b72f3abb3b
chore: bump https// to https:// 2025-07-08 15:32:13 +02:00
Tuana Çelik
d59962a3ff
Update README.md 2025-07-08 13:33:11 +02:00
Clelia (Astra) Bertelli
d2b54f55da
Merge pull request #11 from nick-galluzzo/fix/readme-add-uv-instructions
Add uv installation instructions to README
2025-07-08 10:47:08 +02:00
Nick Galluzzo
ee62e0b637 Add uv installation instructions to README 2025-07-08 15:26:48 +07:00
Clelia (Astra) Bertelli
08da1b195f
Merge pull request #5 from run-llama/jerryjliu-patch-1
Update README.md with video
2025-07-05 22:49:07 +02:00
Clelia (Astra) Bertelli
c84552a2e5 linting 2025-07-05 22:47:24 +02:00
Jerry Liu
79628e230e
Update README.md with video 2025-07-05 13:06:22 -07:00
Clelia (Astra) Bertelli
faa5d67f5f
bump readme links 2025-06-30 22:39:53 +02:00
Clelia (Astra) Bertelli
da0489d356
Merge pull request #4 from run-llama/clelia/renaming
Renaming to NotebookLlama
2025-06-30 22:34:52 +02:00
Clelia (Astra) Bertelli
e892052b69 uv.lock and pyproject.toml changes 2025-06-30 22:33:37 +02:00
Clelia (Astra) Bertelli
ca9ee1250c Renaming to NotebookLlama 2025-06-30 22:31:22 +02:00
Clelia (Astra) Bertelli
3d54bb422a
Merge pull request #3 from run-llama/clelia/add-observability
Adding observability dashboard
2025-06-29 12:11:29 +02:00
Clelia (Astra) Bertelli
b72424dded typecheck changes 2025-06-29 12:10:03 +02:00
Clelia (Astra) Bertelli
3ed767da23 Adding observability dashboard 2025-06-29 12:01:17 +02:00
Clelia (Astra) Bertelli
f9aad9322b
Merge pull request #1 from run-llama/clelia/adding-document-chat
Adding document chat and moving to a multi-page app
2025-06-28 23:27:22 +02:00
Clelia (Astra) Bertelli
e9ac959a28 Adding document chat and moving to a multi-page app 2025-06-28 23:25:13 +02:00
Clelia (Astra) Bertelli
7ce3d1249b UI + final touches 2025-06-28 22:07:44 +02:00
Clelia (Astra) Bertelli
e0feb0ceec Refactor + workflow 2025-06-28 19:48:54 +02:00
Clelia (Astra) Bertelli
9f95e49463 Refactoring 2025-06-28 16:38:59 +02:00
Clelia (Astra) Bertelli
1e13a08701 Audio utils completed + tests 2025-06-28 12:39:43 +02:00
Clelia (Astra) Bertelli
e1d12c8497 more utils, server and tests 2025-06-28 11:25:08 +02:00
Clelia (Astra) Bertelli
1c947443cd utils functions 2025-06-28 09:36:33 +02:00
Clelia (Astra) Bertelli
3d86713cb3 first commit 2025-06-27 22:47:48 +02:00