CV Optimizer - Project Summary
Overview
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.
Key Features
User Authentication
- Login/Register: Simple user authentication system
- User sessions: Persists login state using browser localStorage
- Multi-user support: Each user has their own isolated projects
Projects Management (Homepage)
- 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
Setup Mode
Purpose: Prepare all materials for initial CV generation
Features:
- 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
Setup Prompt Structure:
# 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
Optimize Mode
Purpose: Iteratively refine the generated CV
Features:
- 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
Optimize Prompt Structure:
# CV Refinement Assistant
- System instructions
- Current CV (full LaTeX code)
- Sections to improve (each highlight with text + comment)
- Instructions for refinement
Data Persistence
- 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
Technical Stack
- 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)
User Workflow
Initial Setup:
- Register/Login to the application
- Click "Add Project" on homepage
- Enter project title
- Switch to Setup Mode
Setup Phase:
- 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
Optimization Phase:
- 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
File Structure
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
Installation & Running
Prerequisites:
- Node.js (v16 or higher)
- npm or yarn
Steps:
# Navigate to project directory
cd cv-optimizer
# Install dependencies
npm install
# Run development server
npm run dev
# Open browser to http://localhost:5173
Build for production:
npm run build
Future Enhancements (Planned)
Firebase Integration:
- Replace localStorage with Firebase Firestore
- Real-time data synchronization
- Cloud storage for CV files
- User authentication via Firebase Auth
Deployment:
- Deploy to Vercel
- Continuous deployment pipeline
- Environment variables for Firebase config
Additional Features (Potential):
- 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)
Current Limitations (POC)
- 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
Design Principles
- 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
Security Notes (For Production)
- 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
License
MIT (or your preferred license)
Contributing
This is a proof of concept. Future contributions welcome once core features are validated.