Overview
Add an AI-powered chatbot to the portfolio site that answers questions about
my career, projects, and skills using RAG (Retrieval-Augmented Generation).
Stack: FastAPI · ChromaDB · sentence-transformers · Groq API (llama-3.1-8b-instant) · React
Phase 1 — Knowledge base ~1-2 hrs
Deliverable: knowledge/ directory ready to ingest
Phase 2 — Ingest pipeline ~2-3 hrs
Deliverable: chroma_db/ persisted locally, retrieval verified
Phase 3 — FastAPI backend ~3-4 hrs
Deliverable: backend running on localhost:8000, streaming verified
Phase 4 — React chat widget ~3-4 hrs
Deliverable: widget live on local dev, end-to-end chat working
Phase 5 — Deploy ~1-2 hrs
Deliverable: chatbot live on portfolio domain
Notes
- Commit
chroma_db/ to repo (re-run ingest as Dockerfile startup step if it grows)
- Pass last 3 message pairs per request for session memory — no DB needed
- Re-run
ingest.py whenever knowledge base files are updated
Overview
Add an AI-powered chatbot to the portfolio site that answers questions about
my career, projects, and skills using RAG (Retrieval-Augmented Generation).
Stack: FastAPI · ChromaDB · sentence-transformers · Groq API (llama-3.1-8b-instant) · React
Phase 1 — Knowledge base
~1-2 hrsknowledge/directory with 6 markdown files:about.md,experience.md,education.md,projects.md,skills.md,faqs.mdfaqs.mdwith 10–15 recruiter-facing Q&AsDeliverable:
knowledge/directory ready to ingestPhase 2 — Ingest pipeline
~2-3 hrsrequirements.txt(
langchain,sentence-transformers,chromadb,python-dotenv)ingest.py: load markdowns → chunk (400 tok, 50 overlap) → embed → upsert ChromaDBDeliverable:
chroma_db/persisted locally, retrieval verifiedPhase 3 — FastAPI backend
~3-4 hrsmain.pywithPOST /chatendpoint (accepts{message, history[]}, returns SSE)Deliverable: backend running on
localhost:8000, streaming verifiedPhase 4 — React chat widget
~3-4 hrsChatWidget.jsx: floating button → panel toggle, message list, input boxfetch+ReadableStream(token-by-token append)Deliverable: widget live on local dev, end-to-end chat working
Phase 5 — Deploy
~1-2 hrsDockerfileto backend repo (Railway auto-deploys from GitHub)GROQ_API_KEYandALLOWED_ORIGINenv vars on RailwayVITE_API_URLin frontend to Railway URL, redeploy portfolioDeliverable: chatbot live on portfolio domain
Notes
chroma_db/to repo (re-run ingest as Dockerfile startup step if it grows)ingest.pywhenever knowledge base files are updated