CV Builder Feature - Implementation Plan
Date: October 17, 2025
Priority: HIGH
Status: Planned
Backend: ✅ Ready (API exists)
Frontend: ⏳ To be built
🎯 Feature Overview
A multi-step CV builder that allows users to create professional CVs from scratch without uploading a file. Users fill in their details step-by-step, preview in real-time, and generate a professional PDF.
✅ Backend Status: READY
Existing API Endpoints
All required endpoints already exist:
- ✅ POST /api/v1/cv-profiles - Create new CV
- ✅ PUT /api/v1/cv-profiles/{id} - Update CV
- ✅ GET /api/v1/cv-profiles/{id}/full - Get full CV data
- ✅ GET /api/v1/cv-profiles/{id}/generate-pdf - Generate PDF
CV Data Model Supports:
- ✅ Personal Information (name, email, phone, social links)
- ✅ Professional Summary & Objective
- ✅ Work Experience (multiple entries)
- ✅ Education (multiple degrees)
- ✅ Skills (with proficiency levels)
- ✅ Languages (with proficiency)
- ✅ Certifications
- ✅ Projects
- ✅ Publications
- ✅ Interests
- ✅ References
- ✅ Templates (modern, classic, minimal, creative)
- ✅ Color Schemes (blue, green, red, purple, black)
- ✅ Photo upload
🚧 Frontend: To Be Built
Component Structure
src/app/components/cv-builder/
├── cv-builder.component.ts # Main container
├── cv-builder.component.html
├── cv-builder.component.scss
├── cv-builder.component.spec.ts
│
├── steps/
│ ├── personal-info-step/ # Step 1: Personal details
│ ├── summary-step/ # Step 2: Professional summary
│ ├── experience-step/ # Step 3: Work experience
│ ├── education-step/ # Step 4: Education
│ ├── skills-step/ # Step 5: Skills & languages
│ ├── additional-step/ # Step 6: Certs, projects, etc.
│ └── preview-step/ # Step 7: Preview & generate
│
├── shared/
│ ├── cv-preview/ # Live preview component
│ ├── experience-form/ # Reusable experience form
│ ├── education-form/ # Reusable education form
│ ├── skill-selector/ # Skills selection widget
│ └── template-selector/ # Template chooser
│
└── models/
└── cv-builder.model.ts # TypeScript interfaces
📋 Implementation Plan - 7 Steps
Step 1: Personal Information
Fields:
- First Name, Last Name *
- Professional Title
- Email *, Phone
- LinkedIn, GitHub, Website
- Photo (optional upload)
- Address (street, city, postal code, region, country)
UI:
- Clean form with validation
- Optional fields clearly marked
- Profile photo upload with preview
- Auto-save draft
Step 2: Professional Summary
Fields:
- Professional Summary (500 chars)
- Career Objective (300 chars)
UI:
- Rich text editor or textarea
- Character counter
- Suggestions/examples
- "Skip this step" option
Step 3: Work Experience
Fields (per entry):
- Company Name *
- Job Title *
- Start Date *, End Date (or "Current")
- Description
- Achievements (bullet points)
UI:
- Add multiple experiences
- Drag-to-reorder
- Duplicate entry
- Delete confirmation
- "Add Experience" button
- Collapsible entries
Step 4: Education
Fields (per entry):
- Institution *
- Degree/Program *
- Field of Study
- Start Date *, End Date
- GPA/Grade (optional)
- Description
UI:
- Similar to experience step
- Add/edit/delete/reorder
- Auto-suggest for common degrees
Step 5: Skills & Languages
Skills Section:
- Skill name
- Proficiency level (Beginner/Intermediate/Advanced/Expert)
- Category (Technical/Soft/Language)
Languages Section:
- Language name
- Proficiency (Basic/Conversational/Fluent/Native)
UI:
- Skill tags with proficiency bars
- Auto-complete from common skills
- Visual proficiency selector
- Categorized display
Step 6: Additional Information
Sections:
- Certifications (name, issuer, date)
- Projects (name, description, technologies, URL)
- Publications (title, publisher, date)
- Interests/Hobbies (tags)
- References (name, title, company, contact)
UI:
- Tabbed interface for each section
- All optional
- "Add More" buttons
- Expandable sections
Step 7: Preview & Generate
Features:
- Live preview of CV
- Template selector (4 templates)
- Color scheme picker (5 colors)
- Download as PDF
- Save profile
- Set as default
UI:
- Split screen: form on left, preview on right
- Template thumbnails
- Color swatches
- "Generate PDF" button
- "Save & Exit" button
🎨 User Experience Flow
1. Click "Create New CV"
↓
2. Choose starting method:
- Build from scratch → CV Builder
- Upload existing CV → CV Upload Modal (existing)
↓
3. [If Build from scratch]
Multi-step wizard (7 steps)
↓
4. Each step:
- Fill in information
- See live preview
- Save draft automatically
- Next/Previous/Skip buttons
↓
5. Final step:
- Review complete CV
- Choose template & colors
- Generate PDF
- Save to profile
↓
6. Success:
- CV added to "My CVs" list
- Ready to use for applications
- Can edit anytime
🛠️ Technical Implementation
Frontend (Angular 18)
Services:
cv-builder.service.ts
- saveDraft()
- loadDraft()
- submitCV()
- generatePreview()
- validateStep()
Models:
cv-builder.model.ts
- CVBuilderData interface
- ExperienceEntry interface
- EducationEntry interface
- etc.
State Management:
cv-builder.state.ts
- Current step
- Form data
- Validation errors
- Draft status
Routing
{
path: 'cv-builder',
component: CVBuilderComponent,
canActivate: [AuthGuard],
children: [
{ path: '', redirectTo: 'personal', pathMatch: 'full' },
{ path: 'personal', component: PersonalInfoStepComponent },
{ path: 'summary', component: SummaryStepComponent },
{ path: 'experience', component: ExperienceStepComponent },
{ path: 'education', component: EducationStepComponent },
{ path: 'skills', component: SkillsStepComponent },
{ path: 'additional', component: AdditionalStepComponent },
{ path: 'preview', component: PreviewStepComponent }
]
}
API Integration
// Use existing backend endpoints
POST /api/v1/cv-profiles
PUT /api/v1/cv-profiles/{id}
GET /api/v1/cv-profiles/{id}/generate-pdf
📊 Estimation
Development Time
| Component | Time | Priority |
|-----------|------|----------|
| CV Builder Container | 2 hours | HIGH |
| Step 1: Personal Info | 2 hours | HIGH |
| Step 2: Summary | 1 hour | MEDIUM |
| Step 3: Experience | 3 hours | HIGH |
| Step 4: Education | 2 hours | HIGH |
| Step 5: Skills & Languages | 3 hours | HIGH |
| Step 6: Additional | 2 hours | LOW |
| Step 7: Preview & Generate | 3 hours | HIGH |
| CV Preview Component | 4 hours | HIGH |
| Template System | 3 hours | MEDIUM |
| Styling & Responsive | 3 hours | HIGH |
| Testing | 4 hours | HIGH |
| Total | 32 hours | - |
Sprint Breakdown
- Sprint 1 (Week 1): Steps 1-3 + Container (10 hours)
- Sprint 2 (Week 2): Steps 4-5 + Preview (10 hours)
- Sprint 3 (Week 3): Step 6 + Templates + Testing (12 hours)
🎯 Success Criteria
Functional Requirements
- [ ] User can create CV without uploading file
- [ ] All CV sections can be filled in
- [ ] Live preview shows changes in real-time
- [ ] Can save draft and resume later
- [ ] Can generate professional PDF
- [ ] Can choose from 4 templates
- [ ] Can customize colors
- [ ] Works on mobile devices
- [ ] Validation prevents incomplete submissions
- [ ] Auto-save every 30 seconds
Non-Functional Requirements
- [ ] Page load < 2 seconds
- [ ] Smooth step transitions
- [ ] Accessible (WCAG 2.1 AA)
- [ ] Works offline (drafts in localStorage)
- [ ] Clean, intuitive UI
- [ ] No data loss on refresh
🚀 Quick Start Implementation
Session 1: Basic CV Builder (8 hours)
Goal: Get a working prototype with core steps
// 1. Generate components
ng generate component components/cv-builder
ng generate component components/cv-builder/steps/personal-info-step
ng generate component components/cv-builder/steps/experience-step
ng generate component components/cv-builder/shared/cv-preview
// 2. Add routing
// 3. Create basic step navigation
// 4. Implement personal info form
// 5. Implement experience form (dynamic array)
// 6. Create simple preview
// 7. Wire up to backend API
// 8. Test end-to-end
📝 User Story
As a candidate without a CV
I want to build a professional CV using a step-by-step builder
So that I can apply for jobs even if I don't have an existing CV file
Acceptance Criteria:
- [ ] Can access CV Builder from dashboard
- [ ] Step-by-step wizard with 7 steps
- [ ] Each section has clear instructions
- [ ] Live preview updates as I type
- [ ] Can save draft and continue later
- [ ] Can generate PDF with chosen template
- [ ] PDF looks professional and is ATS-friendly
- [ ] Can edit CV after creation
- [ ] Mobile-friendly for on-the-go editing
🎨 UI/UX Design Notes
Design Inspiration
- Canva CV Builder - Template selection
- LinkedIn Profile - Section organization
- Novoresume - Live preview
- Resume.io - Clean, modern interface
Key UX Principles
- Progressive Disclosure - Show what's needed, hide complexity
- Visual Feedback - Show progress, validation, saves
- Flexibility - Skip optional sections, reorder entries
- Guidance - Examples, tips, suggestions
- Preview - Always show what CV will look like
📦 Deliverables
Code
- 15+ new Angular components
- CV builder service
- State management
- Form validation
- API integration
- Responsive styling
Documentation
- User guide for CV builder
- Developer documentation
- Component storybook
- API integration guide
Tests
- Unit tests for all components
- Integration tests for API calls
- E2E tests for complete flow
- Mobile testing
🔗 Integration Points
With Existing Features
- Job Application Flow - Select CV when applying
- Profile Page - Link to "Build/Edit CV"
- Dashboard - "Create CV" CTA if no CV exists
- CV Upload - "Or build from scratch" option
Future Enhancements
- AI-powered content suggestions
- Import from LinkedIn
- Skills recommendations based on job descriptions
- ATS optimization score
- Cover letter generator
- Multiple language support (EN/NL)
💡 Recommendation
Add to roadmap as:
- Priority: HIGH (enhances user experience significantly)
- Timeline: 3 weeks (32 hours)
- Dependencies: Backend startup fix (Session 14)
- Value: Huge - allows users without CVs to still use platform
Should be implemented:
- After Session 14 (backend fixes)
- Before or alongside DAS integrations
- As part of Sprint 6 or standalone project
Next Action: Approve feature and schedule for implementation
Estimated Completion: 3 weeks from start
Expected Impact: 50%+ increase in user signups (users without CVs can now join)
Reacties