Commit graph

5 commits

Author SHA1 Message Date
DJP
009fd9959b Fix button colors and document critical data leakage issue
Button Color Fix:
- Changed CSS selector to target data-testid="baseButton-primary"
- Primary buttons now yellow (#FFC407) with black text
- Hover state: darker yellow (#E6B006)
- Delete/Remove buttons stay red for safety
- Better font-weight (600) for buttons

Critical Issue Documented:
- Created CRITICAL_ISSUE.md documenting data leakage
- ALL users share ONE LlamaCloud pipeline
- Chat queries return documents from ALL notebooks (not just user's)
- SEVERE privacy/security issue
- Must be fixed before production use

Issue Details:
- utils.py uses single PIPELINE_ID from .env
- All documents added to same index
- query_index() searches entire shared index
- No user/notebook isolation in queries

Recommended Fix:
- Per-notebook pipelines (best for NotebookLM model)
- Store pipeline_id in notebooks table
- Create pipeline when notebook created
- Query only that notebook's pipeline
- Complete data isolation

Background Queue Status:
- Document processing IS using background queue ✓
- Some tasks failing with "Event loop is closed"
- Need to investigate async/threading issues

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-01 19:20:32 -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
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
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
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