An AI-powered HR assistant demo that matches candidates to jobs using vector search + LLM reasoning, uploads/parses resumes, and automates meeting emails via AgentMail + ngrok webhooks. Includes a React UI for interaction.
Tech stack: FastAPI + LangChain + Couchbase + Agent Catalog (backend), React + Vite (frontend).
- Docker installed
- Couchbase cluster (local or Capella)
- Capella AI Services, OpenAI, or Gemini API keys (for AI)
- AgentMail free account (for emails)
- ngrok free account (for webhooks)
- Sign up at ngrok.com (free tier: 3 tunnels, 1GB/month).
- Get your authtoken from the dashboard.
- Set
NGROK_AUTHTOKEN=your-authtokenin.env(ngrok runs inside Docker for webhooks).
- Sign up at agentmail.to (free tier: 1 inbox, 100 emails/month).
- Get your API key from the dashboard.
- Create an inbox (e.g.,
hrbot@agentmail.to). - Set a webhook in AgentMail to your ngrok URL (e.g.,
https://abc123.ngrok-free.app/webhook/agentmail).
Unite the example files into a single .env in the root:
cp backend/.env.render.example .env
# Add frontend vars from frontend/.env.example
echo "VITE_API_BASE_URL=http://localhost:8000" >> .envEdit .env with these settings (based on your setup):
-
Couchbase:
CB_CONN_STRING=couchbases://your-cluster.cloud.couchbase.com(your Capella connection string)CB_USERNAME=your-username(e.g.,hr-bot)CB_PASSWORD=your-password(e.g.,_LG8habcd#SZ)CB_BUCKET=hrdemo(bucket name)CB_SCOPE=agentc_data(scope)CB_COLLECTION=candidates(collection)CB_INDEX=candidates_index(search index name)
-
Capella AI (preferred):
CAPELLA_API_ENDPOINT=https://your-endpoint.ai.cloud.couchbase.com(from Capella AI dashboard)CAPELLA_API_LLM_KEY=your-llm-api-key(from Capella)CAPELLA_API_LLM_MODEL=deepseek-ai/deepseek-r1-distill-llama-8b(model name)CAPELLA_API_EMBEDDINGS_KEY=your-embeddings-api-key(from Capella)CAPELLA_API_EMBEDDING_MODEL=nvidia/llama-3.2-nv-embedqa-1b-v2(embedding model)
-
OpenAI (fallback):
OPENAI_API_KEY=sk-proj-...(your OpenAI key)OPENAI_MODEL=gpt-4o(model)
-
AgentMail:
AGENTMAIL_API_KEY=am_us_...(from AgentMail dashboard)INBOX_USERNAME=hrbot(inbox name, e.g.,hrbot)
-
ngrok:
NGROK_AUTHTOKEN=1f5g6Xx...(from ngrok dashboard)WEBHOOK_DOMAIN=abc123.ngrok-free.app(your ngrok URL without https://)
-
Other:
SKIP_INDEX_CREATION=true(set to true if creating vector index manually in Couchbase UI)CBCERT="-----BEGIN CERTIFICATE-----\n..."(your Couchbase root cert, from Capella dashboard)
Build the image (replace https://... with your ngrok URL for the frontend):
docker build . -t local-hr-agent --build-arg VITE_API_BASE_URL=https://abc123.ngrok-free.appRun with your .env file:
docker run --name myHrAgent --env-file .env -p 8000:8000 local-hr-agentVisit http://localhost:8000 in your browser.
- AI not working: Check Capella/OpenAI keys. Set
SKIP_INDEX_CREATION=trueand createcandidates_indexmanually in Couchbase usingbackend/agentcatalog_index.json. - Couchbase errors: Verify connection string and cert. Ensure bucket/scope/collection exist.
- Emails not sending: Confirm AgentMail key and inbox. Check ngrok webhook is set correctly.
backend/.env.render.example: Backend env templatefrontend/.env.example: Frontend env templatebackend/agentcatalog_index.json: Vector index definition