mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-07-25 01:15:26 +10:00
b404dbd42a
* feat(applications): job application tracker with AI copilot Add an Applications module at /dashboard/applications: pipeline board (dnd-kit), table view with bulk actions, Insights (fit tiles, funnel, sources, shareable funnel-flow SVG), campaigns, tags, CSV import, and Add/Edit/Detail slide-overs. Each application links a live Reactive Resume. AI "Application Copilot" (applications.ai.*): job-posting autofill, resume↔job match score (fit ring), resume tailoring, and cover-letter / follow-up drafting — via the user's configured provider. Board cards + table rows get context menus (edit / move / archive / delete). Charts are CSS/SVG (no new chart dep); adds a UI Checkbox. Also includes local TanStack devtools setup and toolchain bumps. Claude-Session: https://claude.ai/code/session_01TEeRHnEayw2MFCShFRyL5f * feat(applications): close follow-up gaps + squash migrations Finish the deferred/open items on the applications tracker: - Cover-letter upload re-enabled. Fix the storage blocker by deriving the key extension from content type (buildFileKey/EXTENSION_BY_CONTENT_TYPE) instead of hardcoding .jpeg, so PDFs serve correctly and non-JPEG image avatars keep working under FLAG_DISABLE_IMAGE_PROCESSING. Add coverLetterUrl/coverLetterName columns + Documents-section upload/remove. - Contacts editor in the detail sheet (add/edit/remove, keyed per app). - Board caps rendered cards per column (COLUMN_PAGE_SIZE=50 + "Show more"). - Extract new Lingui messages across locales. - Guard coverLetterUrl to http(s)/relative at the API boundary. Squash the five branch-only application-table migrations (create -> +tags -> +cover-letter -> drop -> re-add) into a single clean CREATE TABLE via drizzle-kit generate. Claude-Session: https://claude.ai/code/session_01TEeRHnEayw2MFCShFRyL5f * chore: update dependencies * fix(web): address React Doctor findings — compiler, purity, query, component structure prefer-module-scope-pure-function: hoist buildSubtitle, getDecimalPlaces, handleLocaleChange, onLocaleChange, stop, listContent/groupedListContent to module scope so they aren't rebuilt on every render. react-compiler-todo (??=): rewrite draft.metadata.styleRules ??= [] to the non-assignment form to unblock auto-memoization. set-state-in-effect: derive updatedAtLabel at render time instead of syncing it through useState + useEffect. query-destructure-result: destructure useQuery results at call site in resume-analysis and resume-thumbnail to follow TanStack Query v5 convention. only-export-components: extract non-component exports to sibling .ts files so Fast Refresh can preserve component state: - getNextWeights → typography/get-next-weights.ts - detectJsonImportType + ImportType → dialogs/resume/import.utils.ts - getLocaleOptions → features/locale/locale-options.tsx - preview helpers + DEFAULT_PDF_PAGE_SIZE → preview.shared.utils.ts - resolveHighlightToolbarState + defaultHighlightColor → rich-input.utils.ts - computeDelta + getSparklinePoints → statistics.utils.ts no-multi-comp: split multi-component files into focused companions: - ResumePane + ToolbarButton → routes/agent/-components/resume-pane.tsx - DesktopBuilderShell → builder/$resumeId/-components/desktop-builder-shell.tsx - MobileBuilderShell + helpers → builder/$resumeId/-components/mobile-builder-shell.tsx - setBuilderLayout/getBuilderLayout moved to -store/sidebar.ts fix(tests): add Resume type import to section-builder mocks and cast partial mock data as unknown as Resume to satisfy stricter type checking; fix noExplicitAny Biome errors in the same mocks. * feat(applications): improve performance * chore: fix knip issues * perf(builder): halve per-keystroke render cost Section-form fields called `form.handleSubmit()` on every keystroke, which re-validated the whole form and toggled submit state — firing the render cascade twice per character (~6809 renders/keystroke, FPS dropping to 9). Persist via a form-level `listeners.onChange` instead and drop the per-field `handleSubmit()` (basics, custom-fields, design). Narrow header/dock resume subscriptions to metadata slices so they no longer re-render on content edits. Cuts renders 6809 -> 3403 per keystroke (50%), 0 frame drops. Save, preview, and design controls verified working; 449/449 web tests pass. * perf(home): eliminate hero CLS from unreserved video box The hero <section> is `flex items-center` (shrink-to-fit), so the video wrapper's width depended on the video's intrinsic size, which only resolves after the media loads. aspect-ratio couldn't reserve height without a definite width, so the video grew from ~190px to ~563px after first paint and shoved the centered hero text down ~373px (CLS ~0.095). Give the wrapper a definite width (w-full + mx-auto on the CometCard) and set an explicit aspect ratio + width/height on the video so its box is reserved before load. CLS 0.095 -> 0; hero stays visually centered at max-w-4xl. * docs: add application tracker guides * chore(db): squash application migrations * fix(email): import React in auth template for server-side rendering compatibility * chore(release): v5.2.1 * Refactor resume rendering and builder workflows * fix: address application tracker review findings
122 lines
5.0 KiB
Plaintext
122 lines
5.0 KiB
Plaintext
---
|
|
title: "Exporting your resume"
|
|
description: "Download your resume or cover letter from Reactive Resume as PDF, DOCX, Markdown, or JSON, and pick the right format for each situation."
|
|
---
|
|
|
|
Reactive Resume can export your resume, and your cover letter separately when you have one, in four formats.
|
|
|
|
| Format | Best for |
|
|
| --- | --- |
|
|
| **PDF** | Job applications, recruiter emails, printing, and public resume downloads. |
|
|
| **DOCX** | Further editing in Microsoft Word, Google Docs, or Pages. |
|
|
| **Markdown** | Plain-text edits and sharing structured content with AI tools. |
|
|
| **JSON** | Backups, restoring a resume later, or importing into another Reactive Resume account. |
|
|
|
|
## Open the download dialog
|
|
|
|
Every export runs from the same **Download** dialog. You can open it two ways.
|
|
|
|
<Steps>
|
|
<Step title="Open your resume in the builder">
|
|
Go to the dashboard and open the resume you want to export.
|
|
</Step>
|
|
|
|
<Step title="Click Download">
|
|
Select the **Download** button in the top-right of the builder header, next to the sidebar toggle. You can also open the same dialog from the **Export** section of the right sidebar.
|
|
</Step>
|
|
|
|
<Step title="Pick what to export">
|
|
At the top of the dialog, use the tabs to choose **Resume** or **Cover letter**. The **Cover letter** tab is only available when your resume contains a visible cover letter section.
|
|
</Step>
|
|
|
|
<Step title="Choose a format">
|
|
Select **Download** on the format you want. The dialog closes and your browser saves the file using the resume name as the filename.
|
|
</Step>
|
|
</Steps>
|
|
|
|
<Tip>
|
|
While an export is running, the trigger button and format buttons show a spinner and stay disabled until the file is ready.
|
|
</Tip>
|
|
|
|
## Export the resume and cover letter separately
|
|
|
|
If your resume includes a [cover letter section](/guides/adding-a-cover-letter), the download dialog treats the resume and cover letter as two distinct documents.
|
|
|
|
- The **Resume** tab exports only your resume content and excludes cover letter sections.
|
|
- The **Cover letter** tab exports only visible cover letter sections, rendered full width on their own page.
|
|
|
|
You no longer need to reorder pages or hide sections manually to produce a resume-only or cover-letter-only PDF. Select the tab that matches what you want, then pick a format.
|
|
|
|
<Info>
|
|
The **Cover letter** tab is disabled when the resume has no cover letter section, or when every cover letter section or item is hidden.
|
|
</Info>
|
|
|
|
## Export as PDF
|
|
|
|
Choose **PDF** when you need a file that preserves your resume layout.
|
|
|
|
Use PDF for:
|
|
|
|
- uploading to job applications;
|
|
- emailing recruiters or hiring managers;
|
|
- printing from your browser or a print service;
|
|
- sharing a finished copy outside Reactive Resume.
|
|
|
|
<Info>
|
|
The PDF is generated from your current resume data, template, typography, design, layout, and page settings.
|
|
</Info>
|
|
|
|
## Export as DOCX
|
|
|
|
Choose **DOCX** when you want to continue editing your resume or cover letter in a word processor.
|
|
|
|
Use DOCX for:
|
|
|
|
- making final manual edits in Microsoft Word;
|
|
- collaborating with someone who prefers Word or Google Docs;
|
|
- submitting to a system that requires a Word document.
|
|
|
|
<Warning>
|
|
DOCX exports are useful for editing, but the visual layout may not match the PDF exactly. Use PDF when exact visual fidelity matters.
|
|
</Warning>
|
|
|
|
## Export as Markdown
|
|
|
|
Choose **Markdown** when you want a plain-text version of your resume or cover letter that is easy to edit anywhere and easy to feed into AI tools.
|
|
|
|
Use Markdown for:
|
|
|
|
- pasting into an AI assistant to review, rewrite, or tailor content;
|
|
- quick edits in any text editor without formatting overhead;
|
|
- storing a lightweight, diff-friendly copy in version control.
|
|
|
|
Section headings, lists, links, and rich-text formatting from the builder are preserved as standard Markdown.
|
|
|
|
For examples and common workflows, see [Exporting a resume to Markdown](/guides/exporting-resume-to-markdown).
|
|
|
|
## Export as JSON
|
|
|
|
Choose **JSON** when you want a structured backup of your resume.
|
|
|
|
The JSON export includes your full resume content and settings. You can import it later from the dashboard to restore the resume or create another version.
|
|
|
|
JSON is also useful when working with AI assistants that understand structured data. Export JSON, ask an assistant to review or edit the fields, then import the revised JSON as a new resume.
|
|
|
|
<Info>
|
|
JSON export is only available on the **Resume** tab. Cover letters are exported through PDF, DOCX, or Markdown.
|
|
</Info>
|
|
|
|
<Warning>
|
|
Review AI-generated changes before importing or using them. AI assistants can make mistakes or add details that do not reflect your experience.
|
|
</Warning>
|
|
|
|
## Printing your resume
|
|
|
|
To print, export a **PDF** and print it from your PDF viewer or browser. This gives you the same layout that recruiters see when you send them the file.
|
|
|
|
## Public resume downloads
|
|
|
|
If your resume is public, visitors can download a PDF from the public resume page. You can enable public access in the builder's **Sharing** section.
|
|
|
|
For the full public sharing workflow, see [Sharing your resume publicly](/guides/sharing-your-resume-publicly).
|