How gagancreates/notesai works
NotesAI turns lecture PDFs into structured study notes. A student uploads a PDF; the API stores its document and job records, then background processing extracts and chunks text, embeds it, and indexes it. The student can check progress and request note generation; the RAG engine retrieves chunks, creates section notes and a summary with Claude, and persists the result for retrieval and presentation. The README also describes quiz-oriented notes and polished typography. Frontend components and some service implementations were not excerpted, so their internal interactions are shown only where documented or indexed.
Main entry points: processing_pipeline.py PDF processing · database.py Database client · dashboard.tsx Study dashboard · main.py FastAPI application
Components 23
Student interface
- Notes workspace
frontend/app/page.tsx - Study dashboard
frontend/components/dashboard.tsx - Note navigation
frontend/components/Sidebar.tsx - UI primitives
frontend/components/ui.tsx - API client
frontend/lib/api.ts
API workflow
- FastAPI application
backend/app/main.py - PDF upload route
backend/app/api/routes/upload.py - Progress route
backend/app/api/routes/status.py - Notes routes
backend/app/api/routes/notes.py - API schemas
backend/app/models/schemas.py - Settings
backend/app/core/config.py
PDF ingestion
- PDF processing
backend/app/services/processing_pipeline.py - PDF extraction
backend/app/services/pdf_processor.py - Text embeddings
backend/app/services/embeddings.py - OpenAI embeddings
Note generation
- RAG note engine
backend/app/core/rag.py - Claude generation
backend/app/services/claude_client.py - Anthropic Claude
Persistence
- Vector index client
backend/app/services/pinecone_client.py - Database client
backend/app/core/database.py - Supabase records
- Pinecone vectors
Other components
- Student
Connections 29
- Student → Notes workspace: uses
README.md - Notes workspace → Study dashboard: renders
frontend/app/page.tsx - Study dashboard → Note navigation: renders
frontend/components/dashboard.tsx - Study dashboard → UI primitives: uses
frontend/components/dashboard.tsx - Note navigation → UI primitives: uses
frontend/components/Sidebar.tsx - Study dashboard → API client: requests
- API client → FastAPI application: calls API
- FastAPI application → PDF upload route: registers
backend/app/main.py - FastAPI application → Progress route: registers
backend/app/main.py - FastAPI application → Notes routes: registers
backend/app/main.py - PDF upload route → API schemas: validates response
backend/app/api/routes/upload.py - Progress route → API schemas: validates response
backend/app/api/routes/status.py - Notes routes → API schemas: validates response
backend/app/api/routes/notes.py - PDF upload route → PDF processing: schedules
backend/app/api/routes/upload.py - PDF upload route → Database client: creates records
backend/app/api/routes/upload.py - PDF processing → PDF extraction: extracts chunks
backend/app/services/processing_pipeline.py - PDF processing → Text embeddings: embeds chunks
backend/app/services/processing_pipeline.py - PDF processing → Vector index client: upserts vectors
backend/app/services/processing_pipeline.py - PDF processing → Database client: updates status
backend/app/services/processing_pipeline.py - Text embeddings → OpenAI embeddings: creates embeddings
README.md - Vector index client → Pinecone vectors: stores vectors
backend/app/services/pinecone_client.py - Progress route → Database client: reads status
backend/app/api/routes/status.py - Notes routes → Database client: reads and writes
backend/app/api/routes/notes.py - Notes routes → RAG note engine: runs generation
backend/app/api/routes/notes.py - RAG note engine → Vector index client: retrieves chunks
backend/app/core/rag.py - RAG note engine → Claude generation: generates sections
backend/app/core/rag.py - Claude generation → Anthropic Claude: requests completion
README.md - Database client → Supabase records: accesses records
backend/app/core/database.py - Settings → Supabase records: configures access