InternPilot is a role-aware career intelligence assistant that helps users with:
- Resume Match
- Recruiter View
- Interview Evaluation
- Model Resume generation
It supports both tech and non-tech roles (for example: web developer, corporate lawyer, HR, finance, marketing).
- Backend: FastAPI (Python)
- Frontend: React + Vite
- Storage:
- Free deploy mode: browser
localStoragefor history persistence on refresh - Optional backend history API via SQLite
- Free deploy mode: browser
- Role-aware skill matching from JD + resume
- Recruiter-style decision, missing skills, and roadmap
- Interview mock question generation + answer scoring
- JD-aligned model resume generation (
.docdownload) - Search history sidebar with delete/clear
- History survives refresh in deployed app (same browser/device)
internpilot/
main.py
services/
ai_service.py
utils/
frontend/
src/
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
uvicorn main:app --reloadBackend default URL: http://127.0.0.1:8000
cd frontend
npm install
npm run devFrontend default URL: http://127.0.0.1:5173
CORS_ORIGINS(comma-separated list)SMTP_HOSTSMTP_PORTSMTP_USERSMTP_PASSSMTP_FROMHISTORY_DB_PATH(optional)
VITE_API_BASE(example:https://your-backend.onrender.com)VITE_GOOGLE_CLIENT_ID(optional, for Google login in resume download flow)
- Connect GitHub repo to Render Web Service
- Build command:
pip install -r requirements.txt
- Start command:
uvicorn main:app --host 0.0.0.0 --port $PORT
- Add required environment variables in Render
- Deploy latest commit
- Set
VITE_API_BASEto your backend URL - Build command:
npm run build - Output directory:
dist - Deploy and hard refresh browser once
git add .
git commit -m "Your update message"
git push origin mainRender: Manual Deploy -> Deploy latest commit
- On free hosting, persistent server disk may not be available.
- InternPilot keeps search history in browser storage, so history remains after refresh/reopen on the same browser/device.
- If browser storage is cleared, history is removed.
POST /upload-and-analyzePOST /evaluate-answerPOST /extract-resume-linksPOST /generate-resume-referenceGET /historyPOST /history/addDELETE /history/{item_id}DELETE /history/clear
- If frontend cannot reach backend:
- verify
VITE_API_BASE - verify CORS in
CORS_ORIGINS
- verify
- If uploaded PDF returns low-quality result:
- ensure PDF has selectable text (not only scanned image)