- Adjusted border styles for resume headers to improve aesthetics.
- Added versioning functionality to display the current app version dynamically.
- Introduced a new version configuration file for better version management.
- Updated error message for missing job context to clarify the issue.
- Enhanced job description loading logic to prevent state updates on unmounted components.
- Adjusted keyword matching logic to ensure consistency in character sets.
- Introduced HighlightedResumeView to display resumes with matching keywords highlighted.
- Added JDComparisonView for side-by-side comparison of job descriptions and resumes.
- Implemented JDDisplay for read-only job description display.
- Enhanced keyword extraction and matching utilities for better JD-resume analysis.
- Updated ResumeBuilder to fetch job descriptions and integrate JD match analysis.
- Improved UI for previewing enhancements in the enrichment step.
- Added documentation for Docker and Ollama setup.
- Ensure original onClick handlers are preserved in DialogTrigger and DialogClose components.
- Add aria-labelledby attribute to ToggleSwitch for better accessibility.
- Utilize React.useId for unique label IDs in ToggleSwitch.
- Introduced ConfirmDialog component with customizable options for confirmation actions.
- Added Dialog component along with supporting components (DialogTrigger, DialogClose, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription) for a cohesive dialog experience.
- Implemented escape key handling and body scroll prevention when dialogs are open.
feat: create UI components for input, toggle switch, and retro tabs
- Developed Input component with a minimalist design and focus styles.
- Created ToggleSwitch component for binary state toggling with clear labeling.
- Implemented RetroTabs component for tabbed navigation with a brutalist aesthetic.
chore: update README with new features and improve documentation
- Updated README to reflect new features and enhancements in the Resume Matcher application.
- Changed header image for better branding.
chore: update package-lock.json for peer dependencies
- Added peer dependencies to various packages in package-lock.json to ensure compatibility.
feat: add header image asset for improved UI
Accept all changes from update-code-dec-2025, replacing the aerodynamic
structure with the apps/backend + apps/frontend monorepo layout.
- Removed src/ directory structure from aerodynamic
- Added apps/backend with FastAPI backend
- Added apps/frontend with Next.js frontend
- Added Docker support and documentation
- Add Pydantic models for enrichment items, questions, and responses in backend schema.
- Create frontend components for the enrichment modal, including steps for analyzing, generating, and applying enhancements.
- Implement a custom hook for managing the enrichment wizard state using useReducer.
- Integrate API functions for analyzing resumes, generating enhancements, and applying changes.
- Document architectural decisions and component structure for the enrichment feature.
- Add state for generation loading, tailored resume detection, and
regenerate dialog
- Track parent_id from API response to determine if resume is tailored
- Add generation handlers with confirmation dialog for regeneration
- Update tab content to show GeneratePrompt when content is empty
- Add Regenerate button in header when content exists
- Show confirmation dialog before replacing existing content
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create new component that displays when cover letter or outreach tabs
are empty. Shows:
- Icon and title for content type
- Description of what will be generated
- Generate button with loading state
- Alternative message for non-tailored resumes (no job context)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Modify RetroTabs to allow tab selection even when disabled, so users
can see the GeneratePrompt component when clicking on empty cover
letter or outreach tabs. Visual styling for disabled state is preserved.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add parent_id to ResumeResponse interface
- Add generateCoverLetter() function to call new endpoint
- Add generateOutreachMessage() function to call new endpoint
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add two new POST endpoints:
- /resumes/{id}/generate-cover-letter
- /resumes/{id}/generate-outreach
These endpoints allow users to generate content on-demand from the
resume builder, without requiring the settings toggle. They retrieve
job context from the improvements table and call existing generation
functions.
Also update get_resume endpoint to include parent_id in response.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add parent_id field to ResumeFetchData to identify tailored resumes
- Add GenerateContentResponse schema for generation endpoint responses
- Export new schema from schemas module
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add get_improvement_by_tailored_resume() method to database.py that
queries the improvements table by tailored_resume_id. This enables
on-demand cover letter and outreach generation by finding the
associated job description.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changed from .env* (which ignores sample files) to specific
patterns that ignore only local env files while preserving
the .env.sample template.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Display the configured API_URL when backend connection fails,
helping users identify misconfigured port settings.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update next.config.ts to use NEXT_PUBLIC_API_URL env var for API rewrites
- Add FRONTEND_BASE_URL and CORS_ORIGINS to backend env samples
- Enhance env.sample files with clear documentation and port change guide
- All cross-service URLs now configurable via environment variables
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added SectionMeta and CustomSection interfaces to manage dynamic sections in resumes.
- Created DynamicResumeSection component to render custom sections based on metadata.
- Updated ResumeData interface to include sectionMeta and customSections.
- Refactored ResumeSingleColumn and ResumeTwoColumn components to utilize dynamic sections.
- Introduced utility functions in section-helpers.ts for managing section metadata and visibility.
- Enhanced frontend documentation to reflect changes in resume data structure and section management.
- Added support for body font selection in resume settings, allowing users to choose between serif, sans-serif, and mono fonts.
- Updated the compact mode functionality to apply a 0.6x spacing multiplier, ensuring consistent layout while maintaining margins.
- Enhanced CSS styles to incorporate new body font settings and improve overall typography in resume templates.
- Introduced an "Effective Output" summary in formatting controls to display adjustments for margins, spacing, and typography settings.
- Added optional margins parameter to the render_resume_pdf function, allowing for customizable page margins in generated PDFs.
- Updated the PDF rendering logic to apply margins consistently across all pages, improving layout fidelity.
- Adjusted frontend components to ensure margins are handled correctly, enhancing the overall print output quality.
- Introduced a new PDF rendering and template editing guide to improve user understanding of PDF generation and template settings.
- Updated margin calculations in the settingsToCssVars function to account for compact mode, ensuring accurate spacing in generated PDFs.
- Added a link to the new guide in AGENTS.md for easy access to documentation.
- Deleted the Windows-only PowerShell setup script to streamline project setup.
- Added new parameters for resume PDF generation, including header font selection, compact mode, and contact icon visibility.
- Updated backend and frontend components to support the new PDF generation options, improving customization for users.
- Enhanced CSS styles for better layout and spacing in resume templates.
- Added new language configuration endpoints for managing UI and content languages.
- Introduced a LanguageProvider to manage language state across the application.
- Enhanced resume and cover letter generation to support multiple languages.
- Updated frontend components to utilize translations and language settings.
- Expanded documentation to include details on language configuration and usage.
- Updated the cover letter download endpoint to improve error handling and clarity.
- Enhanced CSS to include styles for cover letter printing, ensuring consistent layout with resume prints.
- Refactored the cover letter page component to streamline data fetching and rendering.
- Improved user interface elements in the Resume Builder for better download experience.
- Introduced functionality to generate and update cover letters and outreach messages for resumes.
- Enhanced the resume schema to include fields for cover letter and outreach message content.
- Implemented new API endpoints for updating cover letters and outreach messages.
- Added UI components for editing and previewing cover letters and outreach messages in the Resume Builder.
- Updated feature configuration settings to enable or disable cover letter and outreach message generation.
- Enhanced documentation to reflect new features and usage instructions for cover letter and outreach message functionalities.
- Introduced a centralized API client for consistent API interactions, streamlining the management of API calls across the application.
- Implemented a status caching system to reduce unnecessary LLM health check API calls, enhancing performance and user experience.
- Updated various components to utilize the new status cache, including the Settings and Dashboard pages, allowing for optimistic updates and improved responsiveness.
- Enhanced documentation to reflect the new architecture and caching behavior in the style guide.
- Introduced a centralized API client for streamlined API interactions, improving maintainability and consistency across the application.
- Updated various components to utilize the new API client, including resume upload and fetching functionalities.
- Enhanced the Settings page to load system status on demand, reducing unnecessary API calls.
- Implemented a new WYSIWYG paginated preview system, improving user experience with accurate PDF layout representation.
- Documented recent changes and new components in the style guide.
- Implemented a new WYSIWYG paginated preview that accurately reflects the PDF layout.
- Added controls for zooming and margin visibility, improving user interaction.
- Updated CSS to ensure individual items remain intact during pagination.
- Enhanced the PageContainer component to manage content offsets and prevent overlap.
- Documented the new paginated preview system architecture and pagination rules in the style guide.
- Removed margin parameters from the PDF rendering function, applying margins directly in HTML for WYSIWYG accuracy.
- Updated CSS to prevent page breaks within resume sections and items during PDF generation.
- Introduced new components for paginated resume previews, enhancing the user experience with zoom and margin visibility controls.
- Added utility functions for handling page dimensions and content area calculations, ensuring consistent layout across different page sizes.
- Adjusted the main container to use full height and centered alignment.
- Modified the left and right panels to improve layout consistency and remove fixed height constraints.
- Enhanced the grid structure for better responsiveness and usability.
- Updated padding and margin settings for improved visual appearance.
- Added `db.delete_resume` and `db.list_resumes` methods to manage resume data.
- Introduced `db.set_master_resume` for setting a master resume.
- Enhanced API with a new DELETE endpoint for resumes, including error handling and success messages.
- Updated frontend to support resume deletion with confirmation dialogs and success notifications.
- Implemented template selection and formatting controls in the Resume Builder, allowing users to customize margins, spacing, and font sizes.
- Added two new resume templates: Swiss Single-Column and Swiss Two-Column, with corresponding UI components.
- Updated documentation to reflect new features and usage instructions for the resume template system.
Backend:
- Add JSON mode support for reliable structured output
- Implement retry logic with 2 attempts for LLM calls
- Add bracket-matching JSON extraction for malformed responses
- Simplify prompts to work better across LLM providers
Frontend:
- Add back button to Resume Builder with Swiss style
- Increase resume width from 210mm to 250mm (~20% wider)
- Apply consistent Swiss-style shadows (solid black offset)
- Fix shadow clipping at bottom with proper padding
- Add overflow-y-auto for scrollable resume viewer
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add processing_status field to track resume parsing state (pending, processing, ready, failed)
- Improve LLM prompts with concrete JSON examples for better free model compatibility
- Fix JSON extraction to handle responses without outer braces
- Add Swiss-themed delete confirmation dialog component
- Fix stale localStorage when database is deleted (auto-clear on 404)
- Update dashboard to show real-time processing status with visual indicators
- Update resume viewer with contextual error messages for different states
- Remove on-demand LLM parsing that caused repeated failures
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Introduced a comprehensive installation guide (INSTALL.md) for setting up Resume Matcher for local development, detailing prerequisites, quick start instructions, and CORS configuration.
- Removed outdated setup documents (SETUP.md and SETUP.es.md) to streamline the documentation and avoid confusion.
- Updated README.md to reflect new features and improvements, including multi-provider LLM support and enhanced resume tailoring capabilities.
- Completely removed the scoring feature from the resume improvement process to enhance user trust and focus on keyword alignment.
- Updated related files to eliminate references to scoring, including prompts, database models, and API endpoints.
- Adjusted improvement suggestion generation to align with job requirements without relying on numeric scores.
This change simplifies the resume improvement logic and ensures a more honest representation of the improvements made.
- Update PersonalInfo: fullName → name
- Update Experience: role → title, startYear/endYear → years, descriptions → description
- Update Project: startYear/endYear → years, descriptions → description
- Update AdditionalInfo: skills → technicalSkills, certifications → certificationsTraining
- Add id fields to Experience, Education, and Project models
- Update LLM prompt schema to match new field names
- Fix Resume Viewer to prioritize processed_resume over raw_resume
- Update frontend ResumeResponse interface to match backend
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>