A full-stack web app that evaluates how well your profile matches a target job role. You fill in your education, skills, experience, and certifications — and it gives you a detailed score breakdown, skill gap analysis, and actionable recommendations to improve your chances.
Built with a React + Vite frontend and a Python FastAPI backend running a trained scikit-learn model.
Live: job.gaury.dev · API: job-api.gaury.dev
Frontend
Backend
Hosting
├── src/ # React frontend
│ ├── components/ # UI components (Hero, Form, Results, etc.)
│ ├── services/ # API client (eligibilityService.ts)
│ ├── data/ # Job roles catalog
│ ├── types/ # TypeScript interfaces
│ ├── context/ # Theme provider (dark/light mode)
│ └── utils/ # Animation helpers
│
├── backend/ # Python FastAPI backend
│ ├── main.py # App entry point, CORS, routes
│ ├── ml/ # ML model, predictor, preprocessing
│ ├── models/ # Trained .joblib model file
│ ├── services/ # Eligibility engine, skill matcher, recommendations
│ ├── schemas/ # Pydantic request/response models
│ ├── data/ # Training dataset
│ └── tests/ # Pytest test suite
│
├── index.html # Vite HTML entry
├── vite.config.ts
├── package.json
├── render.yaml # Render deployment config
└── Procfile
npm install
npm run dev
Opens at http://localhost:3000. By default it'll call the production backend API — you can override this with a .env.local file:
VITE_PYTHON_API_URL=http://localhost:8000
cd backend
pip install -r requirements.txt
cd ..
uvicorn backend.main:app --reload --port 8000
API docs will be at http://localhost:8000/docs (Swagger UI).
cd backend
pytest
The app supports Google Sign-In via Supabase Auth. No frontend environment variables are required — all OAuth configuration is done in the Supabase and Google Cloud dashboards.
1. Google Cloud Console
https://job.gaury.devhttp://localhost:3000https://zgtrtrxearlhoqmyyhrp.supabase.co/auth/v1/callback2. Supabase Dashboard
https://job.gaury.devhttp://localhost:30003. How it works
supabase.auth.signInWithOAuth({ provider: 'google' }) with redirectTo set to window.location.originonAuthStateChange listener picks up the new session automaticallyhandle_new_user() auto-creates a profile row for new Google usersauth.uid() is the same for OAuth and email usersThe backend exposes a single main endpoint:
POST /api/v1/evaluate-eligibility
Request body:
{
"fullName": "Jane Doe",
"educationLevel": "Bachelor's Degree",
"branch": "Computer Science",
"cgpa": "8.5",
"technicalSkills": ["Python", "FastAPI", "Docker", "PostgreSQL"],
"yearsOfExperience": "2",
"certifications": ["AWS Cloud Practitioner"],
"targetRole": "python-developer"
}
Response includes overall score, tier classification, per-dimension scores, matched/missing/bonus skills, and prioritized action recommendations.
Other endpoints:
GET / — service infoGET /health — health check + model statusThe repo is set up for split deployment:
dist/render.yaml for config, runs uvicorn backend.main:appThe key env vars you need:
| Where | Variable | Value |
|---|---|---|
| Vercel | VITE_SUPABASE_URL |
Your Supabase project URL |
| Vercel | VITE_SUPABASE_PUBLISHABLE_KEY |
Your Supabase anon/public key |
| Vercel | VITE_PYTHON_API_URL |
Your Render/backend URL |
| Render | PYTHON_VERSION |
3.12.0 |
| Render | CORS_ORIGINS |
Your Vercel/frontend URL |
| Supabase | Google OAuth Client ID \u0026 Secret | Configured in Dashboard → Auth → Providers → Google |
MIT