Tour the repo
The repo is small on purpose. One file per responsibility, no framework cleverness, no ORM. You will touch every file in the course.
file tree
bash
rbac-rag-chatbot/
├── app.py # Gradio UI: login, chat, admin tabs
├── config.py # Env-driven config, paths, roles
├── user_auth.py # PBKDF2 hashing, sessions, lockout
├── vector_store.py # ChromaDB per-role collections
├── rag_chat.py # Role-aware prompt + OpenRouter call
├── rate_limiter.py # Sliding-window per-username
├── sample_data.py # Seed docs for finance / engineering / admin
└── utils/
└── llm_provider.py # Thin OpenRouter wrapper
One file per layer of the pipeline we drew. You can read the whole app in an evening.
How the files talk to each other
app.py is the only place state lives. Every other file is a stateless module the UI calls into.
Matching exercise: Which file owns what
Loading practice…