Growth JD Analyser – Implementation Doc
Goal: Build a lead-gen tool that lets visitors upload a growth/marketing/sales JD screenshot, captures email, and delivers a Hiring Scorecard in ≤5 minutes.
1. Product spec
| Item | Details |
|---|---|
| Name | "Unbore Your Growth JD" / Growth Job Description Analyser |
| URL | /tools/jd-analyser |
| Value prop | Paste or upload a JD → get a skill-mapped scorecard, interview plan, and risk flags in 5 minutes. |
| Lead capture | Work email (required) before results are revealed. |
| Storage | Netlify Forms → Google Sheet (via Zapier or direct integration). |
| AI backend | Gemini (existing proxy) or Claude for OCR + scorecard generation. |
2. User flow
┌──────────────────────────────────────────────────────────────────┐
│ 1. User lands on /tools/jd-analyser │
│ 2. Enters work email │
│ 3. Uploads JD screenshot (or pastes text) │
│ 4. Clicks "Analyse My JD" │
│ 5. Netlify function receives form data │
│ • Stores email + image URL in sheet │
│ • Calls Gemini vision to OCR the image │
│ • Passes extracted text to Hiring Guidance prompt │
│ • Returns JSON scorecard │
│ 6. Frontend renders scorecard + interview plan + risk flags │
│ 7. CTA: "Talk to a Growth Flow Engineer" (cal.com link) │
└──────────────────────────────────────────────────────────────────┘3. Architecture
3.1 Frontend (VitePress page)
- File:
docs/en/tools/jd-analyser.md - Components:
- Hero with headline + subhead
- Email input (required, validated)
- File upload (accept:
.png, .jpg, .jpeg, .webp, .pdf, .doc, .docx) + textarea fallback for plain text - Submit button
- Results area (hidden until response)
- CTA block
3.2 Netlify function
- File:
netlify/functions/jd-analyser.js - Responsibilities:
- Parse multipart form data (email, file, or plain text).
- Supported file types: PNG, JPG, WebP (images), PDF, DOC, DOCX.
- Append lead to Netlify Forms submission (or POST to Google Sheets API).
- Extract JD text based on file type:
- Image: Gemini Vision OCR.
- PDF:
pdf-parse(Node) or Gemini Vision (render pages as images). - DOC/DOCX:
mammoth(DOCX → HTML/text) or LibreOffice CLI for DOC. - Plain text: Use as-is.
- Call Hiring Guidance prompt (system + user template from Skill System doc).
- Return JSON:
{ success, scorecard, error }.
- Parse multipart form data (email, file, or plain text).
3.2.1 File parsing libraries (suggested)
| Format | Library | Notes |
|---|---|---|
pdf-parse | Pure JS, works in Netlify Functions | |
| DOCX | mammoth | DOCX → HTML/text, lightweight |
| DOC (legacy) | Convert client-side or reject with message | Legacy .doc is rare; suggest re-save as DOCX |
| Images | Gemini Vision API | OCR via gemini-1.5-flash or gemini-1.5-pro |
3.3 Data storage (MVP)
- Option A (simplest): Netlify Forms with form name
jd-analyser. Leads appear in Netlify dashboard; export to sheet manually or via Zapier. - Option B: Direct POST to Google Sheets via service account (reuse
GROWTHQUIZ_SERVICE_ACCOUNTpattern fromgemini-proxy.js).
3.4 AI prompts
Reuse the Hiring Guidance prompt skeleton from GFE-SkillSystem/docs/Hiring-Guidance-Skill.md:
- System: Ground in GFE Skill System + ValuationOps. Output JSON with
role_summary,skill_requirements,valuation_ops_alignment,scorecard,interview_plan,risk_flags. - User:
job_title,job_description(OCR'd text or pasted), optional metadata.
4. File inventory
| File | Purpose |
|---|---|
docs/en/tools/jd-analyser.md | Landing page |
docs/en/tools/jd-analyser-implementation.md | This doc |
netlify/functions/jd-analyser.js | Backend function |
docs/.vitepress/theme/jd-analyser.js | (optional) JS for form handling |
docs/public/images/tools/jd-hero.webp | Hero image (placeholder OK) |
5. Implementation checklist
- [ ] Create landing page with form (email + upload)
- [ ] Wire form to Netlify Forms for lead capture
- [ ] Create Netlify function with:
- [ ] Multipart parsing (busboy or similar)
- [ ] Gemini Vision call for OCR
- [ ] Hiring Guidance prompt call
- [ ] JSON response
- [ ] Render scorecard on frontend (Vue component or vanilla JS)
- [ ] Add CTA block linking to cal.com
- [ ] Test end-to-end locally with
netlify dev - [ ] Deploy and smoke-test on staging
- [ ] Add to nav/services grid
6. Environment variables needed
| Var | Use |
|---|---|
GEMINI_API_KEY | Gemini Vision + text generation |
GROWTHQUIZ_SERVICE_ACCOUNT | (optional) Google Sheets write |
JD_SHEET_ID | (optional) Sheet ID for leads |
7. Risks & mitigations
| Risk | Mitigation |
|---|---|
| OCR quality on screenshots | Allow plain-text fallback; prompt user to paste if image fails |
| PDF with scanned images (no text layer) | Detect via pdf-parse; fall back to Gemini Vision OCR |
Legacy .doc files | Prompt user to re-save as DOCX; reject gracefully |
| Rate limits on Gemini | Cache recent results; show "processing" state |
| Spam submissions | Require valid work email domain; add honeypot field |
| Large files | Client-side resize images; reject files >10 MB |
8. Success metrics
- Leads captured per week
- Conversion to cal.com booking
- Time to scorecard (target <60s)
- User feedback on scorecard quality
9. Future enhancements
- Auto-email the scorecard PDF
- Compare JD to benchmark roles (Head of Growth, etc.)
- Integrate with ATS (Greenhouse, Lever) for import
- Multi-language support (DE, FR, ES, HI)
Last updated: 2026-01-15

