OptiCV is an advanced AI-powered resume optimization platform designed to help job seekers bypass Applicant Tracking Systems (ATS). By leveraging Google's Gemini 2.5 Flash model, OptiCV parses, analyzes, scores, and rewrites resumes to align with specific job descriptions.
Demo video (Google Drive): Watch the demo walkthrough
Deployed to Vercel: frontend and backend are deployed. Production frontend URL: https://opti-cv-flame.vercel.app
- 🔍 AI Resume Parsing: Extracts structured data (skills, experience, education) from PDF and DOCX files using
pdfplumberandpython-docx. - 📊 Hybrid ATS Scoring: Combines algorithmic keyword matching with AI-driven semantic analysis to provide a realistic 0-100 ATS score.
- ✨ Intelligent Optimization: Rewrites resume bullet points to naturally include job description keywords without "stuffing".
- 📝 Live Resume Editor: Split-screen editor to fine-tune AI suggestions with real-time preview.
- 🎨 ATS-Friendly Downloads: Generates clean, single-column PDF and DOCX files guaranteed to be parseable by ATS software.
- 💬 AI Career Coach: Built-in chatbot to answer career questions and suggest improvements based on your specific resume context.
- 🔗 Hyperlink Preservation: Intelligently preserves LinkedIn, GitHub, and Portfolio links during the optimization process.
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Components: Shadcn/UI + Lucide React
- State Management: React Hooks
- Framework: FastAPI (Python 3.12+)
- AI Model: Google Gemini 2.5 Flash (
google-genaiSDK) - Parsing:
pdfplumber,python-docx - Generation:
fpdf2(PDF),python-docx(Word) - Validation: Pydantic
OptiCV/
├── backend/ # FastAPI Python Backend
│ ├── src/
│ │ ├── app.py # Entry point
│ │ ├── services/ # Logic (AI, Parsing, Scoring)
│ │ ├── routers/ # API Endpoints
│ │ └── models/ # Pydantic Schemas & Prompts
│ ├── requirements.txt # Python Dependencies
│ └── .env # API Keys (GitIgnored)
│
├── frontend/ # Next.js Frontend
│ ├── src/
│ │ ├── app/ # App Router Pages
│ │ ├── components/ # UI Components
│ │ └── lib/ # API Utilities
│ ├── package.json # Node Dependencies
│ └── vercel.json # Deployment Config
│
├── PROMPTS.md # Documentation of AI Prompts
└── README.md # Project Documentation- Python 3.10+ installed
- Node.js 18+ installed
- A Google Gemini API Key (Get it free at aistudio.google.com)
Open a terminal in the backend folder:
cd backend
# Create virtual environment
python -m venv venv
# Activate virtual environment
# Windows:
venv\Scripts\activate
# Mac/Linux:
# source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Create .env file
echo GEMINI_API_KEY=your_actual_api_key_here > .env
# Start the server
uvicorn src.app:app --reload --port 8000The backend runs at http://localhost:8000
Open a new terminal in the frontend folder:
cd frontend
# Install dependencies
npm install
# OR
# bun install
# Start the development server
npm run devThe frontend runs at http://localhost:3000
This project is optimized for deployment on Vercel as two separate projects (Frontend & Backend) linked via rewrites.
-
Deploy Backend:
- Create a new Vercel project pointing to the
backend/subdirectory. - Set framework to Other.
- Add Environment Variable:
GEMINI_API_KEY. - Copy the deployment URL (e.g., https://opticv-api.vercel.app)
- Create a new Vercel project pointing to the
-
Deploy Frontend:
- Create a new Vercel project pointing to the
frontend/subdirectory. - Set framework to Next.js.
- Note: The
vercel.jsonin frontend usually handles rewrites, but you may need to update the rewrite destination if cross-domain issues arise.
- Create a new Vercel project pointing to the
MIT License. Free to use and modify.