Commit Graph

162 Commits

Author SHA1 Message Date
srbhr
f7b2c9a3df feat(resume): update resume styling and versioning
- 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.
2025-12-31 21:07:43 +05:30
srbhr
8dbef8a095 fix(resume): improve error handling and documentation
- 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.
2025-12-31 19:44:23 +05:30
srbhr
b07e42e2da feat(resume): add JD comparison and highlighting features
- 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.
2025-12-31 19:29:15 +05:30
srbhr
0aa6dc468a fix(dialog, toggle-switch): improve event handling and accessibility
- 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.
2025-12-31 02:05:10 +05:30
srbhr
b91ee4ff01 feat: add ConfirmDialog and Dialog components for user confirmations
- 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
2025-12-31 01:54:32 +05:30
srbhr
ba647ae270 fix: update violation report and improve error logging in resume data fetching 2025-12-30 23:56:51 +05:30
srbhr
0e817bc7d6 fix: enhance error handling, prevent race conditions, and improve documentation 2025-12-30 23:48:08 +05:30
srbhr
3cff3c28f8 fix(llm): improve error handling in health check and update response message
chore(settings): add uv run permission to local settings
fix(config): simplify error detail in LLM configuration update
2025-12-30 23:14:23 +05:30
srbhr
bf7415e623 Merge update-code-dec-2025 into aerodynamic
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
2025-12-30 22:30:56 +05:30
srbhr
bc9187cda1 feat: add logo and favicon to enhance branding in the application 2025-12-30 21:21:40 +05:30
srbhr
68a3b8dfce feat: update dependencies, enhance configuration loading, and improve setup documentation 2025-12-30 21:07:39 +05:30
srbhr
9fdd4a3eb4 feat: implement AI-powered resume enrichment feature
- 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.
2025-12-30 17:55:07 +05:30
srbhr
253c1041ae feat(api-keys): implement API key management with storage and retrieval functionality 2025-12-30 17:10:31 +05:30
srbhr
e431a53fab feat(builder): integrate on-demand generation into resume builder
- 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>
2025-12-30 16:45:26 +05:30
srbhr
f0fd6fba7b feat(builder): add GeneratePrompt component for on-demand generation
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>
2025-12-30 16:45:18 +05:30
srbhr
2e62db94e1 feat(ui): allow clicking disabled tabs to show generate prompt
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>
2025-12-30 16:45:12 +05:30
srbhr
9a222cf383 feat(frontend): add API functions for on-demand content generation
- 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>
2025-12-30 16:44:59 +05:30
srbhr
8fadf247b0 feat(backend): add on-demand generation endpoints for cover letter and outreach
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>
2025-12-30 16:44:53 +05:30
srbhr
01d60231df feat(backend): add schemas for on-demand content generation
- 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>
2025-12-30 16:44:47 +05:30
srbhr
9e8b9b725d feat(backend): add method to retrieve job context for tailored resumes
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>
2025-12-30 16:44:40 +05:30
srbhr
9574c3b7cf feat: enhance pagination logic to prevent orphaned section headers in print 2025-12-30 03:37:29 +05:30
srbhr
9b2f923c32 feat: enhance PDF generation with error handling and troubleshooting guidance 2025-12-30 03:02:04 +05:30
srbhr
7175a138ba fix: update .gitignore to keep .env.sample template
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>
2025-12-30 02:05:03 +05:30
srbhr
17f7b62ddd feat: show expected backend URL in connection error message
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>
2025-12-30 02:00:29 +05:30
srbhr
1552b5653a feat: make port configuration fully environment-driven
- 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>
2025-12-30 01:47:21 +05:30
srbhr
a9152c34ab feat: Implement dynamic resume sections with custom section support
- 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.
2025-12-29 23:56:21 +05:30
srbhr
34c2937c14 feat: enhance resume customization with body font selection and spacing adjustments
- 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.
2025-12-29 21:10:01 +05:30
srbhr
01d9de38ac feat: enhance PDF rendering with customizable margins and improve layout accuracy
- 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.
2025-12-29 20:06:52 +05:30
srbhr
a892761889 feat: add PDF template guide and enhance margin calculations for compact mode
- 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.
2025-12-29 19:49:02 +05:30
srbhr
704a38ab47 feat: remove PowerShell setup script and enhance resume PDF generation options
- 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.
2025-12-29 19:38:39 +05:30
srbhr
dac699f1cd feat: implement language settings and internationalization support
- 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.
2025-12-29 19:10:05 +05:30
srbhr
0d542bc3b3 feat: enhance cover letter functionality and styling
- 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.
2025-12-27 02:34:10 +05:30
srbhr
6f7fe141b8 feat: add cover letter and outreach message features to resume management
- 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.
2025-12-27 02:18:08 +05:30
srbhr
d3af598606 feat: implement centralized API client and status caching system
- 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.
2025-12-27 00:26:40 +05:30
srbhr
0795be62ca feat: enhance resume management and API integration
- 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.
2025-12-27 00:11:04 +05:30
srbhr
65d5a2ca3d feat: enhance WYSIWYG paginated preview system for resume builder
- 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.
2025-12-26 23:55:15 +05:30
srbhr
c5cef03809 refactor: streamline PDF rendering and improve resume preview functionality
- 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.
2025-12-26 23:38:07 +05:30
srbhr
962275905e refactor: update layout and styling in Resume Builder component
- 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.
2025-12-26 22:45:07 +05:30
srbhr
3bfa328f50 feat: implement resume deletion and template customization features
- 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.
2025-12-26 22:38:01 +05:30
srbhr
569417f462 feat: implement PDF download functionality for resumes using headless Chromium 2025-12-25 02:52:20 +05:30
srbhr
0040ebda03 feat: add update resume endpoint and enhance print styles for PDF export 2025-12-25 01:17:30 +05:30
srbhr
45ce308757 feat: implement print styles and download functionality for resumes 2025-12-25 00:47:40 +05:30
srbhr
0ff7eebdb2 feat: enhance dashboard layout and add resume deletion functionality 2025-12-25 00:16:11 +05:30
srbhr
ba445992ae feat: add endpoint to list resumes and update related documentation 2025-12-24 23:38:30 +05:30
srbhr
a5d76610f8 feat: improve LLM JSON parsing and fix resume UI styling
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>
2025-12-24 04:37:41 +05:30
srbhr
c199f0f7d5 feat: add resume processing status tracking and improve LLM reliability
- 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>
2025-12-24 04:01:00 +05:30
srbhr
8918bd3f13 docs: add installation guide and remove outdated setup documents
- 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.
2025-12-24 02:49:34 +05:30
srbhr
f7380ae91f refactor: remove scoring feature from resume improvement process
- 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.
2025-12-24 02:40:11 +05:30
srbhr
df6274ee4a fix: address critical and high priority issues from code review
Critical Fixes:
- Add logging for silent failures in resume parsing (routers/resumes.py)
- Move CORS origins to config for production deployments (config.py, main.py)
- Add timeouts to all LLM calls to prevent hanging (llm.py)
- Add React ErrorBoundary to catch component errors (error-boundary.tsx)
- Fix context data loss with localStorage persistence (resume-builder.tsx)
- Add beforeunload warning for unsaved changes

High Priority Fixes:
- Remove fake +15 score inflation - return honest scores (routers/resumes.py)
- Remove fake line numbers in improvement suggestions (improver.py)
- Add strengths to improvement suggestions for better feedback
- Add "UNSAVED DRAFT" indicator in builder UI

Changes:
- apps/backend/app/config.py: Add cors_origins setting
- apps/backend/app/main.py: Use settings.cors_origins
- apps/backend/app/llm.py: Add timeout constants and apply to all calls
- apps/backend/app/routers/resumes.py: Add logging, remove fake scores
- apps/backend/app/services/improver.py: Remove fake line numbers
- apps/frontend/components/common/error-boundary.tsx: New component
- apps/frontend/app/(default)/layout.tsx: Wrap with ErrorBoundary
- apps/frontend/components/builder/resume-builder.tsx: Add localStorage persistence

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 02:28:53 +05:30
srbhr
6619e820d7 fix: align backend schemas with frontend component expectations
- 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>
2025-12-24 02:06:26 +05:30