Documentation Index
Fetch the complete documentation index at: https://docs.rxresu.me/llms.txt
Use this file to discover all available pages before exploring further.
Highlights
- Right-to-left PDF support across all templates. Resumes in RTL locales now mirror layout, alignment, and rich text direction consistently across every PDF template, not just Rhyhorn. 24c882fa9, 266bc291e
- More reliable social login for upgraded accounts. OAuth sign-in now reconciles existing email-based accounts with legacy GitHub-linked profiles, so migrated users can sign back in without creating duplicate accounts. 86fff7237
Resume Rendering & Exports
- Added shared RTL layout helpers and a single
rtlflag on the PDF render provider, then migrated every template page to mirrored layout styles. 24c882fa9 - Fixed plain rich text rendering in PDFs by routing paragraph content through dedicated
PdfTextrenderers. 24c882fa9 - Mapped legacy
Times New Romanfont selections to the PDF-compatibleTimes-Romanfamily so older resumes keep rendering correctly. 24c882fa9 - Reduced the default vertical gap between list items in PDF templates for tighter, more readable bullet and numbered lists. 17cddbad6
- Fixed color parsing for 3-digit hex values such as
#abc, which previously failed to convert correctly in the builder. 273e17c0d
Authentication
- Added OAuth profile reconciliation that matches returning users by normalized email and legacy GitHub username/display name before creating a new account. 86fff7237
AI & Agent Workflows
- Fixed Agent thread deletion to remove attachments and mark the thread deleted before storage cleanup, preventing inconsistent database state when storage cleanup fails partway through. 7557ab13a
Docs & Maintenance
- Updated the Docker quick-start guide to use a shallow clone for faster setup. Thanks to @umairkhurshid. 75e944613
- Centralized RTL locale detection in
@reactive-resume/utils/localeand removed duplicate web-side helpers. c66560ee1 - Ran React Doctor lint passes, refreshed translations, and added dynamic imports where appropriate. 39e88dd36
- Updated workspace dependencies. 3596102c6, 6ec4da791, 7eea6675c
Self-hosters, please review your environment before upgrading. The production image now runs a dedicated Hono
server from
apps/server/dist/index.mjs. Remove OAUTH_DYNAMIC_CLIENT_REDIRECT_HOSTS,
CLOUDFLARE_ACCOUNT_ID, and CLOUDFLARE_API_TOKEN from your environment if they are still set.Local development now uses PORT=3000 for Vite and SERVER_PORT=3001 for the Hono server. This should not affect
production deployments.Highlights
- Dedicated Hono server runtime. Reactive Resume now builds a separate
apps/serverapp that mounts auth, RPC, MCP, OpenAPI, uploads, schema JSON, SEO endpoints, health checks, and the built web app from one Node.js process. ecc1fd9a8, 9033da082 - Clearer self-hosting runtime model. The Docker image now builds both
webandserver, runsnode apps/server/dist/index.mjs, and keeps/api/healthpointed at the production server port. ecc1fd9a8 - Safer Agent restore behavior. Agent edits now store a resume snapshot before applying a patch, so restoring an action can roll the draft back to the exact prior state and mark later agent patches as rolled back. d961e6535
Self-Hosting & Environment
- Added
SERVER_PORTfor local development. Vite serves the web app onPORTand proxies API, MCP, upload, well-known, and schema routes to the Hono server onSERVER_PORT. - Updated the production Dockerfile to copy
apps/web/dist,apps/server/dist, server package dependencies, and migrations into the runtime image. The production start command is nownode apps/server/dist/index.mjs. - Updated
compose.ymlto use the published image by default and load app configuration through.envinstead of embedding the main app environment block inline. - Updated
compose.dev.ymlto expose both3000and3001, add an app profile, and health-check the Hono server port. - Startup checks now run from the server process, including database migrations and local storage writability validation when S3-compatible storage is not configured.
- Removed
OAUTH_DYNAMIC_CLIENT_REDIRECT_HOSTS. Dynamic OAuth client registration now allows the app origin and loopback callbacks by default. - Added
FLAG_ALLOW_UNSAFE_OAUTH_REDIRECT_URIfor trusted self-hosted deployments that intentionally need arbitrary redirect URIs, including custom schemes, private hosts, or non-loopbackhttp://callbacks. Keep this disabled on public or multi-tenant instances. 445359ebe - Removed the documented
BETTER_AUTH_URLandBETTER_AUTH_SECREToverride path. Auth metadata, JWKS, and OAuth callback URLs are now derived fromAPP_URLandAUTH_SECRET. - Removed Cloudflare URL extraction environment variables. Live Agent web research now depends on the selected AI provider and model supporting native web search.
- Renamed the Crowdin token example from
CROWDIN_PERSONAL_TOKENtoCROWDIN_API_TOKEN.
App Runtime & Architecture
- Moved API/auth/MCP/OpenAPI/static route ownership out of the web app and into
apps/server. - Changed the web app build to a Vite/TanStack Router SPA output under
apps/web/dist, with the Hono server serving the built app and static fallback responses. - Added
robots.txt,sitemap.xml,llms.txt, structured data helpers, and server-owned SEO responses. 8fcf0ec64 - Added package-boundary rules to Turborepo and per-workspace
turbo.jsonfiles to enforce browser, server, domain, adapter, and infra ownership. - Split focused domains into new packages:
@reactive-resume/docx,@reactive-resume/mcp, and@reactive-resume/resume. - Moved development-only scripts from
packages/scriptstotoolingso workspace packages contain app/runtime code rather than private repo tooling. - Reorganized API implementation into feature-owned modules under
packages/api/src/features/*.
AI & Agent Workflows
- Replaced stored inverse JSON patches with
snapshot_dataon agent actions. Legacy actions without snapshots remain non-restorable. - Added a migration that adds
agent_actions.snapshot_dataand dropsagent_actions.inverse_operations. - Updated Agent UI and docs from “Revert” language to “Restore” language to clarify that restoring an older action rolls back that action and later applied agent patches.
- Updated Agent tool documentation to describe provider-native
web_searchbehavior instead of app-owned URL fetching. - Kept unsafe/private AI provider base URLs behind
FLAG_ALLOW_UNSAFE_AI_BASE_URL, with public HTTPS provider URLs remaining the default safe path.
Resume Rendering & Exports
- Moved browser PDF preview code into
apps/web/src/features/resume/previewand public resume viewer code intoapps/web/src/features/resume/public. - Added direct PDF.js canvas preview and thumbnail rendering through legacy PDF.js entrypoints, with tests that prevent browser preview code from importing the modern PDF.js runtime. 7cade6980
- Added explicit
@reactive-resume/pdf/browserand@reactive-resume/pdf/servergeneration adapters. - Simplified shared sidebar summary handling for PDF templates and added focused coverage for featured summary behavior. 17f351171
Docs & Maintenance
- Added new use-case docs for free, open-source, self-hosted, privacy-focused, export/share, AI, and API/MCP resume workflows.
- Rewrote contributor architecture docs around the new monorepo runtime, package ownership model, and boundary checks.
- Updated self-hosting Docker and SSO docs for the Hono runtime, removed environment variables, OAuth redirect safety, provider-native Agent web research, and local development ports.
- Added and updated architecture notes, plans, and specs for the Hono migration, monorepo reorganization, Docker tagging, manifest-only PWA behavior, unsafe OAuth redirect policy, and Agent snapshot restore design.
- Updated Knip configuration so server runtime dependencies that are imported by the built server bundle are treated as intentional dependencies.
Self-hosters using AI features: saved AI providers now require
ENCRYPTION_SECRET, and the new AI Agent
workspace also requires REDIS_URL. Agent attachments require S3-compatible storage for private objects; local
filesystem storage still works for the rest of the app, but rejects private agent attachments.Highlights
- New AI Agent workspace. Added a dedicated full-screen Agent workspace for working on isolated AI draft copies of resumes. Threads include a sidebar, chat, tool activity, file attachments, and a read-only resume preview with PDF download support. #3062

- Reviewable and reversible agent edits. Agent-applied resume patches now appear as expandable tool activity, with raw JSON Patch details, operation summaries, revert support, and clear conflict handling when the resume has changed. #3062

- Public resumes now render with PDF.js. Public resume pages now use the PDF.js-based viewer path, improving parity between the public page, builder preview, and exported PDF. #3061
AI & Agent Workflows
- Added server-side AI provider management with encrypted credentials, provider testing, and provider/model capability checks. This replaces the old local AI store and keeps AI configuration centralized. #3062
- Added Agent tools for reading resume drafts, using provider-native web search when supported, reading supported attachments, asking follow-up questions, and applying JSON Patch updates to the AI draft. #3062
- Added archive and delete actions for Agent threads, including read-only archived states, in-flight run cleanup when archiving, and ownership checks before destructive deletion. #3062
- Added attachment upload rate limits, private S3 ACLs for Agent attachments, runtime validation for streamed messages, transactional patch/action writes, and a unique message sequence index for safer Agent runs. #3062
- Added
FLAG_ALLOW_UNSAFE_AI_BASE_URLfor trusted self-hosted deployments that need private or local AI provider URLs, while still restricting provider URLs tohttporhttps. Thanks to @SirSKillz. #3059
Resume Rendering & Fonts
- Restored legacy local font names from v5.0.x by mapping them to metric-compatible bundled web fonts, preventing upgraded resumes from unexpectedly changing line breaks, page counts, or overall layout. Thanks to @JamesGoslings. #3057
- Added metric-compatible aliases for
Times New Roman,Cambria,Arial,Garamond, andCalibri, including Carlito as the Calibri-compatible target. #3057 - Improved resume preview spacing normalization and added focused coverage for the public PDF viewer and preview helpers. #3061, #3062
Self-Hosting, Docs & Maintenance
- Added a development Dockerfile plus improved Compose development services and health checks for running Reactive Resume with local dependencies. 1294d3354
- Updated self-hosting documentation for Redis, encrypted AI provider credentials, provider-native web research, private Agent attachments, S3 path-style storage, and unsafe AI base URL behavior. #3062, #3059
- Added new and refreshed guides for the AI Agent workspace, Agent tools, AI setup, builder dock, dashboard management, importing, exporting, public sharing, and private notes. #3062, affa1d664
- Removed a stale Custom CSS documentation link now that custom CSS is no longer part of the v5.1 renderer flow. #3056
- Added a Reactive Resume design system reference and updated dependencies across the workspace. #3062
Highlights
- New Scizor resume template. Added the new Scizor layout to the template lineup, including builder support, schema/docs updates, and localization strings. 00dafd0c6, 5f63dc876

- Smarter page settings in the builder. Empty sections are now hidden from page settings to reduce noise and make layout management easier. #3052
- Faster, smoother preview loading. Improved resume preview loading behavior and added focused tests for preview components. 92a0e3ddb
Resume Builder & PDF Export Fixes
- Increased header name line height in PDF templates to prevent descender clipping. #3050
- Improved CJK rendering reliability across PDF output, including better handling of hyphenation callbacks and italic fallback behavior. 62b0a1d53, 83a407bc1, 33103536a, 64ac3ff32
- Fixed split-row right-side content promotion behavior to preserve layout consistency in exports. #3039
- Improved rich text and section data handling by filtering invalid or empty items and tightening schema validation for safer rendering. 334ea48bc, 0713cf20d, 4ebe9e5a6
Quality, Docs & Maintenance
- Expanded automated coverage significantly, including monorepo-wide unit/component tests and an additional ~500 tests across core packages. 6a01207b6, #3038
- Migrated the test environment from jsdom to happy-dom for faster and more stable test runs. 7a60a42a0
- Updated documentation and defaults, including AGENTS guidance and export format notes. #3054, 71aadbd73, a93e7bd19
- Synced translation catalogs from Crowdin and added template-specific translation updates for Scizor. #3053, e574d4005, #3026, #3023, c5787fe15
- Updated dependencies and repository cleanup tasks, including PostCSS refresh and Knip fixes. e35ff8391, 3cd228bd8, 978cbaf1f, 0daf868cd
Self-hosters using local storage: the official Docker image now sets
LOCAL_STORAGE_PATH=/app/data and validates that the directory is writable at startup. If you override the container environment, keep LOCAL_STORAGE_PATH pointed at an absolute writable path.Highlights
- AI Resume Assistant. Added a chat window inside the resume builder for targeted resume edits. The assistant can draft JSON Patch proposals, show before/after previews, and lets you accept or reject each change before anything is applied. #3022
- Better CJK PDF output. Added automatic CJK fallback font registration so Chinese, Japanese, and Korean text renders correctly in both the live PDF preview and exported PDFs. #3016
Resume Builder & Exports
- Added a builder dock shortcut for the AI assistant, with a draggable and resizable desktop window plus a mobile sheet layout. #3022
- Added review controls for AI-generated proposals, including proposal queues, raw JSON Patch inspection, accept/reject actions, and stale-proposal handling when the resume changes. #3022
- Fixed rich text PDF rendering when text blocks contain top-level inline content around lists or paragraphs. 42e83cc6
- Kept Latin-only PDF output unchanged while applying fallback fonts only when CJK glyphs are needed. #3016
Sharing & Imports
- Fixed public resume URLs returning a server error when the owner-only dashboard title was redacted to an empty string for viewers. #3012
- Improved v4 JSON imports so custom section content, hidden items, and skill/language levels migrate correctly into v5 resumes. #3013
Self-Hosting
- Fixed Docker local-storage health checks by resolving the data directory through
LOCAL_STORAGE_PATHinstead of relying on the runtime working directory. #3004 - Added startup validation for the local storage directory so misconfigured volume permissions fail early with a clearer error. #3004
- Updated
.env.example, the Dockerfile, Compose configuration, and Docker self-hosting docs for the new local storage path behavior. #3004
Maintenance & Localization
- Synced translation catalogs from Crowdin. #3005
- Updated dependencies and lockfile entries needed for the AI assistant, PDF rich text normalization, and related test coverage.
Highlights
- Free-form resume pages. Added a new Free-form page format for resumes that should keep A4 width while allowing content to flow beyond a fixed page height. This is useful for long-form web-style resumes while preserving predictable export sizing. #2991
- PDF downloads through the API. Added an authenticated
GET /resumes/{id}/pdfendpoint so API clients can generate and download a resume PDF directly. The OpenAPI spec has been updated with the new route. 5042ad9d
Resume Builder & Exports
- Fixed nested lists in PDF rendering so rich text with sub-lists exports correctly. #2993
- Fixed inline item links in exported PDFs and made resume links consistently underlined. #2978
- Added italic font registration for PDF generation and falls back to IBM Plex Serif when a selected font is unavailable. 6d54ffa8, 4c771307
- Improved header name line height across templates for cleaner PDF output. #2976
- Added prose styles to the rich text editor so formatted content is easier to read while editing. #2984
- Added a preview control to toggle page stacking and adjusted the default preview zoom for a better builder canvas experience.
Fixes
- Fixed a runtime error when enabling two-factor authentication. #2981
- Fixed excessive re-renders in the Experience section when editing role progression. #2983
- Removed route preloading to avoid unwanted route work while navigating the app. #2949
- Relaxed resume data parsing to accept compatible objects with additional fields. #2793
- Updated dialog layout behavior so tall dialogs scroll correctly on smaller screens.
- Updated the sample resume picture URL to point to a valid bundled image.
Self-Hosting
- Automatically loads
.envfrom the workspace root for server-side code, improving local and self-hosted configuration behavior. #2987 - Restored the local storage path to
/app/datain the official container image and clarified the Docker storage documentation. #2990
Maintenance & Localization
- Synced translation catalogs from Crowdin. #2995, #2997
- Removed unused dependencies, stale generated cache artifacts, and obsolete tests from the repository.
Self-hosters, please read before upgrading.
- No more Browserless / Chromium dependency. From v5.1.0 onwards, you do not need to run a
printer, Browserless, or headless Chrome service alongside Reactive Resume. PDF generation is now performed entirely in your browser via@react-pdf/renderer. TheBROWSERLESS_TOKEN,PRINTER_ENDPOINT,PRINTER_APP_URL, andFLAG_DEBUG_PRINTERenvironment variables are no longer read and can be removed from your.env. - Database migrations. This release ships several new schema migrations to bring the resume model up to date. They run automatically on container start, but you should back up your PostgreSQL database before upgrading in case rollback is needed.
- Custom CSS has been removed. Because the resume PDF is no longer produced by a headless browser, raw CSS no longer applies to the exported document. A first-class template-customization story is on the roadmap for a future release.
Highlights
- PDF generation moved fully client-side.
@react-pdf/renderernow produces the exported PDF directly in your browser, and the in-builder live preview is rendered withpdfjs, so what you see in the preview is exactly what you’ll download. - All resume templates re-ported. Azurill, Bronzor, Chikorita, Ditgar, Ditto, Gengar, Glalie, Kakuna, Lapras, Leafish, Meowth, Onyx, Pikachu, Rhyhorn, and Scizor have all been re-implemented on the new renderer with section-by-section parity.
Resume Builder
- Pixel-accurate live preview. The builder preview is now rendered with
pdfjsagainst the same document tree used for export, eliminating the long-standing “looks fine in the preview but breaks in the PDF” class of bugs. - TanStack Form everywhere. All 35 form-bearing surfaces in the app — login, register, forgot-password, resume sections, settings, and dialogs — have been migrated to TanStack Form.
react-hook-formand@hookform/*packages have been removed. - TanStack Query is the single source of truth for resume state. The previous standalone Zustand resume store has been retired; optimistic updates, refetching, and error recovery now flow through one cache, behaving consistently across tabs and reloads.
- Native page format and margins. Page size and margin controls are now expressed directly to
@react-pdf/renderer, replacing the Puppeteer-specificprintMarginTemplatesworkaround.
Self-Hosting
- One-service deployment. Self-hosted Compose files no longer need a
printer:service block. The minimum stack is now just Reactive Resume + PostgreSQL (with optional S3-compatible storage and SMTP). /api/healthsimplified. The health endpoint now reportsdatabaseandstorageonly, returning HTTP503if either dependency is unhealthy. There is no longer aprinterfield to monitor.- Updated documentation. The Self-Hosting, Quickstart, Development, Architecture, and Legal pages have all been refreshed to describe the simplified single-service deployment.
Authentication & AI
- Better Auth retained end-to-end with all nine plugins — passkeys, two-factor authentication, OAuth (Google / GitHub / LinkedIn / custom), API keys, dynamic OAuth client registration, dashboard, sentinel, and admin. Existing sessions and logins carry over after the upgrade.
- AI features carry over (Resume Analysis, AI Chat with JSON Patch tool calls, PDF / DOCX import) with the same provider matrix (OpenAI, Google Gemini, Anthropic, Ollama, OpenRouter). The AI router and service layer have been cleanly decoupled from the jobs / tailor flow for a more modular surface.
Removed
- Custom CSS option in the resume builder. With rendering bound to
@react-pdf/renderer, raw CSS no longer applies to the exported PDF. A structured customization API will return in a future release. PRINTER_*andBROWSERLESS_*environment variables, theprinter/{resumeId}route, thegetByIdForPrinterserver function, and the printer-token signing code are all gone.
Maintenance
- Removed dead printer-token utilities and the legacy public RPC surface for printer-only resume reads.
- Tightened the boundary between server-only and client-only code: server modules (database, storage, auth) are lazy-imported so they no longer leak into the client bundle.
- Reverse-proxy timeout guidance in the nginx example has been simplified now that no long-running PDF generation request flows through the proxy.
Features & Improvements
- Added the new Meowth resume template (compact ATS-friendly layout with an inline three-column entry header), thanks to @JamesGoslings. #2923
- Added support for custom icon colors on section items, thanks to @Ruzenie. #2928
- Improved account-related email UX with better templates for password reset and email verification. b87f2007
- Consolidated separate settings pages into a single Integrations page for a more streamlined configuration flow. 5d8126d4
Fixes
- Added a targeted Chinese localization fix for the
Skillssection title (zh-CN). #2931 - Allowed MCP localhost loopback only for local MCP clients, improving local integration behavior while keeping external access restrictions intact. 623ca5c6
Maintenance & Localization
- Updated dependencies and lockfile, including cleanup of unused exports (Knip). e1bccbcc
- Synced translation catalogs from Crowdin. #2922, #2925, #2926, #2932, #2934, #2935
- Updated docs to list Meowth alongside existing templates. #2929
Highlights
- Added OpenRouter as an AI provider, thanks to @iagodemacedo. #2906
- Added Chinese font options, thanks to @Platinum1154. #2905
- Added text color support to the rich text editor, including DOCX export handling for colored text, thanks to @Platinum1154. #2903
- Fixed MCP tool names for Claude Desktop compatibility. #2885
- Improved Docker-based local development support and refreshed self-hosting setup guidance. 849aad64, c0387298
Fixes & Security
- Thank you to @shaxbozaka for running a security audit on Reactive Resume and helping make the app more secure.
- Hardened auth, OAuth, AI URL validation, printer/export endpoints, resume access controls, Browserless configuration, and public route exposure. a42dbcd4
- Removed the public RPC surface for the printer-only resume fetch endpoint by moving it behind a server function, further shrinking the attack surface for
getByIdForPrinter, thanks to @shaxbozaka. - Corrected Computer Modern Sans italic font file mappings, thanks to @russellbrenner. #2881
- Improved email handling and user lookup in OAuth configuration, thanks to @VedantBhawsar. #2874
- Aligned role period text in experience items, thanks to @JamesGoslings. #2908
- Reduced resume preview wheel zoom sensitivity, thanks to @GoldenSection0618. #2911
- Prevented orphaned section headings at page breaks, thanks to @5queezer. #2851
- Added top margin handling for subsequent PDF pages, based on feedback from @trigger-xyz. bbc38d2f
Maintenance & Localization
- Updated dependencies and lockfile, including security-focused package pins and Vite+ version pins. c6e8df0a, 847d69b6, 9b3916d4
- Added
SECURITY.md. 9e1e593d - Added focused tests for auth, printer/export, URL validation, form edge cases, rich text DOCX output, font handling, and CSS sanitization hardening. d0af9f4b
- Synced translation catalogs from Crowdin and moved syncing to GitHub Actions. #2886, #2918
New Contributors
- @russellbrenner, @VedantBhawsar, @JamesGoslings, @GoldenSection0618, @iagodemacedo, and @Platinum1154
Features & Improvements
- Added Resume Analysis in the resume builder right sidebar: run an on-demand AI review for an overall score (0 to 100), a dimension scorecard, strengths, and prioritized suggestions. Results are saved per resume and reload after refresh.
- When AI features are disabled, the analysis section shows a short notice with a link to AI Settings so you can enable your provider and model first.
- Improved the MCP server experience: updated tools, resources, and prompts; added an MCP server card at
/.well-known/mcp/server-card.jsonfor compatible clients; refreshed the Using the MCP server guide.
Fixes
- Fixed #2865, incorrect spacing between resume section items in shared layouts.
- Fixed #2868 affecting resume item presentation and linked titles in shared item components.
Maintenance & CI
- Downgraded the Cosign installer action to v3 in the Docker build workflow for more reliable image signing.
- Synced translation catalogs from Crowdin. #2864
- Dependency and lockfile updates (including changes bundled with MCP and analysis work).
Features & Improvements
- Updated shared resume item layouts (Experience, Education, Awards, Certifications, Publications, References, Volunteer) for better alignment and spacing consistency.
- Generated printer pages now set a meaningful document title from the resume owner’s name (
<Name> - Resume) for cleaner PDF metadata and tab titles. #2863
Fixes
- Fixed #2733, where date ranges could appear on a separate line unexpectedly in resume items. #2862
- Adjusted Experience section form field ordering/labels so
Location,Position, andPeriodare mapped and displayed correctly.
Maintenance & Localization
- Synced translation catalogs across all supported locales.
- Updated dependencies and lockfile, including AI SDK, TipTap, TanStack Query, and Vite+ package aliases.
Features & Improvements
- Added LinkedIn sign-in support for self-hosted instances, including sign-in on the auth page and account linking in settings.
- Improved the sign-in experience by showing loading placeholders while social login providers are being fetched.
- Resume builder panel sizes are now persisted more reliably, making the layout feel more consistent between sessions.
- Added clearer labels for resume sorting and filtering controls on the dashboard.
Fixes
- Improved autosave reliability in the resume builder:
- Unsaved edits are flushed before page unload.
- You now get a clear persistent warning if changes fail to save (for example, due to network issues).
- Strengthened authentication defaults by increasing the minimum password length requirement to 8 characters.
- Improved reliability around resume deletion and server-side error handling for create/update operations.
- Fixed a rare language mix-up during printing/export when multiple print jobs run at the same time, so each PDF/screenshot now reliably uses the correct locale.
- Improved print stability under heavy usage by reusing in-progress PDF and screenshot generation requests for the same resume instead of starting duplicate jobs.
- Hardened printer token signing and token/session/API-key verification paths for better security.
- Improved resilience in AI tailoring output parsing and JSON Resume import normalization.
- Printer service now provides descriptive error messages (“Failed to generate PDF” / “Failed to capture screenshot”) instead of generic internal server errors.
- Job descriptions in the job detail sheet now render HTML formatting (headings, lists, bold text) instead of showing raw tags.
- Fixed the “Tailor Resume” button being incorrectly disabled when AI is not configured — the dialog already supports plain resume duplication as a fallback.
- Fixed the tailor resume flow to open the resume builder in a new tab while keeping the job listing open for reference, instead of navigating away and auto-opening the application page.
- Apply option links in the job detail sheet are now validated before rendering, preventing malformed or potentially unsafe URLs.
- Improved job card loading skeletons to match the actual card layout (logo, title, badges) for a smoother loading experience.
- Centered the “Configure Job Search” empty state on the page.
- Extracted the
JobCardcomponent into its own file for better code organization.
Docs & Localization
- Updated self-hosting and environment variable documentation to include LinkedIn OAuth configuration.
- Synced translations across locales for the latest authentication and save-status messaging.
Features & Improvements
- Added Job Listings with AI-Powered Resume Tailoring, a major new feature that integrates job search (via JSearch API) directly into the dashboard with AI-driven resume tailoring to match job descriptions. #2788
- Search for jobs with filters for location (city, state, country), employment type, remote status, and more.
- View detailed job listings in a slide-out panel with apply links and tags.
- Tailor your resume to a specific job posting using AI — rewrites skills, experience, and references for optimal fit.
- Per-user API quota management with usage tracking in settings.
- Pagination with 30 results per page.
- Added DOCX resume export — generate and download tailored resumes as Word documents. #2788
- Migrated the entire project toolchain to Vite+ (
vpCLI), unifying Vite, Vitest, Oxlint, and Oxfmt under a single developer experience. - Migrated from Biome to Oxlint/Oxfmt for linting and formatting, with a new autofix CI workflow. #2822
- Added Slovenian locale support.
- Added a new
ProgressUI component.
Fixes
- Fixed type issues in auth client and configuration.
- Used RTL-friendly CSS classes across the app for improved bidirectional layout support.
- Removed dead code and unused imports.
- Updated route tree generation and added
routeTree.gen.tsto.gitignore. - Improved animation performance with
willChangestyles on animation components.
Maintenance & Dependencies
- Updated dependencies across the board, including
@typescript/native-preview,vite-plus, and others. - Added database migrations for missing indexes.
- Synced translations from Crowdin. #2820, #2824
- Updated French translation for ‘Volunteer’ to ‘Bénévolat’. #2823
- Multiple translation and language updates across all locales.
New Contributors
- @lukadfagundes
- @Hephaisto-dev
Features & Improvements
- Refactored the component system to
@base-ui/reactacross the app for standardized UI behavior (dialogs, menus, accordions, comboboxes, switches, etc.). - Improved auth infrastructure with Better Auth dashboard/sentinel integration and expanded IP/header handling for proxied deployments.
- Added a dedicated
src/server.tsserver entry usingFastResponsefor better runtime compatibility. - Sidebar button list now scrolls internally on overflow.
Fixes
- Printer endpoint now resolves to IP when using chromedp, improving compatibility with proxied deployments.
- Switched OpenAI integration to
chat/completionsfor resume import and AI features. - AI PDF/DOCX resume parsing is now more robust via direct file send (multimodal input).
- Resume import normalization hardened: section defaults merged, required fields enforced, missing IDs/flags autogenerated.
- Fixed UI migration regressions (accordion behavior, button interaction, right sidebar scrollbar).
- Fixed multi-page PDF crashes and Gemini API ingestion errors.
- Fixed role title styling, role spacing, and issues with skills item rendering and template headings.
Maintenance & Dependencies
- Updated dependencies and lockfile.
- Synced translation strings across locales, including multiple contributions from Crowdin.
- General dependency and code style improvements, plus removal of redundant indexes and plugins.
New Contributors
- @yang-summer
- @FrancocDev
- @obitton
- @jondycz
Fixes
- Show section titles for summary-type custom sections in the resume builder. #2744
- Prevent browser password managers and Edge autofill/save prompts from appearing on AI settings API key fields. #2719
- Replace deprecated Tailwind CSS classes: use
inset-s-*/inset-e-*instead ofstart-*/end-*. - Fix PDF downloader to work correctly in offline mode. #2743
- Make bold formatting visible for
<strong>in the resume rich text editor (uses plainfont-weight: boldfallback if the CSS variable is unset). Fixes #2730 - Prevent credentials sign-in from dropping
session_tokenSet-Cookie, improves login reliability. #2718 - Remove redundant
resume-prefix from download filename; add spacing between pages in shared view. #2709 - Normalize autocomplete tokens for login and register forms. #2714
- Fix improper chips reordering and update dependency/translations. #2711
- Fix clipping of heading in Lapras resume template.
- Remove error-causing plugins in oRPC integration.
- Remove duplicate database indexes; add index for
created_aton user and resume tables.
Features & Improvements
- Added feature flag:
FLAG_DISABLE_IMAGE_PROCESSING(allows disabling image processing site-wide). - Updated Discord invite link in the app and documentation.
- Added comprehensive codebase and architecture documentation in
CLAUDE.md. - Synced latest translations from Crowdin (multiple language updates and additions).
Maintenance & Other
- Refactored auth utility from
originWithtowithHostnameto preserve localhost/127.0.0.1 sibling trust. - Updated dependencies and improved code style.
- Updated documentation and README files.
Features & Improvements
- Added Computer Modern web fonts to the font selector, allowing users to choose from LaTeX-style “Computer Modern” fonts for a classic scientific look.
- Updated dependencies to the latest versions.
Fixes
- Removed Passkey support from the authentication system due to provider compatibility issues.
- Updated dependencies to the latest versions.
Features & Improvements
- Introduced a new MCP (Model Context Protocol) server for managing and editing resumes from MCP-compatible AI tools (Claude Desktop, Cursor, Codex, and others). Supports listing, reading, creating, deleting, locking/unlocking, and patching resumes via natural language. (guide)
- Added an AI Chat panel to the resume builder, allowing conversational resume modifications through tool-calling (JSON Patch operations applied to the resume in real time with visual feedback).
- Added a system prompt and
patch_resumetool for structured, minimal-diff resume edits via RFC 6902 JSON Patch. - Chat history is now persisted per resume in localStorage.
Fixes
- Fixed rendering issues in the Lapras and Onyx resume templates.
- Improved Combobox and ScrollArea UI components.
- Fixed skills item rendering in shared resume components.
- Updated authentication configuration and route handling.
- Updated JSON Schema to match the latest resume data model.
Maintenance
- Updated dependencies to latest versions.
Features & Improvements
- Implemented Atomic Resume Patching API for fine-grained, partial updates to resumes via a new PATCH endpoint. #2692
- API endpoint
PUT /resume/{id}now returns the updated resume object rather than void, with explicit DTOs for input/output. #2688 - Added error logging for API server errors (server-side only) to improve debugging and reliability.
- Refactored and cleaned up imports/exports for clarity and maintainability.
- Added
.devcontainerconfiguration for improved contributor development environment. - Added build status badge and documentation link to README.
Fixes
- General bug fixes and minor improvements.
- Synced latest translations from Crowdin (notably: French, other languages).
- Updated dependencies to latest versions.
Features & Improvements
- Implemented Cover Letter functionality as a custom section in the resume builder. (link)
- Added full-screen mode to the rich text editor for distraction-free writing.
- Introduced a new custom section type:
summary, enabling users to add extra summary sections. - Added
useFormBlockerhook to prevent dialogs from being closed with unsaved form changes.
Fixes
- Fixed keyword spacing issue in the interests section. #2631
- Fixed AI connection test and improved error reporting for AI provider issues.
Features & Improvements
- Brought back Undo/Redo functionality in the resume builder for an improved editing experience.
- Sidebar builder now arranges dynamically based on the section type in each template. #2564
- Added PWA (Progressive Web App) support and updated PDF example file links in documentation.
Fixes
- Removed extra spacing when proficiency is empty. #2607
- Fixed Pikachu template: header/page picture rendering, and respect for
fullWidthproperty. - General template improvements for layout and rendering consistency.
- Fixed GitHub OAuth login for users migrated from previous versions.
- Improved printer service communication and reduced resource usage for more reliable PDF generation.
- Fixed “empty” Git merge remnants in codebase.
Maintenance
- Synced translations from Crowdin (Afrikaans, Persian, Portuguese/Brazilian, others).
- Updated translation sources and configuration.
- Updated package dependencies and fixed self-hosting guide links in README.
- Removed dead code and updated screenshots.
- Other bug fixes and minor improvements (#2542, #2573, #2598).
Features & Improvements
- Added support for printing Free-Form PDFs (no fixed page height), allowing for custom-fit page content. (link)
- Allow overriding the default endpoint for all AI providers, not just Ollama; default endpoint now visible in AI settings.
- Updated the chip input component: supports adding, editing, removing, and reordering keywords for skills and other sections.
- Improved RTL support across the app, thanks to @obreo. (link)
Fixes
- Updated translation configuration to remove line numbers, reducing unnecessary diffs.
- Homepage video optimized for faster loading without quality loss.
- Increased screenshot TTL for resumes to reduce unnecessary regenerations.
- Updated dependencies and translations to latest versions.
Features & Improvements
- Added an agent skill
skills/resume-builderfor agentic AI assistants, enabling resume construction through conversational AI. - Added a guide for how to fit content on a page when exporting to PDF. (link)
- Alert user when content is too tall for a page for easier export troubleshooting.
Fixes
- Ditgar template now respects
fullWidthsetting. - Updated JSON Schema for proper format.
- Updated Discord server invite link.
- Updated dependencies to latest versions.
Maintenance & Fixes
- Updated translations from Crowdin.
- Added Community Spotlight section to the documentation.
- Removed
-r require-metadatafrom the Dockerfile (was not needed). - Fixed inconsistencies in Docker compose documentation examples.
- Fixed username validation to allow hyphens.
- Fixed issues with the printer service’s screenshot and PDF endpoints.
This release is a major overhaul of Reactive Resume. The app has been completely redesigned and rebuilt from scratch for a more intuitive, user-friendly experience.Highlights:
- 2 new resume templates: Ditgar and Lapras
- Passkeys for authentication
- Entirely new user interface and refreshed design
- API access and reference docs
- AI Integration with OpenAI, Google, Anthropic, and Ollama
- Improved font selector with real-time preview
- Expanded and improved documentation, with more how-to guides
- Redesigned template gallery with detailed views
- Resume import from PDF/DOCX (requires AI Integration)
- Stronger infrastructure for better reliability and scalability
- Drag-and-drop for moving items between sections and pages
- Powerful new CSS Editor with autocompletion and highlighting
- Custom sections now support typed extension for finer control
- Icon style selector for indicators (stars, circles, custom, etc.)
- Sidebar width adjustment and full-width page support