Build an agentic RAG application from scratch by collaborating with Claude Code. Follow along with our video series using the docs in this repo.
Watch the full video on YouTube
A hands-on course where you collaborate with Claude Code to build a full-featured RAG system. You're not the one writing code—Claude is. Your job is to guide it, understand what you're building, and course-correct when needed.
You don't need to know how to code. You do need to be technically minded and willing to learn about APIs, databases, and system architecture.
- Chat interface with threaded conversations, streaming, tool calls, and subagent reasoning
- Document ingestion with drag-and-drop upload, multi-format parsing, delete controls, and processing status
- Full RAG pipeline: chunking, embedding, hybrid search, reranking
- Agentic patterns: text-to-SQL, web search, subagents with isolated context
| Layer | Tech |
|---|---|
| Frontend | React, TypeScript, Tailwind, shadcn/ui, Vite |
| Backend | Python, FastAPI |
| Database | Supabase (Postgres + pgvector + Auth + Storage) |
| Doc Processing | Docling + native text fallbacks |
| AI Models | Local (LM Studio) or Cloud (OpenAI, OpenRouter) |
| Observability | LangSmith |
- App Shell — Auth, chat UI, managed RAG with OpenAI Responses API
- BYO Retrieval + Memory — Ingestion, pgvector, switch to generic completions API
- Record Manager — Content hashing, deduplication
- Metadata Extraction — LLM-extracted metadata, filtered retrieval
- Multi-Format Support — PDF, DOCX, HTML, Markdown via Docling
- Hybrid Search & Reranking — Keyword + vector search, RRF, reranking
- Additional Tools — Text-to-SQL, web search fallback
- Subagents — Isolated context, document analysis delegation
- Clone this repo
- Install Claude Code
- Open in your IDE (Cursor, VS Code, etc.)
- Run
claudein the terminal - Use the
/onboardcommand to get started
- PRD.md — What to build (the 8 modules in detail)
- CLAUDE.md — Context for Claude Code
- PROGRESS.md — Track your build progress
The repository now includes a local Module 1 implementation scaffold:
backend/FastAPI API with JWT auth, multi-format document ingestion, document deletion, pgvector retrieval, SSE chat streaming, realtime ingestion status streams, and optional LangSmith tracingfrontend/Vite + React client with auth, separate Chat/Ingestion interfaces, drag-and-drop upload, live document status updates, conversation list, and grounded chat UIdocker-compose.ymlfor local PostgreSQL + pgvector.env.exampleplusfrontend/.env.examplefor environment bootstrap- Module 7 chat orchestration that can combine document retrieval, workspace text-to-SQL over a user-scoped SQLite snapshot, and optional web-search fallback with source attribution
- OCR fallback for scanned PDFs through Docling when the initial PDF extraction returns too little text
- Database bootstrap now provisions a non-bypass application role and the app connections
SET ROLEinto it so the Postgres RLS policies are actually enforced during runtime
- Copy
.env.exampleto.envand set your local LLM endpoint values. Module 7 notes:SQL_TOOL_ROW_LIMITcontrols how many structured rows are passed into the final answer prompt.WEB_SEARCH_ENABLEDdefaults totrue; set it tofalseif you want to disable outbound web fallback.WEB_SEARCH_PROVIDER=duckduckgo_htmlworks without an API key.WEB_SEARCH_PROVIDER=tavilyrequiresWEB_SEARCH_API_KEY. OCR notes:PDF_OCR_ENABLED=trueenables automatic OCR fallback for low-text PDFs.PDF_OCR_ENGINE=tesseract_cliexpects thetesseractCLI to be installed and available on your PATH.- For French scanned PDFs,
PDF_OCR_LANGUAGES=fra,engis a reasonable starting point. - If you switch to
easyocr, use engine-appropriate language codes such asfr,en.
- Start PostgreSQL with
docker compose up -d. - Create a backend venv, install
backend/requirements.txtfor Docling-backed parsing support, then runpython backend/scripts/init_db.py. This applies the schema migrations and provisions the non-bypassrag_appdatabase role used for RLS-enforced app traffic. - Start the backend from
backend/withuvicorn app.main:app --reload. - Install frontend dependencies in
frontend/and runnpm run dev.
Use this local account for manual smoke testing once the app is running:
- Email:
test@test.com - Password:
Test123456!
Current confirmed local test password: Test123456!
Python note: the current OpenAI SDK emits an upstream compatibility warning on Python 3.14, so Python 3.12 or 3.13 is the safer local target if you want a quieter runtime.
If you want to connect with hundreds of builders creating production-grade AI and RAG systems, join us in The AI Automators community. Share your progress, get help when you're stuck, and see what others are building.