mirror of
https://github.com/mmahdium/portfolio.git
synced 2026-08-17 05:24:30 +03:30
feat(resume): complete Epic 2 - Resume Preview Page
Epic 2: Resume Preview Page - All 5 stories completed Story 2-1: Create Resume Page Route - Add /resume standalone page with layout: false - Implement print mode detection (?print=true) - Add SEO meta tags (noindex for privacy) - Set page title "Resume - Ali Arghyani" Story 2-2: Create ResumePreview Container - Add single-column A4 container (210mm × 297mm) - Implement white background with 24px margins - Add print styles with .no-print class - Configure responsive layout Story 2-3: Create Header, Summary, Experience Components - Add ResumeHeader with profile photo, name, contact info - Add ResumeSummary with blue uppercase section header - Add ResumeExperience with sorted jobs and date formatting - Add image property to ResumeBasics interface - Integrate all components into ResumePreview Story 2-4: Create Education & Additional Info Components - Add ResumeEducation with date formatting - Add ResumeAdditionalInfo with skills, languages, certifications - Integrate components into ResumePreview Story 2-5: Create Download Button Component - Add ResumeDownloadButton FAB (fixed bottom-right) - Add download icon and "Download PDF" text - Implement print mode detection - Add placeholder click handler for Epic 3 integration - Responsive: text on desktop, icon-only on mobile Additional: - Add profile image to resume data (/img/AliProfile.webp) - Update sprint-status.yaml: all Epic 2 stories marked done Files Created: - app/pages/resume.vue - app/components/resume/ResumePreview.vue - app/components/resume/ResumeHeader.vue - app/components/resume/ResumeSummary.vue - app/components/resume/ResumeExperience.vue - app/components/resume/ResumeEducation.vue - app/components/resume/ResumeAdditionalInfo.vue - app/components/resume/ResumeDownloadButton.vue Files Modified: - app/types/resume.ts (added image property) - app/data/resume.en.ts (added profile image) - docs/sprint-artifacts/sprint-status.yaml (updated story statuses) - docs/sprint-artifacts/2-1-create-resume-page-route.md (completed) - docs/sprint-artifacts/2-2-create-resume-preview-container-component.md (completed) - docs/sprint-artifacts/2-3-create-resume-header-main-content-components.md (completed) - docs/sprint-artifacts/2-4-create-resume-sidebar-components.md (completed) - docs/sprint-artifacts/2-5-create-download-button-component.md (completed) Closes Epic 2 Closes Story 2-1, 2-2, 2-3, 2-4, 2-5
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Story 2.5: Create Download Button Component
|
||||
|
||||
Status: ready-for-dev
|
||||
Status: done
|
||||
|
||||
## Story
|
||||
|
||||
@@ -21,41 +21,41 @@ so that I can easily download my resume as PDF.
|
||||
|
||||
## Tasks / Subtasks
|
||||
|
||||
- [ ] Create ResumeDownloadButton component (AC: #1-#7)
|
||||
- [ ] Create `app/components/resume/ResumeDownloadButton.vue`
|
||||
- [ ] Use Nuxt UI `UButton` component
|
||||
- [ ] Set icon to `i-heroicons-arrow-down-tray`
|
||||
- [ ] Add "Download PDF" text
|
||||
- [ ] Apply blue background: `color="primary"` or `bg-blue-600`
|
||||
- [ ] Set fixed position: `fixed bottom-6 right-6`
|
||||
- [ ] Add shadow: `shadow-lg`
|
||||
- [ ] Add `.no-print` class
|
||||
- [x] Create ResumeDownloadButton component (AC: #1-#7)
|
||||
- [x] Create `app/components/resume/ResumeDownloadButton.vue`
|
||||
- [x] Use Nuxt UI `UButton` component
|
||||
- [x] Set icon to `i-heroicons-arrow-down-tray`
|
||||
- [x] Add "Download PDF" text
|
||||
- [x] Apply blue background: `color="primary"` or `bg-blue-600`
|
||||
- [x] Set fixed position: `fixed bottom-6 right-6`
|
||||
- [x] Add shadow: `shadow-lg`
|
||||
- [x] Add `.no-print` class
|
||||
|
||||
- [ ] Implement print mode detection (AC: #8)
|
||||
- [ ] Accept prop: `isPrintMode` (boolean)
|
||||
- [ ] Use `v-if="!isPrintMode"` to conditionally render
|
||||
- [ ] Ensure button hidden when `?print=true`
|
||||
- [x] Implement print mode detection (AC: #8)
|
||||
- [x] Accept prop: `isPrintMode` (boolean)
|
||||
- [x] Use `v-if="!isPrintMode"` to conditionally render
|
||||
- [x] Ensure button hidden when `?print=true`
|
||||
|
||||
- [ ] Add placeholder click handler
|
||||
- [ ] Add `@click` event handler
|
||||
- [ ] For now, log to console: "Download PDF clicked"
|
||||
- [ ] Note: Actual PDF generation will be implemented in Epic 3
|
||||
- [x] Add placeholder click handler
|
||||
- [x] Add `@click` event handler
|
||||
- [x] For now, log to console: "Download PDF clicked"
|
||||
- [x] Note: Actual PDF generation will be implemented in Epic 3
|
||||
|
||||
- [ ] Integrate into resume page (AC: #1-#8)
|
||||
- [ ] Import component in `pages/resume.vue`
|
||||
- [ ] Pass `isPrintMode` prop from route query
|
||||
- [ ] Place button outside ResumePreview container
|
||||
- [ ] Verify button appears in bottom-right corner
|
||||
- [x] Integrate into resume page (AC: #1-#8)
|
||||
- [x] Import component in `pages/resume.vue`
|
||||
- [x] Pass `isPrintMode` prop from route query
|
||||
- [x] Place button outside ResumePreview container
|
||||
- [x] Verify button appears in bottom-right corner
|
||||
|
||||
- [ ] Test button functionality
|
||||
- [ ] Verify button appears in bottom-right corner
|
||||
- [ ] Check fixed position (doesn't scroll with page)
|
||||
- [ ] Verify blue background and shadow
|
||||
- [ ] Test icon displays correctly
|
||||
- [ ] Check "Download PDF" text visibility
|
||||
- [ ] Test click handler (console log)
|
||||
- [ ] Verify button hidden with `?print=true`
|
||||
- [ ] Test print preview (Ctrl+P) - button should be hidden
|
||||
- [x] Test button functionality
|
||||
- [x] Verify button appears in bottom-right corner
|
||||
- [x] Check fixed position (doesn't scroll with page)
|
||||
- [x] Verify blue background and shadow
|
||||
- [x] Test icon displays correctly
|
||||
- [x] Check "Download PDF" text visibility
|
||||
- [x] Test click handler (console log)
|
||||
- [x] Verify button hidden with `?print=true`
|
||||
- [x] Test print preview (Ctrl+P) - button should be hidden
|
||||
|
||||
## Dev Notes
|
||||
|
||||
@@ -215,13 +215,19 @@ useHead({
|
||||
|
||||
### Completion Notes List
|
||||
|
||||
<!-- Will be filled by dev agent after completion -->
|
||||
- Created `ResumeDownloadButton.vue` with UButton, fixed position FAB
|
||||
- Implemented print mode detection via `isPrintMode` prop
|
||||
- Added placeholder click handler (console.log for Epic 3 integration)
|
||||
- Integrated into `pages/resume.vue` with proper prop passing
|
||||
- Responsive: shows text on desktop, icon-only on mobile
|
||||
|
||||
### File List
|
||||
|
||||
<!-- Will be filled by dev agent with created/modified files -->
|
||||
- app/components/resume/ResumeDownloadButton.vue (created)
|
||||
- app/pages/resume.vue (modified)
|
||||
|
||||
---
|
||||
|
||||
**Change Log:**
|
||||
- 2025-11-30: Story drafted by SM agent (mahdi)
|
||||
- 2025-12-01: Implemented by Dev agent (Amelia) - All ACs completed, status: done
|
||||
|
||||
Reference in New Issue
Block a user