CV Optimizer is a web application that helps users generate custom prompts to optimize their CVs for specific job applications. The app allows users to manage multiple job application projects, prepare materials in setup mode, and iteratively refine their CVs in optimize mode using their favorite LLM.
- Login/Register: Simple user authentication system
- User sessions: Persists login state using browser localStorage
- Multi-user support: Each user has their own isolated projects
- View all projects: Dashboard displaying all user's job application projects
- Create new project: Add new job application projects with one click
- Open projects: Navigate to any project to work on it
- Delete projects: Remove projects that are no longer needed
- Project cards: Each project shows title and job offer preview
Purpose: Prepare all materials for initial CV generation
- Project title: Editable project name/title
- Job offer input: Large text area to paste the complete job description
- Relevant links:
- Add multiple URLs (company website, product pages, etc.)
- Remove links individually
- Links are clickable and open in new tabs
- Previous CVs upload:
- Upload multiple .tex files from past CVs
- Files are read and stored for reference
- Display list of uploaded CV filenames
- Template CV upload:
- Upload a single .tex template file to use as starting point
- Confirmation when template is uploaded
- Copy prompt button:
- Generates a comprehensive system prompt
- Combines job offer, links, previous CVs, and template
- Copies to clipboard for use in any LLM
# CV Optimization Assistant
- System instructions for the LLM
- Job offer details
- Relevant links (numbered list)
- Previous CVs (with LaTeX code blocks)
- Template CV (with LaTeX code block)
- Instructions for CV generation
Purpose: Iteratively refine the generated CV
- Upload generated CV:
- Upload .tex file generated by LLM
- Or paste LaTeX content directly into textarea
- LaTeX preview:
- Converts LaTeX to basic HTML for readability
- Renders sections, subsections, bold, italic, lists
- Scrollable preview area
- Text highlighting & comments:
- Select any text in the preview
- Add comment/feedback for selected section
- Creates highlight with text excerpt and comment
- View all highlights in dedicated section
- Remove individual highlights
- Copy optimization prompt:
- Generates refinement prompt for LLM
- Includes full current CV
- Lists all highlighted sections with comments
- Copies to clipboard for iterative improvements
# CV Refinement Assistant
- System instructions
- Current CV (full LaTeX code)
- Sections to improve (each highlight with text + comment)
- Instructions for refinement
- localStorage: All data persists across browser sessions
- Auto-save: Changes saved automatically on blur/interaction
- User isolation: Each user's data is separate
- Projects storage: All projects, CVs, links, highlights stored locally
- Frontend: Svelte 4
- Build tool: Vite
- Styling: Component-scoped CSS
- Data storage: Browser localStorage (Firebase ready for future)
- File handling: FileReader API for .tex file uploads
- LaTeX preview: Custom parser (basic HTML conversion)
- Register/Login to the application
- Click "Add Project" on homepage
- Enter project title
- Switch to Setup Mode
- Paste job offer description
- Add relevant company/product links
- Upload previous CV .tex files for reference
- Upload template CV .tex file
- Click "Copy Prompt"
- Paste prompt into favorite LLM (ChatGPT, Claude, etc.)
- LLM generates optimized CV in LaTeX format
- Switch to Optimize Mode
- Upload/paste the generated .tex file
- Review the preview
- Highlight sections needing improvement
- Add specific comments for each section
- Click "Copy Optimization Prompt"
- Paste into LLM for refinement
- Repeat steps 2-7 until satisfied
cv-optimizer/
├── src/
│ ├── App.svelte # Main application component
│ └── main.js # Entry point
├── index.html # HTML template
├── package.json # Dependencies
├── vite.config.js # Vite configuration
├── svelte.config.js # Svelte configuration
└── README.md # This file
- Node.js (v16 or higher)
- npm or yarn
# Navigate to project directory
cd cv-optimizer
# Install dependencies
npm install
# Run development server
npm run dev
# Open browser to http://localhost:5173npm run build- Replace localStorage with Firebase Firestore
- Real-time data synchronization
- Cloud storage for CV files
- User authentication via Firebase Auth
- Deploy to Vercel
- Continuous deployment pipeline
- Environment variables for Firebase config
- Export project as PDF report
- Comparison view (before/after CV versions)
- Multiple CV versions per project
- Collaboration features (share projects)
- AI-powered suggestions directly in app
- Template library
- Job application tracking (status, dates, follow-ups)
- Data stored only in browser (cleared if cache cleared)
- No data backup or export
- Basic LaTeX preview (not full PDF rendering)
- Simple authentication (no password hashing)
- No multi-device sync
- Simple & readable code: Easy to understand and modify
- Minimal dependencies: Only essential packages
- User-friendly: Intuitive interface with clear workflows
- Flexible: Works with any LLM (not locked to specific provider)
- Privacy-focused: User controls their data and LLM choice
- Current POC stores passwords in plain text (localStorage)
- Before production: implement proper authentication
- Use Firebase Auth or similar service
- Hash passwords server-side
- Implement HTTPS
- Add CSRF protection
- Validate file uploads
MIT (or your preferred license)
This is a proof of concept. Future contributions welcome once core features are validated.