An intelligent resume analysis and optimization system that helps job seekers improve their resumes. Upload your resume, get AI-powered analysis, ATS optimization suggestions, skills gap analysis, format improvements, select from professional templates, and generate polished resumes in DOC or PDF format.
- Resume Parsing: Extract structured data from PDF/DOCX resumes
- AI-Powered Analysis: Get strengths, weaknesses, and ATS compatibility scores
- ATS Optimization: Optimize your resume for Applicant Tracking Systems
- Skills Gap Analysis: Compare your resume against job descriptions
- Format Improvement: AI-powered format optimization suggestions
- Template Selection: Choose from 7+ professional templates including industry-specific options
- Resume Generation: Export polished resumes in DOC or PDF format
- Job Matching: Match your resume to specific job descriptions
- Version Management: Track and manage multiple versions of your resume
- Cover Letter Generation: AI-powered cover letter creation based on your resume and job description
- Interview Preparation: Generate interview questions and suggested answers
- Template Customization: Customize templates with advanced parameters
- Industry-Specific Templates: Templates optimized for Tech, Finance, Healthcare, and more
โโโโโโโโโโโโโโโ
โ Frontend โ React Application
โ (React) โ - Resume Upload
โโโโโโโโฌโโโโโโโ - Analysis Dashboard
โ - Template Selection
โ HTTP - Resume Generation
โผ
โโโโโโโโโโโโโโโ
โ Backend โ FastAPI Application
โ (FastAPI) โ - REST API
โโโโโโโโฌโโโโโโโ - Resume parsing & heuristics
โ
โโโโโโโโโโโโโโโโ
โผ โผ
โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โ ResumeParser โ โ Heuristic โ
โ (PDF/DOCX) โ โ analyzers โ
โโโโโโโโฌโโโโโโโโ โโโโโโโโฌโโโโโโโโ
โ โ
โโโโโโโโโโฌโโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโ
โ SQL DB โ
โ (resume JSON)โ
โโโโโโโโฌโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโ
โ LLM Service โ
โ (OpenAI) โ
โโโโโโโโโโโโโโโโ
Optional local embeddings (sentence-transformers / PyTorch) are available as an extra install for experimentation; they are not required for the default API. See backend/requirements-ml.txt.
- FastAPI: Modern Python web framework
- SQLAlchemy: Database ORM (SQLite for development, PostgreSQL/MySQL for production)
- JWT: Authentication with python-jose
- Bcrypt: Password hashing
- PyPDF2 / python-docx: Resume parsing and DOC generation
- reportlab: PDF generation
- OpenAI API: LLM for analysis and suggestions
- Boto3: AWS S3 integration for cloud storage (optional; not used for resume persistence by default)
Data storage: Uploaded resume files are parsed and stored as structured JSON in the database (SQLite/PostgreSQL). Raw PDF/DOCX files are not persisted; only the extracted content is. S3/cloud storage is available in the codebase for future use (e.g. storing generated PDF/DOCX outputs).
Optional ML stack: For local embedding experiments, install backend/requirements-ml.txt in addition to requirements.txt (adds PyTorch, sentence-transformers, ChromaDB). The default HTTP API uses keyword/heuristic analysis plus OpenAI for optional LLM features.
- React + Vite: UI framework
- Axios: HTTP client with JWT interceptors
- Modern CSS: Design system (variables, tokens), responsive layout, toast notifications, error boundary
- Docker & Docker Compose: Containerization
- Python 3.11+
- Node.js 18+
- Docker and Docker Compose (optional, for containerized deployment)
- OpenAI API key (if using OpenAI LLM)
- Clone the repository:
git clone https://github.com/yourusername/ResumeForge.git
cd ResumeForge- Create a
.envfile:
cp .env.example .env
# Edit .env and add your OPENAI_API_KEY- Start the services:
docker-compose up -d- Access the application:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Docs: http://localhost:8000/docs
- Navigate to backend directory:
cd backend- Create virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install dependencies:
pip install -r requirements.txt
# For tests and CI-style checks:
pip install -r requirements-dev.txt
# Optional local embeddings / PyTorch (not required for the API):
# pip install -r requirements-ml.txt- Set environment variables:
export OPENAI_API_KEY=your_api_key_here
export LLM_PROVIDER=openai
export LLM_MODEL=gpt-4o-mini- Run database migrations (recommended for new installs or schema updates):
alembic upgrade headThe app also creates tables on startup if they do not exist.
- Run the server:
uvicorn app.main:app --reload- Navigate to frontend directory:
cd frontend- Install dependencies:
npm install- Start development server:
npm run dev- Access the application at http://localhost:3000
| Variable | Description | Default |
|---|---|---|
OPENAI_API_KEY |
OpenAI API key for LLM | Required |
LLM_PROVIDER |
LLM provider: openai |
openai |
LLM_MODEL |
OpenAI chat model (e.g., gpt-4o-mini) |
gpt-4o-mini |
OPENAI_TIMEOUT_SECONDS |
Timeout for OpenAI HTTP calls | 60 |
EMBEDDING_MODEL |
Only if using requirements-ml.txt / EmbeddingModel |
all-MiniLM-L6-v2 |
VITE_API_URL |
Backend API URL for frontend | http://localhost:8000/api |
MAX_FILE_SIZE |
Maximum file upload size in bytes | 10485760 (10MB) |
CORS_ORIGINS |
Comma-separated list of allowed origins | http://localhost:3000,http://localhost:5173 |
JWT_SECRET_KEY |
Secret key for JWT signing (required in production) | Random per process if unset |
ACCESS_TOKEN_EXPIRE_MINUTES |
JWT token lifetime in minutes | 43200 (30 days) |
DATABASE_URL |
Database connection string | sqlite:///./resumeforge.db |
STORAGE_TYPE |
Storage type: local or s3 |
local |
S3_BUCKET_NAME |
AWS S3 bucket name (if using S3) | Required for S3 |
AWS_ACCESS_KEY_ID |
AWS access key (if using S3) | Required for S3 |
AWS_SECRET_ACCESS_KEY |
AWS secret key (if using S3) | Required for S3 |
AWS_REGION |
AWS region (if using S3) | us-east-1 |
- PDF (
.pdf) - Maximum size: 10MB - Microsoft Word (
.docx,.doc) - Maximum size: 10MB
Note: File size limits can be configured via the MAX_FILE_SIZE environment variable.
- Register an account: Create a new account with your email and username
- Login: Use your credentials to login
- Upload your resume: Upload your resume file (PDF or DOCX)
- Analyze and optimize: Use the analysis tools to improve your resume
- Generate: Create polished resumes with professional templates
- Navigate to the "Upload Resume" tab
- Click "Choose File" and select your resume (PDF or DOCX)
- Click "Upload Resume"
- Wait for processing
- After upload, navigate to the "Analysis" tab
- View your ATS compatibility score
- Review strengths and areas for improvement
- Check improvement suggestions
- Navigate to the "Templates & Generate" tab
- Select a template (Modern, Classic, ATS-Friendly, or Minimalist)
- Choose output format (DOCX or PDF)
- Click "Generate & Download"
- Your formatted resume will download automatically
POST /api/resume/upload- Upload and parse resumeGET /api/resume/{id}- Get parsed resume dataDELETE /api/resume/{id}- Delete a resume
POST /api/resume/{id}/analyze- Run full analysisPOST /api/resume/{id}/ats-optimize- Get ATS suggestionsPOST /api/resume/{id}/match-job- Match resume to job descriptionGET /api/resume/{id}/suggestions- Get improvement suggestions
GET /api/templates- List available templates (query param: industry)GET /api/templates/{id}- Get template detailsGET /api/industries- List industries with specific templatesPOST /api/resume/{id}/improve-format- Apply format improvementsPOST /api/resume/{id}/generate- Generate resume (query params: template_id, format=doc|pdf)POST /api/resume/{id}/generate-custom- Generate resume with custom template parameters
POST /api/resume/{id}/version- Create a new version of a resumeGET /api/resume/{id}/versions- List all versions of a resumeGET /api/resume/{id}/version/{version}- Get a specific versionPUT /api/resume/{id}- Update resume metadata (industry, tags)GET /api/resumes- List all resumes (query params: industry, tag)
POST /api/resume/{id}/cover-letter- Generate a cover letter
POST /api/resume/{id}/interview-questions- Generate interview questionsPOST /api/resume/{id}/interview-answer- Get suggested answer for a question
POST /api/auth/register- Register a new userPOST /api/auth/login- Login and get access tokenGET /api/auth/me- Get current user information (requires auth)
GET /api/health- Health check (public, no auth required)
Note: All resume endpoints require authentication. Include the JWT token in the Authorization header: Bearer <token>
Full API documentation available at http://localhost:8000/docs (Swagger UI)
- Build Docker images:
docker-compose build- Set production environment variables:
# Edit docker-compose.yml or use .env file
# Required: OPENAI_API_KEY, JWT_SECRET_KEY (use a strong random value)
# Update CORS_ORIGINS for your frontend domain- Run database migrations (if using Alembic):
cd backend && alembic upgrade head- Run in production mode:
docker-compose up -d- Check service health:
curl http://localhost:8000/api/health- API Keys: Never commit API keys to version control. Use environment variables or secrets management.
- CORS: Configure
CORS_ORIGINSappropriately for production to restrict access. - File Uploads: File size limits are enforced (default 10MB). Adjust
MAX_FILE_SIZEas needed. - Rate Limiting: Consider adding rate limiting for production deployments.
- HTTPS: Always use HTTPS in production environments.
- Database: For production, use PostgreSQL or MySQL instead of SQLite.
- Cloud Storage: Configure S3 or other cloud storage for file persistence.
- JWT Secret: Use a strong, randomly generated secret key for JWT tokens in production.
ResumeForge/
โโโ backend/
โ โโโ app/
โ โ โโโ api/ # API routes (auth, resume, templates)
โ โ โโโ models/ # Pydantic and data models
โ โ โโโ services/ # Business logic (auth, storage, LLM, parser, etc.)
โ โ โโโ utils/ # Utilities
โ โโโ alembic/ # Database migrations
โ โ โโโ versions/
โ โ โโโ env.py
โ โโโ templates/ # Resume templates (JSON)
โ โโโ requirements.txt
โ โโโ Dockerfile
โโโ frontend/
โ โโโ src/
โ โ โโโ components/ # React components (auth, resume, UI primitives)
โ โ โโโ context/ # React context (e.g. Toast)
โ โ โโโ hooks/ # Custom hooks (e.g. useToast)
โ โ โโโ services/ # API client
โ โ โโโ styles/ # Design system (variables, design-system.css)
โ โโโ package.json
โ โโโ Dockerfile
โโโ .github/workflows/ # CI (backend lint, frontend build, Docker build)
โโโ docker-compose.yml
โโโ .env.example # Environment variables template
โโโ CONTRIBUTING.md
โโโ LICENSE # MIT
โโโ README.md
- Backend: Python code follows PEP 8 style guide with type hints
- Frontend: React best practices with functional components
- Logging: Structured logging for debugging and monitoring
- Error Handling: Comprehensive error handling with meaningful messages
# Backend
cd backend
pip install -r requirements.txt -r requirements-dev.txt
python -m ruff check app
python -m pytest tests -v
python -c "import app.main; print('Import OK')"
# Database migrations (when schema changes)
alembic upgrade head
# alembic revision --autogenerate -m "description"
# Frontend
cd frontend
npm install
npm run lint
npm run test
npm run buildOptional pre-commit (repo root): pip install pre-commit && pre-commit install โ runs Ruff on backend/app/ before commit.
We welcome contributions! Please see CONTRIBUTING.md for guidelines on:
- Code style and standards
- Commit message conventions
- Pull request process
- Reporting issues
Completed (see Project Status for details): resume parsing, AI analysis, ATS optimization, templates & generation, version management, industry templates, cover letter, interview prep, auth, design system, toasts, migrations, and CI.
Recently shipped: Rate limiting (SlowAPI) on auth and heavy resume routes, security + X-Request-ID response headers, health check with DB probe, Docker entrypoint running alembic upgrade head, resume duplicate API, search query (q) on /api/resumes, frontend duplicate control + search field, .pre-commit-config.yaml (Ruff on backend/app).
Next (suggested order):
- Reliability โ Structured JSON logging, optional Redis-backed rate limits for multi-instance deploys
- User value โ S3 for generated PDF/DOCX or export analysis as PDF
- UX โ Password reset, dark mode, compare versions side-by-side
- Quality โ E2E tests (Playwright/Cypress), refresh tokens, email verification
Also under consideration: CSP hardening, pre-commit ESLint hook (optional), deeper observability (OpenTelemetry).
This project is open source and available under the MIT License.
Contributions are welcome! Please read our Contributing Guidelines for details on our code of conduct and the process for submitting pull requests.
For issues, questions, or feature requests, please open an issue on GitHub.
- Built with FastAPI
- Optional local embeddings via sentence-transformers (
requirements-ml.txt) - UI framework: React
- Resume generation: python-docx and reportlab
Current Version: 1.0.0
Status: Active Development
Included: JWT auth (secret from env), Alembic migrations (also on container start via docker-entrypoint.sh), design system and responsive UI, toast notifications, error boundary, confirm dialogs, empty states, drag-and-drop upload, accessibility (focus, skip link), shareable resume URLs (/r/:id?tab=โฆ), resume search + duplicate, baseline security response headers, rate limits on sensitive endpoints, and CI (backend pytest + ruff/flake8, frontend lint + Vitest + build, Docker build).
Note: ResumeForge is a portfolio project demonstrating AI-powered resume analysis, full-stack development, and ML integration. For production use, set JWT_SECRET_KEY, consider rate limiting, and use PostgreSQL/MySQL with HTTPS.
- Basic resume parsing (PDF/DOCX)
- AI-powered analysis
- ATS optimization
- Template-based resume generation
- Multiple resume versions management
- Industry-specific templates
- Cover letter generation
- Interview question preparation
- Advanced template customization
- Resume version history
- User authentication
- Design system, toasts, error boundary, accessibility
- Alembic migrations, JWT from env, CI fixes