# Story 2.3: Create Resume Header & Main Content Components Status: ready-for-dev ## Story As a user, I want to see my photo, name, contact info, summary, and work experience prominently, so that recruiters see the most important information first. ## Acceptance Criteria ### ResumeHeader.vue 1. **AC1:** Given the header component renders, when it displays, then it shows profile photo on the left (if provided) 2. **AC2:** Full name in large bold text (2rem, font-bold) displayed on the right 3. **AC3:** Job title appears below name (1.25rem, text-gray-600) 4. **AC4:** Contact information (address, phone, email, website) displayed with proper formatting 5. **AC5:** All contact links are clickable (mailto:, tel:, https://) 6. **AC6:** Layout is horizontal: photo (left) + info block (right) ### ResumeSummary.vue 7. **AC7:** Given the summary component renders, when it displays, then it shows "SUMMARY" section header (blue, uppercase, with bottom border) 8. **AC8:** Professional summary paragraph is displayed 9. **AC9:** Line height is 1.6 for readability ### ResumeExperience.vue 10. **AC10:** Given the experience component renders, when it displays, then it shows "WORK EXPERIENCE" section header (blue, uppercase, with bottom border) 11. **AC11:** For each job: position title (bold, left), company name, date range (right-aligned: "Jan 2022 - Present"), bullet points for highlights (• character) 12. **AC12:** Jobs are sorted by date (most recent first) 13. **AC13:** "Present" is shown for current jobs (no endDate) ## Tasks / Subtasks - [ ] Create ResumeHeader component (AC: #1-#6) - [ ] Create `app/components/resume/ResumeHeader.vue` - [ ] Accept props: `basics` (ResumeBasics) - includes name, label, email, phone, location, url, image - [ ] Display profile photo (if provided) with proper sizing (150px max width) - [ ] Display name with `text-3xl font-bold` (2rem) - [ ] Display job title with `text-xl text-gray-600` (1.25rem) - [ ] Display address, phone, email, website in structured format - [ ] Make email, phone, website clickable with proper href attributes - [ ] Use horizontal layout: photo left, info right - [ ] Create ResumeSummary component (AC: #7-#9) - [ ] Create `app/components/resume/ResumeSummary.vue` - [ ] Accept props: `summary` (string) - [ ] Add section header "SUMMARY" with blue, uppercase, bold styling - [ ] Add blue bottom border to header: `border-b-2 border-blue-600` - [ ] Display summary paragraph with `leading-relaxed` (line-height: 1.6) - [ ] Use `text-sm text-gray-800` - [ ] Create ResumeExperience component (AC: #10-#13) - [ ] Create `app/components/resume/ResumeExperience.vue` - [ ] Accept props: `work` (WorkExperience[]) - [ ] Add section header "WORK EXPERIENCE" with blue, uppercase, bold styling - [ ] Add blue bottom border to header: `border-b-2 border-blue-600` - [ ] Sort jobs by startDate (most recent first) - [ ] For each job, display: - Position title: `font-semibold text-gray-900` (left-aligned) - Company name: `text-gray-700` - Date range: Use `formatDate()` helper from composable (right-aligned) - Highlights: `