Skip to content

Feat/resume ai extraction - #95

Open
AnkitaKumariii wants to merge 2 commits into
VishwaGauravIn:mainfrom
AnkitaKumariii:feat/resume-ai-extraction
Open

AnkitaKumariii wants to merge 2 commits into
VishwaGauravIn:mainfrom
AnkitaKumariii:feat/resume-ai-extraction

Conversation

@AnkitaKumariii

Copy link
Copy Markdown

What this PR adds

Adds a Resume Upload feature as a second CTA on the HomePage, allowing users to auto-fill their GitHub profile README by uploading a PDF/DOCX resume.

Flow

Resume Upload → PDF/DOCX/OCR Parser → Raw Text → Gemini AI → Structured JSON → MobX Store → README Generator

Features

  • 🗂 Drag-and-drop upload zone (PDF & DOCX)
  • 📄 PDF text-layer extraction via pdfjs-dist (local worker, no CDN dependency)
  • 🔍 Tesseract.js OCR fallback for scanned/image-based PDFs
  • 📝 DOCX parsing via mammoth.js
  • 🤖 Gemini AI extraction (gemini-2.5-flash-lite with 3-model fallback chain for 503/429 errors)
  • 🔑 BYOK (Bring Your Own Key) — users enter their Gemini API key, stored in localStorage only
  • 🛡 GitHub username sanitizer (strips full URLs → handle only)
  • ✅ Manual username input fallback in review step
  • 🏷 Tech normalization utility: AI label names → badge URL strings

New files

  • components/slides/ResumeUpload.js
  • components/elements/GeminiKeyInput.js
  • pages/api/extract-resume.js
  • utils/normalizeTech.js
  • .env.local.example

Modified files

  • components/slides/HomePage.js — added Upload Resume CTA
  • components/mobx/gprmStore.js — added bulkEditData() action

- Add ResumeUpload component with drag-and-drop UI and 4-step progress bar
- PDF text-layer extraction via pdfjs-dist (local worker, no CDN)
- Tesseract.js OCR fallback for scanned/image-based PDFs
- DOCX parsing via mammoth.js
- Gemini AI extraction API route (gemini-2.5-flash-lite with 3-model fallback chain)
- Tech normalization utility: AI names → badge URL strings
- GitHub username sanitizer strips full URLs to handle-only
- Manual username input fallback in review step
- Add Upload Resume CTA on HomePage alongside existing flow
- Add bulkEditData action to MobX store
- Add .env.local.example for API key setup
- Add GeminiKeyInput component (localStorage-based, masked display)
- Show/Hide/Change/Forget key controls
- Key passed as x-user-gemini-key header to API route
- API route prefers user key over server env key
- Clear error when no key is configured on either side
- Key never logged or stored server-side
@vercel

vercel Bot commented Jul 4, 2026

Copy link
Copy Markdown

@AnkitaKumariii is attempting to deploy a commit to the vishwagauravin's projects Team on Vercel.

A member of the Team first needs to authorize it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant