How karlcyrus/paperbrain-rag-llm-pipeline works
PaperBrain lets users upload PDFs, TXT, and DOCX files, then ask single- or multi-document questions and receive streaming answers with source citations. Uploads are parsed, chunked, embedded, and stored for vector search; chat embeds each question, retrieves matching passages, and sends a grounded prompt to Gemini. The README documents persistent chat history, document management, authentication, and theme support. Unsampled subsystems are included where documented; their internal wiring is not inferred.
Main entry points: multi/page.tsx Multi-Document Chat · [documentId]/page.tsx Document Chat · upload/route.ts Upload Endpoint · chat/route.ts RAG Chat Endpoint
Components 25
Product UI
- Sign-in and Signup
src/app/signup/page.tsx - Document Dashboard
src/app/dashboard/page.tsx - Upload Zone
src/components/UploadZone.tsx - Document Chat
src/app/chat/[documentId]/page.tsx - Multi-Document Chat
src/app/chat/multi/page.tsx - Chat Input
src/components/ChatInput.tsx - Chat Messages
src/components/ChatMessage.tsx - Source Citations
src/components/SourceCitation.tsx - Navigation and Logout
src/components/Navbar.tsx - Theme Controls
src/components/ThemeProvider.tsx - Document Card
src/components/DocumentCard.tsx - Empty State
src/components/EmptyState.tsx
Document Ingestion
- Upload Endpoint
src/app/api/upload/route.ts - File Parser
src/lib/parser.ts - Text Chunker
src/lib/chunker.ts
Retrieval and Answers
- Embedding API
src/lib/gemini.ts - RAG Chat Endpoint
src/app/api/chat/route.ts - Gemini Generation
src/lib/gemini.ts
Identity and Storage
- Auth Callback
src/app/auth/callback/route.ts - Document and Chunk Store
- Document List and Delete
src/app/api/documents/route.ts - Browser Supabase Client
src/lib/supabase.ts - Server Supabase Client
src/lib/supabase-server.ts - Auth Proxy
src/proxy.ts
Other components
- User
Connections 39
- User → Sign-in and Signup: signs in
README.md - Sign-in and Signup → Browser Supabase Client: authenticates
src/app/signup/page.tsx - Auth Callback → Server Supabase Client: completes auth
- User → Document Dashboard: manages documents
README.md - Document Dashboard → Upload Zone: renders
src/app/dashboard/page.tsx - Upload Zone → Upload Endpoint: posts file
src/components/UploadZone.tsx - Upload Endpoint → Server Supabase Client: authenticates and stores
src/app/api/upload/route.ts - Upload Endpoint → File Parser: parses file
src/app/api/upload/route.ts - Upload Endpoint → Text Chunker: chunks text
src/app/api/upload/route.ts - Upload Endpoint → Embedding API: embeds chunks
src/app/api/upload/route.ts - Upload Endpoint → Document and Chunk Store: writes document and chunks
src/app/api/upload/route.ts - User → Document Chat: asks questions
README.md - User → Multi-Document Chat: asks across documents
README.md - Document Chat → Chat Input: renders
src/app/chat/[documentId]/page.tsx - Multi-Document Chat → Chat Input: renders
src/app/chat/multi/page.tsx - Chat Input → Document Chat: submits question
src/components/ChatInput.tsx - Chat Input → Multi-Document Chat: submits question
src/components/ChatInput.tsx - Document Chat → RAG Chat Endpoint: posts question
- Multi-Document Chat → RAG Chat Endpoint: posts question and IDs
src/app/chat/multi/page.tsx - RAG Chat Endpoint → Server Supabase Client: authenticates and searches
src/app/api/chat/route.ts - RAG Chat Endpoint → Embedding API: embeds question
src/app/api/chat/route.ts - RAG Chat Endpoint → Document and Chunk Store: retrieves matching chunks
README.md - RAG Chat Endpoint → Gemini Generation: generates stream
src/app/api/chat/route.ts - Document Chat → Browser Supabase Client: loads user session
src/app/chat/[documentId]/page.tsx - Multi-Document Chat → Browser Supabase Client: loads user session
src/app/chat/multi/page.tsx - Multi-Document Chat → Document List and Delete: loads document names
src/app/chat/multi/page.tsx - Document Dashboard → Document List and Delete: lists documents
src/app/dashboard/page.tsx - Document List and Delete → Server Supabase Client: reads and deletes records
src/app/api/documents/route.ts - Document Chat → Chat Messages: renders messages
src/app/chat/[documentId]/page.tsx - Multi-Document Chat → Chat Messages: renders messages
src/app/chat/multi/page.tsx - Document Chat → Source Citations: renders sources
src/app/chat/[documentId]/page.tsx - Multi-Document Chat → Source Citations: renders sources
src/app/chat/multi/page.tsx - Document Dashboard → Document Card: renders documents
src/app/dashboard/page.tsx - Document Dashboard → Empty State: renders empty view
src/app/dashboard/page.tsx - Multi-Document Chat → Empty State: renders empty view
src/app/chat/multi/page.tsx - Navigation and Logout → Browser Supabase Client: signs out
src/components/Navbar.tsx - Navigation and Logout → Theme Controls: provides theme control
- Auth Proxy → Server Supabase Client: refreshes sessions
- User → Navigation and Logout: navigates and toggles theme
README.md