{"id":51747831,"url":"https://github.com/devshivamthakur/career-ai","last_synced_at":"2026-07-18T21:42:55.402Z","repository":{"id":360143436,"uuid":"1246810841","full_name":"devshivamthakur/career-ai","owner":"devshivamthakur","description":"CareerAI — AI-Powered Job Application Assistant","archived":false,"fork":false,"pushed_at":"2026-06-20T03:28:50.000Z","size":713,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-20T05:17:46.012Z","etag":null,"topics":["agent","ai-agents","career-ai","langchain","llm"],"latest_commit_sha":null,"homepage":"https://career-ai-tan.vercel.app/chat","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devshivamthakur.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2026-05-22T15:23:24.000Z","updated_at":"2026-06-19T13:58:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/devshivamthakur/career-ai","commit_stats":null,"previous_names":["devshivamthakur/career-ai"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devshivamthakur/career-ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devshivamthakur%2Fcareer-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devshivamthakur%2Fcareer-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devshivamthakur%2Fcareer-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devshivamthakur%2Fcareer-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devshivamthakur","download_url":"https://codeload.github.com/devshivamthakur/career-ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devshivamthakur%2Fcareer-ai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35632492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-18T02:00:07.223Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["agent","ai-agents","career-ai","langchain","llm"],"created_at":"2026-07-18T21:42:54.614Z","updated_at":"2026-07-18T21:42:55.392Z","avatar_url":"https://github.com/devshivamthakur.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CareerAI — AI-Powered Job Application Assistant\n\n\u003e An intelligent job application assistant powered by AI — tailors résumés, generates cover letters, prepares you for interviews, and answers career-related questions through a conversational chat agent.\n\n🔗 **Live Demo:** [career-ai-tan.vercel.app/chat](https://career-ai-tan.vercel.app/chat)\n\n---\n\n## ✨ Features\n\n| Feature | Description |\n|---|---|\n| 🤖 **AI Chat Agent** | Conversational career assistant with tool-calling, session memory, and real-time SSE streaming |\n| 📄 **Resume Tailoring** | Upload a PDF resume + paste a job description → get an ATS-optimized, tailored resume with matched/missing skills breakdown |\n| ✍️ **Cover Letter Generation** | Generate tailored, 3-paragraph cover letters based on your resume and job context |\n| 🎤 **Interview Preparation** | Generate role-specific questions with STAR-format answers, optionally personalized with your project experience |\n| 📊 **ATS Score** | Real-time compatibility scoring with visual ring indicator (0–100) |\n| 📎 **PDF Export** | Download your tailored resume as a polished PDF |\n\n## 🏗️ Architecture\n\n```\nai-powered-job-helper/\n├── backend/          # FastAPI + Python backend\n│   ├── app/\n│   │   ├── agents/       # LangGraph workflows \u0026 LangChain agents\n│   │   ├── api/          # REST routes (resume, chat, career assistant)\n│   │   ├── core/         # Config, LLM builder, caching, rate limiting\n│   │   ├── db/           # SQLAlchemy models + Alembic migrations\n│   │   ├── schemas/      # Pydantic request/response models\n│   │   ├── services/     # Business logic (chat sessions, PDF, validation)\n│   │   └── prompts/      # LLM system prompts\n│   └── alembic/          # Database migration scripts\n├── frontend/         # React + TypeScript + Vite SPA\n│   └── src/\n│       ├── components/   # UI components (chat, resume, career, layout, shared)\n│       ├── pages/        # Route pages (/chat, /resume, /cover-letter, /interview)\n│       ├── stores/       # Zustand state management\n│       ├── hooks/        # Custom React hooks (SSE streaming, chat sessions, etc.)\n│       └── api/          # API client utilities\n└── README.md         # ← You are here\n```\n\n## 🧰 Tech Stack\n\n### Backend\n| Technology | Purpose |\n|---|---|\n| **Python 3.14+ / FastAPI** | Async web framework |\n| **LangGraph** | Resume tailoring workflow (4-node state machine) |\n| **LangChain (create_agent)** | Unified AI agent with middleware, tools \u0026 structured output |\n| **LangChain-OpenAI / AWS Bedrock** | Multi-provider LLM invocation |\n| **LangFuse** | LLM observability \u0026 tracing |\n| **Redis** | Rate limiting \u0026 semantic caching |\n| **PostgreSQL** | Primary database (SQLAlchemy + Alembic) |\n| **PDFplumber / ReportLab** | PDF extraction \u0026 generation |\n| **HuggingFace Embeddings** | Semantic cache similarity (`BAAI/bge-base-en-v1.5`) |\n\n### Frontend\n| Technology | Purpose |\n|---|---|\n| **React 19** | UI framework |\n| **Vite 8** | Build tool \u0026 dev server |\n| **Tailwind CSS v4** | Utility-first styling |\n| **React Router v7** | Client-side routing |\n| **Zustand** | Lightweight state management |\n| **TanStack Query v5** | Server state \u0026 mutations |\n| **Lucide React** | Icon library |\n| **fetch-event-source** | SSE streaming client |\n\n## 🚀 Getting Started\n\n### Prerequisites\n- Python 3.14+\n- Node.js 22+\n- Redis (for caching \u0026 rate limiting)\n- PostgreSQL (optional, for persistence)\n\n### Backend Setup\n\n```bash\ncd backend\npython -m venv .venv \u0026\u0026 source .venv/bin/activate\npip install -e \".[dev]\"\n\n# Configure environment\ncp .env.example .env\n# Edit .env with your API keys (OpenAI / AWS Bedrock)\n\n# Run migrations\nalembic upgrade head\n\n# Start the server\nuvicorn app.main:app --reload --port 8000\n```\n\n### Frontend Setup\n\n```bash\ncd frontend\nnpm install\nnpm run dev\n```\n\nThe frontend dev server runs on `http://localhost:5173` and proxies `/api` requests to the backend.\n\n### Environment Variables (Backend)\n\n| Variable | Description |\n|---|---|\n| `OPENAI_API_KEY` | OpenAI API key |\n| `ANTHROPIC_API_KEY` | Anthropic API key |\n| `AWS_ACCESS_KEY_ID` | AWS credentials (Bedrock) |\n| `AWS_SECRET_ACCESS_KEY` | AWS credentials (Bedrock) |\n| `REDIS_URL` | Redis connection string |\n| `DATABASE_URL` | PostgreSQL connection string |\n| `LANGFUSE_PUBLIC_KEY` | LangFuse observability |\n| `LANGFUSE_SECRET_KEY` | LangFuse observability |\n\n## 🧪 API Endpoints\n\n| Method | Path | Description |\n|---|---|---|\n| `GET` | `/api/status` | Health check |\n| `POST` | `/api/chat/stream` | SSE streaming chat with AI agent |\n| `POST` | `/api/resume/tailor/stream` | Streaming resume tailoring (4 stages) |\n| `POST` | `/api/resume/export-pdf` | Download tailored resume as PDF |\n| `POST` | `/api/career/cover-letter` | Generate a cover letter |\n| `POST` | `/api/career/interview-prep` | Generate interview Q\u0026A |\n\n## 📁 Frontend Pages\n\n| Route | Page | Description |\n|---|---|---|\n| `/chat` | ChatPage | Conversational AI career assistant with tool-calling |\n| `/resume` | ResumePage | Upload resume + JD → tailored ATS-optimized resume |\n| `/cover-letter` | CoverLetterPage | Generate tailored cover letters |\n| `/interview` | InterviewPage | Generate interview questions with STAR answers |\n\n## 🛡️ Infrastructure\n\n- **Semantic Caching** — Redis + HuggingFace embeddings cache LLM responses for similar JDs\n- **Rate Limiting** — 20 requests/client/60s (Redis-backed Token Bucket)\n- **Circuit Breaker** — Opens when error rate exceeds 10% in a 60s window\n- **Concurrency Management** — asyncio semaphores (max 10 concurrent requests, max 5 concurrent PDF parses)\n- **Security Headers** — CSP, HSTS, X-Frame-Options, X-Content-Type-Options\n- **Request ID Tracking** — Every request gets a unique `X-Request-ID`\n\n---\n\nBuilt with ❤️ using FastAPI, LangChain, React, and Tailwind CSS.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevshivamthakur%2Fcareer-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevshivamthakur%2Fcareer-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevshivamthakur%2Fcareer-ai/lists"}