Reactive Resume
What it is
Reactive Resume is now an optional integration in JobOps.
The primary editing surface is Resume Studio, which stores a local resume document inside JobOps. Reactive Resume is used for:
- importing an existing resume into Resume Studio
- exporting JobOps resume JSON back out
- optional upstream PDF export when the
rxresumePDF renderer is selected
Why it exists
Most users need a repeatable resume pipeline:
- one canonical structured resume source
- controlled project inclusion rules
- per-job tailored output without manual copy/paste
Reactive Resume still matters because many users already maintain a strong resume there, and its JSON model is compatible with JobOps. Importing that data into Resume Studio avoids re-entry while reducing day-to-day dependence on the upstream service.
Where it fits now
Reactive Resume remains useful because it has a mature editor, established templates, and a JSON-native data model.
Key reasons:
- It is a convenient migration/import source.
- It can still power PDF export if you prefer the upstream renderer.
- Its JSON schema remains a stable interchange format for JobOps.
For everyday editing inside JobOps, use Resume Studio.
Core concepts
Import source
Your configured base resume in Reactive Resume is used as the import source for Resume Studio when you choose Import from Reactive Resume.
After import, JobOps uses the local Resume Studio document for:
- profile extraction
- project catalog extraction
- tailoring and scoring context
- local PDF generation
- future in-app resume design work
If you use the rxresume PDF renderer, JobOps can still send the tailored JSON through Reactive Resume at export time.
Project catalog
JobOps reads projects from sections.projects.items in the local Resume Studio document.
Each project is identified by:
idnamedescriptiondatevisible(visible in base resume)
Project selection controls
The Settings UI supports 3 controls:
- Must Include: always include these projects.
- AI Selectable: pool of projects AI can pick from.
- Max Projects: final cap for included projects.
At generation time:
- Must-include projects are added first.
- AI picks up to remaining slots from AI-selectable projects.
- Final visible projects are applied to the generated resume.
Setup and configuration
Account requirements (important)
Before connecting Reactive Resume to JobOps:
- Generate an API key in your Reactive Resume account.
- Configure
rxresumeApiKeyin Settings → Reactive Resume (or setRXRESUME_API_KEYin your environment).
1) Configure Reactive Resume access
Configure in Settings → Reactive Resume:
rxresumeUrl(optional shared URL for cloud or self-hosted deployments)rxresumeApiKey
Or via environment variables:
RXRESUME_API_KEY- optional
RXRESUME_URL
If you leave the URL blank in the dashboard, JobOps uses RXRESUME_URL when it is set; if not set, it falls back to the public cloud default (https://rxresu.me).
Save-time validation
When you save Reactive Resume credentials or the shared URL in Settings:
- JobOps validates your API key.
- Invalid credentials or other
4xxconfiguration failures block the save and show a persistent inline error. - Temporary network failures, timeouts, or upstream
5xxerrors show a persistent inline warning, but the save still succeeds.
2) Select base resume
In Settings → Reactive Resume:
- Click refresh to fetch resumes.
- Select the template/base resume.
- Save settings.
3) Import into Resume Studio
- Open Resume Studio in the left navigation.
- Click Import from Reactive Resume.
- Wait for JobOps to create the local Resume Studio document.
After that import, JobOps reads resume context locally by default.
4) Configure project behavior
In Settings → Reactive Resume:
- Set
Max projects. - Mark projects as Must Include where needed.
- Mark remaining projects as AI selectable.
- Save settings.
Runtime behavior
During PDF generation
High-level flow:
- Load the local Resume Studio document.
- Apply tailored summary/headline/skills.
- Compute final visible projects from your selection rules.
- Optionally rewrite outbound links to tracer links (per-job toggle).
- Normalize the tailored resume data into JobOps' renderer document model.
- Render the PDF with the configured renderer:
- RxResume export
- Local LaTeX with
tectonic - Local Typst with
typst
Resume-data caching
JobOps caches successful Reactive Resume resume fetches in memory for 5 minutes when upstream access is needed.
This now mainly affects import/export operations, settings resume lookup, and the optional upstream PDF renderer.
Per-job tracer links
Before generating a PDF, each job can enable/disable tracer links.
- Disabled: original RxResume links remain unchanged.
- Enabled: eligible outbound links are rewritten to
https://<your-host>/cv/<company>-xx(readable slug + 2-letter suffix).
For background pipeline generation, configure:
JOBOPS_PUBLIC_BASE_URL=https://your-host
Important:
- tracer enablement is gated by readiness checks
- if public host verification fails, enable is blocked until host health is restored
- toggle changes apply on next PDF generation only
What JobOps changes with AI
Current AI-driven edits are intentionally scoped:
summaryheadline/titleskillsand keywords- project visibility (enable/disable per project)
Local renderer dependency
JobOps can generate the final PDF in 3 ways:
rxresume: use the upstream RxResume print/export endpointlatex: render locally with the Jake Gutierrez-based LaTeX templatetypst: render locally with Typst and the selected Typst theme
Notes:
- Resume Studio supplies the structured base resume and project data by default.
- Reactive Resume is only required at render time when you choose the
rxresumePDF renderer. - In Docker deployments,
tectonicandtypstare bundled into the image for local rendering. - In non-Docker local environments, install
tectonicand optionally setTECTONIC_BINif needed when using the LaTeX option. - In non-Docker local environments, install
typstand optionally setTYPST_BINif needed when using the Typst option.
Typst themes
Typst themes are defined as folders under orchestrator/src/server/services/resume-renderer/typst-themes.
Each theme folder contains:
theme.json: id, label, description, renderer kind, entrypoint, and native theme tokensmain.typ: the Typst template used by the native renderer
After adding or changing a theme, run:
npm run typst-theme:generate
npm run typst-theme:validate
The generated shared metadata powers the settings dropdowns, so theme PRs do not need hand-written UI enum changes.
For package-backed themes, set kind to adapted and read the normalized resume document with json(__RESUME_DATA_PATH__) from the Typst entrypoint.
Common problems
- Import fails: Check that Reactive Resume credentials, mode, URL, and selected base resume are valid in Settings.
- Resume Studio is empty: Open Resume Studio and run Import from Reactive Resume once.
- PDF export still calls Reactive Resume:
Switch the PDF renderer to
latexortypstif you want the full flow to stay local. - Project lists look stale: Re-import from Reactive Resume if you intentionally changed the upstream base resume and want those changes copied into JobOps.
Related pages
API reference
# Get effective settings (includes resolved resumeProjects and base resume id)
curl "http://localhost:3001/api/settings"
# Save base resume and project controls
curl -X PATCH "http://localhost:3001/api/settings" \
-H "content-type: application/json" \
-d '{
"rxresumeBaseResumeId": "resume_id_here",
"resumeProjects": {
"maxProjects": 4,
"lockedProjectIds": ["proj_a"],
"aiSelectableProjectIds": ["proj_b","proj_c","proj_d"]
}
}'
# List available Reactive Resume resumes
curl "http://localhost:3001/api/settings/rx-resumes"
# Fetch projects from one RxResume resume
curl "http://localhost:3001/api/settings/rx-resumes/<resumeId>/projects"
# Regenerate PDF for a job after changing settings or resume data
curl -X POST "http://localhost:3001/api/jobs/<jobId>/generate-pdf"
Troubleshooting and FAQ
RxResume controls are disabled
- Ensure you have set a valid API key.
- Invalid credentials block save and remain visible as an inline error until you edit your API key or URL.
- Temporary Reactive Resume downtime shows an inline warning, but other settings can still be saved.
- Save settings, then refresh resumes in the Reactive Resume section.
No resumes appear in dropdown
- Confirm
RXRESUME_API_KEY/rxresumeApiKeyis valid for your Reactive Resume instance. - Confirm the selected Reactive Resume account actually has resumes.
Project list is empty in settings
- Root cause is usually the source resume on rxresu.me having an empty Projects section.
- Add projects directly in RxResume first.
- Re-select/refresh the base resume in JobOps and regenerate the PDF.
Project checkboxes look wrong after changing base resume
- Save after selecting the new base resume.
- Re-open Reactive Resume section and verify project IDs from that resume.
- Re-run PDF generation to apply the new project map.
Changes did not affect an already generated PDF
- Settings changes apply to new generation runs.
- Regenerate PDFs for already-ready jobs.
PDF generation fails because the renderer is unavailable
- Ensure
tectonicis installed on the machine running JobOps. - If the binary is installed outside your normal shell
PATH, setTECTONIC_BINto the executable path. - Ensure
typstis installed when using the Typst renderer. - If the Typst binary is installed outside your normal shell
PATH, setTYPST_BINto the executable path. - Re-run PDF generation after fixing the local renderer dependency.
Best practices
- Keep base resume projects complete and up to date in RxResume.
- Use Must Include sparingly for cornerstone projects.
- Keep AI-selectable pool broad enough for job-specific relevance.
- After major resume edits, regenerate PDFs for active high-priority jobs.
Add “context projects” even if they are usually hidden
The LLM only knows what exists in your resume data.
That means there is real value in adding additional projects in RxResume, even if you keep them hidden by default:
- They increase the AI’s context about your skills and range.
- They can be toggled on only when relevant to a role.
Example:
- If your main background is not Android, but you have one credible Android side project, include it in RxResume, but keep it hidden by default.
- For a mobile role, the AI can enable that project automatically based on the job description.