1.7 KiB
Manual Import Extractor (How It Works)
This is a walkthrough of the manual job import flow, which allows users to add jobs that aren't captured by automated scrapers.
Big Picture
Instead of scraping a website, the manual extractor takes a raw job description (pasted text), parses the details (using AI), and allows the user to review and edit the data before importing it into the pipeline.
1) Input
The user provides input via the Manual Import sheet in the UI. They paste a full job description, copied from any source (job board, company site, email, etc.).
2) AI Inference
When the user clicks "Analyze JD", the orchestrator calls an internal endpoint (/api/manual-jobs/infer).
The server-side service (orchestrator/src/server/services/manualJob.ts) then:
- Sends the raw text to an LLM (via OpenRouter).
- Uses a specific prompt to extract structured data (title, employer, location, salary, etc.).
- Returns a JSON object containing the inferred fields.
If OPENROUTER_API_KEY is not configured, the inference step skips and warns the user to fill details manually.
3) Review and Edit
The inferred data is populated into a form in the UI. The user can:
- Correct any mistakes made by the AI.
- Add missing information.
4) Storage and Scoring
Once the user clicks "Import Job", the data is sent to /api/manual-jobs/import.
The orchestrator:
- Generates a unique ID for the job if no URL is provided.
- Saves the job to the database with the source set to
manual. - Asynchronously triggers scoring: The job is immediately run through the suitability scorer (
orchestrator/src/server/services/scorer.ts) against the user's current resume profile. - Updates the job record with the suitability score and reason once complete.