An AI-powered resume analysis and job matching web application that helps users evaluate and improve their resumes, match them against job opportunities, and plan their career roadmap.
- Upload resumes in multiple formats (PDF, DOCX, images via OCR)
- AI-powered completeness scoring (0-100%)
- Section-by-section quality ratings (Summary, Education, Experience, Other)
- Brutally honest, actionable improvement suggestions
- Zero-hallucination policy: AI suggests improvements without inventing fake metrics
- Two modes: Custom job description OR curated role + location selection
- AI generates tailored job descriptions for role/location combinations
- Semantic alignment scoring (0-100%)
- Gap analysis with severity levels (High/Medium/Low)
- Interactive gap assessment: Rate your proficiency (None/Basic/Moderate/Advanced)
- Final AI verdict on whether to apply
- ATS-optimized resumes customized for specific jobs
- Preserves all original sections (Volunteering, Awards, Certifications, etc.)
- Maintains all contact links (LinkedIn, GitHub, Google Scholar, etc.)
- Integrates user-confirmed skills from gap assessment
- Results-driven language enhancement (strong action verbs, impact-oriented)
- PDF download with dynamic filename:
{UserName}_tailored resume.pdf
- Personalized career development plans
- Input: Dream role, location, timeframe (6 months to 2 years)
- AI analyzes current gaps vs. target role
- Phased action plans with specific steps
- Resource recommendations (courses, certifications, books)
- Milestone tracking
- Framework: FastAPI (async, high-performance)
- Database: PostgreSQL via SQLAlchemy ORM
- Authentication: Password-based with bcrypt hashing
- AI Integration: Google Gemini AI (gemini-2.0-flash-exp model)
- File Processing:
- PDF: PyPDF2
- DOCX: python-docx
- Images: Tesseract.js OCR
- Max upload: 10MB
- Framework: React + TypeScript + Vite
- UI: shadcn/ui components + Tailwind CSS
- State: TanStack Query (React Query)
- Routing: Wouter
- PDF Generation: pdfmake (client-side)
users
βββ id (UUID)
βββ username
βββ password_hash
resumes
βββ id (UUID)
βββ user_id (FK β users)
βββ filename
βββ filesize
βββ mime_type
βββ extracted_text
βββ created_at
analyses
βββ id (UUID)
βββ resume_id (FK β resumes)
βββ completeness_score (0-100)
βββ completeness_rationale
βββ section_scores (JSON)
βββ suggestions (JSON array)
βββ created_at
job_matches
βββ id (UUID)
βββ resume_id (FK β resumes)
βββ job_description
βββ job_role (nullable)
βββ job_location (nullable)
βββ alignment_score (0-100)
βββ alignment_rationale
βββ gaps (JSON array)
βββ strengths (JSON array)
βββ gap_responses (JSON array)
βββ final_verdict
βββ should_apply (boolean)
βββ tailored_resume_content
βββ created_at
career_roadmaps
βββ id (UUID)
βββ user_id (FK β users)
βββ resume_id (FK β resumes)
βββ dream_role
βββ dream_location
βββ timeframe
βββ current_gaps (JSON array)
βββ skills_to_acquire (JSON array)
βββ action_plan (JSON array)
βββ resources (JSON array)
βββ milestones (JSON array)
βββ created_at
- Python 3.11+
- PostgreSQL database
- Gemini API key
Create a .env file with:
DATABASE_URL=postgresql://user:password@host:port/database
SESSION_SECRET=your-secret-key-change-in-production
GEMINI_API_KEY=your-gemini-api-key- Install Python dependencies:
pip install -r python_requirements.txtOr on Replit, packages are auto-installed.
-
Set up database: The application will auto-create tables on first run using SQLAlchemy.
-
Run the application:
# Development mode
uvicorn python_backend.main:app --reload --host 0.0.0.0 --port 8000
# Production mode
uvicorn python_backend.main:app --host 0.0.0.0 --port 8000- Build React frontend (if needed):
npm install
npm run buildresumatch-pro/
βββ python_backend/
β βββ __init__.py
β βββ main.py # FastAPI app entry point
β βββ config.py # Configuration & environment variables
β βββ models.py # SQLAlchemy database models
β βββ database.py # Database session management
β βββ auth.py # Authentication utilities
β βββ file_processor.py # File upload & text extraction
β βββ gemini_service.py # Gemini AI integration
β βββ routes/ # API route handlers (to be created)
β βββ auth.py
β βββ resumes.py
β βββ analyses.py
β βββ job_matches.py
β βββ career_roadmaps.py
βββ client/
β βββ src/
β βββ App.tsx # React app & routing
β βββ pages/ # Page components
β βββ components/ # Reusable UI components
β βββ lib/ # Utilities & API client
βββ attached_assets/ # User-uploaded files & generated content
βββ python_requirements.txt # Python dependencies
βββ package.json # Node.js dependencies
βββ README.md
- Username + Password authentication
- Passwords hashed with bcrypt (cost factor 12)
- Session-based authentication with secure cookies
- Registration endpoint:
POST /api/auth/register - Login endpoint:
POST /api/auth/login - Logout endpoint:
POST /api/auth/logout
- Model: gemini-2.0-flash-exp (latest Flash model)
- Structured Output: JSON schema enforcement
- Zero-Hallucination Policy: Never invents metrics or data
- Brutally Honest Feedback: Identifies weak language, buzzwords, missing metrics
- Results-Driven Language: Transforms passive statements into impact-oriented achievements
POST /api/auth/register- Create new accountPOST /api/auth/login- Login with username/passwordPOST /api/auth/logout- LogoutGET /api/auth/me- Get current user
POST /api/resumes- Upload resume (multipart/form-data)GET /api/resumes- Get user's resumesGET /api/resumes/{id}- Get specific resume
POST /api/analyses- Analyze a resumeGET /api/analyses/{resume_id}- Get analysis for resume
POST /api/job-matches- Create job match analysisGET /api/job-matches/{resume_id}- Get job matches for resumePATCH /api/job-matches/{id}/responses- Submit gap proficiency responsesPOST /api/job-matches/{id}/tailored-resume- Generate tailored resume
POST /api/career-roadmaps- Generate career roadmapGET /api/career-roadmaps- Get user's career roadmaps
- Landing Page: Simple username/password login
- Dashboard: Resume upload and management
- Resume Analysis: AI analysis results with scores and suggestions
- Job Match Input: Custom JD or role+location selection
- Job Match Results: Alignment scores, gaps, strengths, recommendations
- Career Roadmap: Dream role form and career guidance
- β SQLAlchemy models match existing PostgreSQL schema
- β UUID primary keys preserved
- β All JSONB columns supported
- β Authentication upgraded from username-only to username+password
- β Gemini AI service ported with identical prompts
- β File processing pipeline (PDF, DOCX, OCR) reimplemented
- π§ FastAPI routes in progress
- π§ Session management setup
- π§ React frontend integration
- Existing data preserved (users, resumes, analyses, job_matches, career_roadmaps)
- Schema unchanged - seamless migration
- Add
password_hashcolumn touserstable for existing users
(To be implemented)
- Unit tests for AI service
- Integration tests for API endpoints
- E2E tests with Playwright
The application is designed to run on Replit with:
- Auto-managed PostgreSQL database
- Environment secrets management
- One-click deployment
Proprietary - All rights reserved
This is a private project. Contact the owner for collaboration opportunities.
For issues or questions, please contact the project maintainer.
Built with β€οΈ using FastAPI, React, and Gemini AI