{"id":31679291,"url":"https://github.com/sujal-thakkar/hr-query-chatbot","last_synced_at":"2026-04-29T23:02:07.266Z","repository":{"id":309008466,"uuid":"1034857858","full_name":"sujal-thakkar/hr-query-chatbot","owner":"sujal-thakkar","description":"An intelligent HR assistant powered by Google Gemini AI, enabling natural language queries for candidate search, employee data analysis, and semantic matching","archived":false,"fork":false,"pushed_at":"2025-08-31T13:17:13.000Z","size":202,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-08T06:59:41.884Z","etag":null,"topics":["ai","chatbot","fastapi","gemini-api","hr","python","rag","streamlit"],"latest_commit_sha":null,"homepage":"https://frontend-4phx.onrender.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sujal-thakkar.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-09T05:54:58.000Z","updated_at":"2025-08-31T13:17:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"bca2c83f-d5c4-46c2-9c29-29f4fe46098a","html_url":"https://github.com/sujal-thakkar/hr-query-chatbot","commit_stats":null,"previous_names":["sujal-thakkar/hr-query-chatbot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sujal-thakkar/hr-query-chatbot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sujal-thakkar%2Fhr-query-chatbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sujal-thakkar%2Fhr-query-chatbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sujal-thakkar%2Fhr-query-chatbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sujal-thakkar%2Fhr-query-chatbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sujal-thakkar","download_url":"https://codeload.github.com/sujal-thakkar/hr-query-chatbot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sujal-thakkar%2Fhr-query-chatbot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32447312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"ssl_error","status_checked_at":"2026-04-29T22:10:49.234Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","chatbot","fastapi","gemini-api","hr","python","rag","streamlit"],"created_at":"2025-10-08T06:58:20.394Z","updated_at":"2026-04-29T23:02:07.230Z","avatar_url":"https://github.com/sujal-thakkar.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HR Query Chatbot\n\n[![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](https://choosealicense.com/licenses/mit/)\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\n[![FastAPI](https://img.shields.io/badge/FastAPI-0.104+-green.svg)](https://fastapi.tiangolo.com/)\n[![Gemini API](https://img.shields.io/badge/Gemini%20API-2.5--flash-blue.svg)](https://ai.google.dev/)\n\nAn intelligent HR assistant powered by **Google Gemini AI** that helps HR teams find the perfect candidates using natural language queries. The system combines semantic search with AI-generated insights to match candidates based on skills, experience, and project history.\n\n## What's New (v2+ Enhancements)\n\nRecent improvements (reflected in code, newly documented here):\n\n- SQLite persistence layer with automatic one-time seeding from `dataset/employees.json`\n- Smart seeding guarded by `meta` table sentinel (`key='seeded'`)\n- Optional Redis cache (query + AI summary) with `CACHE_BACKEND=auto|redis|memory`\n- Prometheus metrics at `/metrics` (counters + latency histogram)\n- Request ID middleware adds `X-Request-ID` header to every response\n- Detailed RAG diagnostics endpoint `/system/rag-status`\n- Debug dataset endpoint `/debug/employees` (truncated preview)\n- Configurable per-endpoint rate limits via environment variables (SlowAPI)\n- Pluggable embedding \u0026 FAISS vector index toggles (`FAISS_ENABLED`)\n- Safer chat input validation \u0026 basic XSS guard\n- Multi-provider AI client fallback logic (`ai_client.py`)\n\n\u003e These make the project more production-ready (observability, resilience, persistence) while retaining simple local setup.\n\n## Features\n\n### **Intelligent Search**\n- **Semantic Search**: Powered by Gemini embeddings for context-aware candidate matching\n- **Natural Language Queries**: Ask questions like \"Find someone with ML experience for healthcare\"\n- **Multi-factor Scoring**: Combines skill matching, experience, and domain relevance\n\n### **AI-Powered Insights**\n- **Gemini 2.5 Flash**: Lightning-fast AI responses with detailed candidate analysis\n- **Personalized Recommendations**: AI explains why each candidate is a perfect fit\n- **Conversational Interface**: Natural, recruiter-like responses\n\n### **Enterprise-Ready**\n- **Rate Limiting**: Configurable API rate limits for production use\n- **Input Validation**: XSS protection and secure input handling\n- **Error Handling**: Graceful fallbacks and detailed error reporting\n- **Health Monitoring**: Comprehensive system health endpoints\n\n### **Advanced Analytics**\n- **Match Confidence**: AI-calculated confidence scores for each match\n- **Detailed Reasoning**: Explains why candidates match your requirements\n- **Performance Metrics**: Track search accuracy and response times\n\n## Architecture\n\n```mermaid\ngraph TB\n    A[👤 User] --\u003e B[🎨 Streamlit Frontend]\n    B --\u003e C[⚡ FastAPI Backend]\n    C --\u003e D[🧠 Gemini AI Client]\n    C --\u003e E[🔍 RAG System]\n    E --\u003e F[📊 Gemini Embeddings]\n    E --\u003e G[👥 Employee Dataset]\n    D --\u003e H[🤖 Gemini 2.5 Flash]\n    \n    style A fill:#e1f5fe,color:#0d1117\n    style B fill:#f3e5f5,color:#0d1117\n    style C fill:#e8f5e8,color:#0d1117\n    style D fill:#fff3e0,color:#0d1117\n    style E fill:#fce4ec,color:#0d1117\n    style F fill:#f1f8e9,color:#0d1117\n    style G fill:#e3f2fd,color:#0d1117\n    style H fill:#fff8e1,color:#0d1117\n```\n\n### 🔧 **Core Components**\n\n- **🎨 Streamlit Frontend**: Interactive chat interface with real-time responses\n- **⚡ FastAPI Backend**: High-performance async API with automatic documentation\n- **🧠 AI Engine**: Google Gemini 2.5 Flash for intelligent candidate analysis\n- **🔍 RAG System**: Retrieval-Augmented Generation with semantic search\n- **📊 Embeddings**: Gemini embeddings for context-aware similarity matching\n- **👥 Data Layer**: Structured employee profiles with skills and projects\n\n### �️ Data Storage \u0026 Caching\n\n| Layer | Default | Notes |\n|-------|---------|-------|\n| Employee records | SQLite (`/app/data/employees.db`) | Auto-created \u0026 seeded if empty |\n| Seed source | `dataset/employees.json` | Used only when DB empty \u0026 not yet seeded |\n| Query / AI summary cache | Memory or Redis | `CACHE_BACKEND` + `REDIS_URL` control selection |\n| Embedding cache | Local files | `EMBEDDING_CACHE_DIR` + file names configurable |\n| Vector index | FAISS (optional) | Enable with `FAISS_ENABLED=true` |\n\nInspect DB (Docker):\n```bash\ndocker compose exec backend sh -c \"sqlite3 /app/data/employees.db 'SELECT COUNT(*) FROM employees;'\"\n```\n\nForce re-seed (dev): delete the DB file or run `DELETE FROM meta WHERE key='seeded';` then restart.\n\n## �🚀 Quick Start\n\n### Prerequisites\n- Python 3.8 or higher\n- [Google Gemini API key](https://ai.google.dev/) (free tier available)\n\n### 1️⃣ **Clone \u0026 Setup**\n```bash\ngit clone https://github.com/your-username/hr-query-chatbot.git\ncd hr-query-chatbot\npip install -r requirements.txt\n```\n\n### 2️⃣ **Configure Environment**\n```bash\ncp .env.example .env\n# Edit .env and add your Gemini API key:\n# GEMINI_API_KEY=your_api_key_here\n```\n\n### 3️⃣ **Start the Backend**\n```bash\npython backend/main.py\n```\nThe API will be available at `http://localhost:8000`\n\n### 4️⃣ **Launch the Frontend**\n```bash\nstreamlit run frontend/app.py\n```\nOpen `http://localhost:8501` in your browser\n\n## 💬 Usage Examples\n\n### Natural Language Queries\n```\n\"Find someone with machine learning experience for a healthcare project\"\n\"I need a Python developer with 5+ years experience\"\n\"Who has worked on mobile apps and is currently available?\"\n\"Find candidates with both React and Node.js skills\"\n```\n\n### API Endpoints\n```bash\n# Health check\ncurl http://localhost:8000/health\n\n# Chat query\ncurl -X POST http://localhost:8000/chat \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"Find ML engineers\", \"top_k\": 3}'\n\n# Direct search\ncurl \"http://localhost:8000/employees/search?skill=Python\u0026min_experience=3\"\n\n# RAG status diagnostics\ncurl http://localhost:8000/system/rag-status\n\n# Prometheus metrics\ncurl http://localhost:8000/metrics\n\n# Debug (preview first 3 employees)\ncurl http://localhost:8000/debug/employees\n```\n## 🔧 Development\n\n### 📁 **Project Structure**\n```\nhr-query-chatbot/\n├── 🎨 frontend/\n│   └── app.py                  # Streamlit chat interface\n├── ⚡ backend/\n│   ├── main.py                 # FastAPI server \u0026 endpoints\n│   ├── ai_client.py            # Multi-AI client manager\n│   ├── gemini_rag.py           # Gemini-powered RAG system\n│   ├── query_processor.py      # Query enhancement\n│   └── shared_models.py        # Data models\n├── 🧪 tests/\n│   ├── test_enhanced_system.py # Complete system tests\n│   ├── test_gemini_implementation.py # AI integration tests\n│   └── test_security.py        # Security \u0026 validation tests\n├── 📊 dataset/\n│   └── employees.json          # Employee database\n└── 📝 docs/                    # Documentation files\n```\n\n### 🧪 **Testing**\n```bash\n# Run all system tests\ncd tests\npython test_enhanced_system.py\n\n# Test AI integration\npython test_gemini_implementation.py\n\n# Test security features\npython test_security.py\n\n# Quick health check\npython test_detailed_flow.py\n```\n\n### 🔍 **API Documentation**\n\n#### **POST /chat**\nIntelligent conversational search with AI analysis\n```json\n{\n  \"query\": \"Find ML engineers for healthcare\",\n  \"top_k\": 5\n}\n```\n\n#### **GET /employees/search** \nDirect search with filters\n```bash\n?skill=Python\u0026min_experience=3\u0026availability=available\n```\n\n#### **GET /health**\nSystem health and status monitoring\n```bash\n?detailed=true  # For comprehensive system status\n```\n\n## 🛠️ **Configuration**\n\n### Environment Variables\n```bash\n# Required\nGEMINI_API_KEY=your_gemini_api_key_here\n\n# Optional\nOPENAI_API_KEY=your_openai_key_here    # Fallback AI provider\nHOST=0.0.0.0                           # Server host\nPORT=8000                              # Server port\nLOG_LEVEL=INFO                         # Logging level\nALLOWED_ORIGINS=http://localhost:8501  # Comma-separated list of allowed origins\n\n# Rate limits (SlowAPI format)\nCHAT_RATE_LIMIT=5/minute\nHEALTH_RATE_LIMIT=30/minute\nROOT_RATE_LIMIT=30/minute\nRAG_STATUS_RATE_LIMIT=10/minute\nSEARCH_RATE_LIMIT=10/minute\nDEBUG_EMPLOYEES_RATE_LIMIT=5/minute\n\n# Query bounds\nMIN_TOP_K=1\nMAX_TOP_K=20\n\n# Caching (RAG and AI summaries)\nQUERY_CACHE_TTL_SECONDS=300\nAI_SUMMARY_CACHE_TTL_SECONDS=600\nCACHE_BACKEND=auto                     # auto|redis|memory\nREDIS_URL=redis://redis:6379/0         # Provided by docker-compose\n\n# Embedding / vector settings\nEMBEDDING_CACHE_ENABLED=true\nEMBEDDING_CACHE_DIR=/app/backend/.cache\nEMBEDDING_CACHE_FILE=employee_embeddings.npy\nEMBEDDING_META_FILE=employee_embeddings.json\nFAISS_ENABLED=true\nFAISS_INDEX_FILE=employee_faiss.index\nFAISS_META_FILE=employee_faiss.json\nFAISS_METRIC=ip                        # ip or l2\n\n# Database \u0026 dataset\nDB_DIR=/app/data\nDB_FILE=employees.db\nDATASET_JSON_PATH=/app/dataset/employees.json\n```\n\u003e Omit any variable to use defaults. Boolean values accept: `true|false|1|0|yes|no`.\n\n### Advanced Settings\n- **Rate Limiting**: Configured in `backend/main.py`\n- **Model Selection**: Set in `backend/ai_client.py`\n- **Search Parameters**: Tunable in `backend/gemini_rag.py`\n\n## 📈 **Performance \u0026 Scaling**\n\n### Current Capabilities\n- **Response Time**: \u003c 2 seconds for typical queries\n- **Concurrent Users**: 50+ simultaneous requests\n- **Search Accuracy**: 85%+ relevance for complex queries\n- **Uptime**: 99.9% with proper deployment\n\n### Optimization Tips\n- Use environment-specific configurations\n- Enable response caching for repeated queries\n- Monitor API quotas for Gemini usage\n- Scale horizontally with load balancers\n\n## 🚀 **Deployment**\n\n### Docker Deployment\n```bash\n# Build and run with Docker\ndocker build -t hr-chatbot .\ndocker run -p 8000:8000 -p 8501:8501 hr-chatbot\n```\n\n### Docker Compose (Recommended)\nIncludes backend, frontend, Redis, volumes.\n```bash\ndocker compose up -d --build\ndocker compose logs -f backend\n```\nServices:\n- Backend: http://localhost:8000 (Swagger UI: /docs, Metrics: /metrics)\n- Frontend: http://localhost:8501\n- Redis: localhost:6379 (if enabled)\n\nPersistent volumes:\n- backend-data -\u003e SQLite DB\n- redis-data -\u003e Redis persistence\n\nTear down (removes volumes):\n```bash\ndocker compose down -v\n```\n\n### Cloud Deployment\n- **Heroku**: Ready for Heroku with Procfile\n- **AWS/GCP**: Compatible with container services\n- **Railway**: One-click deployment ready\n\n### Render Blueprint Deployment (Recommended for this repo)\n\nThis repository includes a `render.yaml` that defines two Docker services (backend + frontend).\n\nSteps:\n1. Fork or push the repo to your own GitHub account (avoid storing real secrets).\n2. Remove any accidental committed secrets. The file `backend/.env` should NOT exist (use `backend/.env.example`).\n3. In the Render dashboard choose: New \u003e Blueprint \u003e select the repo.\n4. Render parses `render.yaml`. It will create services named `backend` and `frontend`.\n5. Before first deploy, set the environment variables for each service:\n  - `GEMINI_API_KEY` (required for AI features)\n  - `OPENAI_API_KEY` (optional fallback)\n  - Any overrides (`CACHE_BACKEND`, `REDIS_URL`, etc.)\n6. Trigger the deploy. Watch build logs. (Expected build time: ~1–2 min on free tier.)\n7. Verify the backend health endpoint:\n  - `https://\u003cbackend-service\u003e.onrender.com/health` should return `{\"status\":\"healthy\"}`\n8. Open the frontend URL. Chat should function; if AI keys missing you'll see a degraded mode warning in backend logs.\n\nCommon Issues \u0026 Fixes:\n| Problem | Cause | Resolution |\n|---------|-------|-----------|\n| `chown: invalid user 'app:app'` | Dockerfile attempted chown before user creation | Fixed by creating user first (already updated) |\n| `dockerfile parse error unknown instruction` | Multi-line RUN broken by newline without `\\` | Fixed in backend Dockerfile |\n| Healthcheck failing | curl missing in slim image | Added `curl` to backend Dockerfile |\n| FAISS import error | Missing `libgomp` | Added `libgomp1` to backend Dockerfile |\n| Missing API keys warning | Keys not set in Render env | Add them via Render dashboard \u003e Environment |\n\nRe-deploy: push to `main` or click Manual Deploy in the service menu.\n\nLocal `.env` setup:\n```\ncp backend/.env.example backend/.env\n```\nFill values; never commit the populated file.\n\n## 🤝 **Contributing**\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.\n\n### Quick Contribution Guide\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/amazing-feature`\n3. Commit changes: `git commit -m 'Add amazing feature'`\n4. Push to branch: `git push origin feature/amazing-feature`\n5. Open a Pull Request\n\n## 📄 **License**\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 **Acknowledgments**\n\n- **Google Gemini AI** for powerful language models and embeddings\n- **FastAPI** for the excellent async web framework\n- **Streamlit** for the intuitive frontend framework\n- **Open Source Community** for inspiration and tools\n\n## 📞 **Support**\n\n- **Documentation**: Check the `/docs` endpoint when running the API\n- **Issues**: Report bugs or request features in [GitHub Issues](../../issues)\n- **Discussions**: Join conversations in [GitHub Discussions](../../discussions)\n\n---\n\n⭐ **Star this repo** if you find it helpful! ⭐\n\n**Example:**\n```\nGET /employees/search?skill=Python\u0026min_experience=4\u0026availability=available\n```\n\n## AI Development Process\n\n### AI Tools Used\n- **GitHub Copilot**: ~40% of code generation, especially boilerplate FastAPI endpoints and Pydantic models\n- **ChatGPT**: ~30% for architecture planning, documentation, and complex logic design\n- **Manual Development**: ~30% for business logic, data structure design, and integration\n\n### AI Assistance Breakdown\n- **Code Generation**: Copilot helped with FastAPI route definitions, error handling, and type annotations\n- **Architecture Decisions**: ChatGPT assisted in choosing FastAPI + Streamlit stack and API design patterns\n- **Documentation**: AI-generated initial README structure and API documentation\n- **Debugging**: Manual debugging for OpenAI API integration and CORS issues\n- **Data Creation**: Manual creation of realistic employee dataset\n\n### AI Limitations Encountered\n- **Complex Business Logic**: Employee scoring algorithm required manual implementation\n- **Integration Issues**: CORS configuration and environment variable handling needed manual fixes\n- **OpenAI API Updates**: Had to manually update from deprecated API format to new client structure\n\n## Technical Decisions\n\n### Technology Choices\n- **FastAPI vs Flask**: Chose FastAPI for automatic API documentation, type hints, and async support\n- **OpenAI vs Local Models**: Used OpenAI for reliable performance and quick development; local models would require more setup\n- **Streamlit vs React**: Streamlit for rapid prototyping and minimal frontend complexity\n- **JSON vs Database**: JSON for simplicity in this prototype; PostgreSQL would be better for production\n\n### Trade-offs\n- **Performance vs Simplicity**: Keyword matching is fast but less sophisticated than semantic embeddings\n- **Cost vs Quality**: OpenAI API costs money but provides high-quality responses\n- **Development Speed vs Scalability**: Current architecture prioritizes quick development over enterprise scalability\n\n## Future Improvements\n\n### Technical Enhancements\n- **Vector Embeddings**: Implement FAISS or Pinecone for semantic similarity search\n- **Advanced RAG**: Add document chunking and retrieval ranking\n- **Database Upgrade**: Optionally move from SQLite to PostgreSQL for heavy write workloads\n- **Caching Extensions**: Expand Redis usage (session memory, per-user contexts)\n- **Testing**: Comprehensive unit and integration test suite\n\n### Features\n- **User Authentication**: Add login/logout and user-specific queries\n- **Advanced Filtering**: Date-based availability, location, salary ranges\n- **Analytics Dashboard**: Query patterns and employee utilization insights\n- **Email Integration**: Direct employee contact through the platform\n- **Mobile App**: React Native or Flutter mobile interface\n\n### AI Improvements\n- **Fine-tuning**: Custom model training on HR-specific data\n- **Multi-modal**: Support for resume parsing and image analysis\n- **Conversation Memory**: Context-aware multi-turn conversations\n- **Feedback Learning**: System that improves based on user feedback\n\n## 🔍 Observability \u0026 Operations\n\n- Metrics: scrape `/metrics` (Prometheus exposition format)\n- Key series: `http_requests_total{method,path,status}` \u0026 `http_request_duration_seconds_bucket`\n- Trace correlation: `X-Request-ID` header appears in responses \u0026 logs\n- Health: `/health` (basic) and `/health?detailed=true` (AI + RAG diagnostics)\n- RAG diagnostics: `/system/rag-status` performs a quick test search\n\n## ✏️ Adding / Updating Employees\n\nNo write endpoint yet. Options:\n1. Edit `dataset/employees.json`, delete `/app/data/employees.db`, restart to re-seed.\n2. Python REPL inside container: import `upsert_employees` from `db.py`.\n3. Direct SQL via `sqlite3` inside container.\n\nIf you need RESTful CRUD (`POST /employees`), open an issue / PR.\n\n## 🔐 Security Notes\n\n- Basic XSS filtering on chat queries\n- Per-endpoint rate limits (env-configurable)\n- CORS restricted by `ALLOWED_ORIGINS` (tighten in production)\n- Recommend adding auth (API keys / OAuth) before public exposure\n\n## ✅ Deployment Verification Checklist\n\n```text\n1. GET /health -\u003e {\"status\":\"healthy\"}\n2. GET /system/rag-status -\u003e status available or fallback string\n3. GET /employees/search?skill=Python -\u003e returns expected count\n4. GET /metrics -\u003e Prometheus metrics visible\n5. Logs show AI client initialized OR graceful warning\n6. sqlite3 /app/data/employees.db 'SELECT COUNT(*) FROM employees;' shows rows\n```\n\n## Demo\n\n### Sample Queries\n1. \"Find React developers with mobile experience\"\n2. \"Who has worked on healthcare projects?\"\n3. \"Suggest someone for a machine learning role\"\n4. \"Find AWS experts available immediately\"\n\n### Screenshots\n\n#### Chat Interface (Desktop + Mobile)\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"66%\" valign=\"top\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/a20ba77e-a163-4a58-bd7f-e1c6d47e6d3d\" alt=\"Chat interface — desktop view\" title=\"Chat interface — desktop view\" width=\"100%\" /\u003e\n      \u003cbr /\u003e\n      \u003csub\u003eDesktop — Clean, intuitive Streamlit UI\u003c/sub\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"34%\" valign=\"top\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/d182f0df-7aaa-4bf7-a402-63558af72972\" alt=\"Chat interface — mobile conversation view\" title=\"Chat interface — mobile conversation view\" width=\"48%\" /\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/3d8d673c-0ff6-40ef-8f3a-b1a3d0ffc18c\" alt=\"Chat interface — mobile results view\" title=\"Chat interface — mobile results view\" width=\"48%\" /\u003e\n      \u003cbr /\u003e\n      \u003csub\u003eMobile — Conversation and results\u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \n\u003c/table\u003e\n\n#### API Documentation (Grid)\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"50%\" valign=\"top\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/f6c1f328-e975-4251-8c45-9aa19613460d\" alt=\"Swagger UI — API docs overview\" title=\"Swagger UI — API docs overview\" width=\"100%\" /\u003e\n      \u003cbr /\u003e\n      \u003csub\u003eAPI docs — Overview\u003c/sub\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"50%\" valign=\"top\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/ebe10617-1790-4f2c-9880-6c01e3741e04\" alt=\"Swagger UI — Endpoint list and try-out\" title=\"Swagger UI — Endpoint list and Try it out\" width=\"100%\" /\u003e\n      \u003cbr /\u003e\n      \u003csub\u003eAPI docs — Endpoint list \u0026 Try it out\u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"50%\" valign=\"top\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/452d599a-2bd7-468a-bd86-825822511e00\" alt=\"Swagger UI — Endpoint details\" title=\"Swagger UI — Endpoint details\" width=\"100%\" /\u003e\n      \u003cbr /\u003e\n      \u003csub\u003eAPI docs — Endpoint details\u003c/sub\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"50%\" valign=\"top\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/ff070cd9-adf5-4f42-b36b-01d50ecb3705\" alt=\"Swagger UI — Schemas and models\" title=\"Swagger UI — Schemas and models\" width=\"100%\" /\u003e\n      \u003cbr /\u003e\n      \u003csub\u003eAPI docs — Schemas \u0026 Models\u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n#### Search Results (Desktop)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/aeaf8d00-47fe-4130-b033-827bab84abbb\" alt=\"Search results — structured employee profiles with skills and experience\" title=\"Search results — structured employee profiles with skills and experience\" width=\"85%\" /\u003e\n  \u003cbr /\u003e\n  \u003csub\u003eDesktop — Structured employee profiles with skills, projects, and experience\u003c/sub\u003e\n\u003c/p\u003e\n\n\n## Development Notes\n- Built in 2 days following rapid prototyping principles\n- Focused on core functionality over UI polish\n- Designed for easy extension and modification\n- Emphasizes practical HR use cases and realistic data\n\n## License\nMIT License - Open for educational and commercial use.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsujal-thakkar%2Fhr-query-chatbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsujal-thakkar%2Fhr-query-chatbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsujal-thakkar%2Fhr-query-chatbot/lists"}