ResumeAI is a premium, full-stack AI career platform designed to help job seekers optimize their resumes, tailor them dynamically via chat, generate cover letters, and track application insights. It utilizes a state-of-the-art Retrieval-Augmented Generation (RAG) pipeline powered by Groq LLMs, LangGraph, FAISS vector stores, and Jina AI embeddings.
- Conversational Dialogue Agent: When users issue broad instructions (e.g. "Help me add a new experience"), the chatbot dynamically asks sequential, structured follow-up questions instead of hallucinating missing data.
- Interactive Workspace: Live dual-panel workspace featuring an Undo/Redo state stack, zoom scaling (50% - 150%), and suggested tailoring triggers.
- ATS PDF Generator: Generates a high-fidelity, two-column ATS-friendly ReportLab PDF layout mimicking the preview template on download.
- ATS Quality Audit: Breakdown of match scores, strengths, weaknesses, formatting checks, and impact evaluations.
- Job Matching Matrix: Matches resume text against target Job Descriptions using FAISS vector store indexing and Jina AI embeddings (
jina-embeddings-v3). - Skills Gap Analysis: Displays matching/missing keywords, upskilling paths, and structured course suggestions.
- Google OAuth 2.0: One-click Google Login and Registration via
@react-oauth/googleand Google ID Token verification. - Secure Token Management: Short-lived JWT Access Tokens combined with HTTP-only, rotated Refresh Tokens for multi-device session security.
- Account Security: Account lockout after repeated failed login attempts, password reset workflow, email verification, and CSRF token protection.
- Structured Builder: Form-driven UI converting career history directly to clean formatting.
- Cover Letter Generator: Contextual cover letters matched to target roles and company names with one click.
resume_AI/
├── backend/
│ ├── app/
│ │ ├── middleware/ # CSRF and OWASP Security Headers middleware
│ │ ├── routers/ # API Endpoint controllers (auth, builder, resume, dashboard)
│ │ ├── services/ # Business logic (RAG pipeline, PDF utils, Google OAuth, Groq integrations)
│ │ ├── config.py # Centralized Pydantic application settings
│ │ ├── database.py # SQLAlchemy setup
│ │ ├── models.py # SQLite / Postgres Database models
│ │ └── schemas.py # Pydantic validation schemas
│ ├── tests/ # Pytest integration & unit test suites
│ ├── migrate_auth_upgrade.py # Database schema & OAuth migration script
│ ├── Dockerfile # Backend container config
│ └── requirements.txt # Python dependencies
├── frontend/
│ ├── src/
│ │ ├── api/ # Axios API client calls & token interceptors
│ │ ├── components/ # UI components (animations, guards, gauges, layout)
│ │ ├── context/ # React Auth, Theme, and Application contexts
│ │ └── pages/ # Pages (Landing, Dashboard, ResumeTailor, UploadResume, Login, Register)
│ ├── Dockerfile # Multi-stage production Nginx container
│ ├── vercel.json # SPA rewrite configs for Vercel
│ └── tailwind.config.js # Tailored theme configs
├── docker-compose.yml # Complete stack orchestrator
└── README.md # Project documentation
The system uses an SQLite instance (backend/app.db) in development, managed via SQLAlchemy ORM.
users: Core user credentials, OAuth profiles (google_id,auth_provider), roles, email verification status, and lockout tracking.resumes: Uploaded raw text, metadata, and generated ReportLab PDF target paths.analyses: RAG comparison outputs (match_score,strengths,gaps,weaknesses,missing_skills,detailed_review).cover_letters: Generated cover letter document records.refresh_tokens&audit_logs: Multi-device token hashes, revocation tracking, and security audit event logs.
- Navigate to the backend directory:
cd backend - Create and activate a virtual environment:
python -m venv venv # Windows: .\venv\Scripts\activate # Linux/macOS: source venv/bin/activate
- Install dependencies:
pip install -r requirements.txt
- Create a
.envfile inbackend/containing:GROQ_API_KEY=your_groq_api_key GROQ_MODEL=llama-3.3-70b-versatile JINA_API_KEY=your_jina_api_key GOOGLE_CLIENT_ID=your_google_client_id SECRET_KEY=generate_a_long_random_string ALGORITHM=HS256 DATABASE_URL=sqlite:///./app.db CORS_ORIGINS=http://localhost:5173,http://127.0.0.1:5173,http://localhost:3000
- Apply database schema migrations:
python migrate_auth_upgrade.py
- Start the API server:
uvicorn app.main:app --reload --port 8000
- Navigate to the frontend directory:
cd frontend - Install npm packages:
npm install
- Create a
.envfile infrontend/containing:VITE_API_URL=http://localhost:8000 VITE_GOOGLE_CLIENT_ID=your_google_client_id
- Run the development server:
npm run dev
We use Pytest with mock clients to test database and router endpoints in isolation.
To run tests:
cd backend
$env:PYTHONPATH="."
.\venv\Scripts\python -m pytest tests/ -vYou can build and deploy the entire multi-container service stack locally using Docker Compose:
# Build and run backend and frontend containers
docker-compose up --build- Backend API: Available at
http://localhost:8000 - Frontend SPA (Nginx): Available at
http://localhost:80
- Import repository into Render as a Web Service or Blueprint (
render.yaml). - Set Environment Variables:
GROQ_API_KEY,JINA_API_KEY,GOOGLE_CLIENT_ID,SECRET_KEY,ENVIRONMENT=production.- Set
CORS_ORIGINSto your production frontend domain (e.g.https://your-app.vercel.app).
- Run
python migrate_auth_upgrade.pyduring build command.
- Import repository into Vercel and set
frontendas Root Directory. - Set Environment Variables:
VITE_API_URL: Your backend Render URL (e.g.,https://resumeai-nh1y.onrender.com)VITE_GOOGLE_CLIENT_ID: Your Google OAuth Client ID
- Add your Vercel domain to Authorized JavaScript origins in Google Cloud Console.