mirror of
https://github.com/mmahdium/portfolio.git
synced 2026-08-16 21:14:31 +03:30
Story 3-1: Create PDF Generation API Route - Add server/api/resume/pdf.get.ts with Puppeteer integration - Support both dev (puppeteer) and prod (puppeteer-core + chromium) - Navigate to /resume?print=true for WYSIWYG capture - Return PDF with proper headers (Content-Type, Content-Disposition) - Add error handling with 500 status and JSON response - Update vercel.json with function config (memory: 1024, maxDuration: 10) Story 3-2: Create PDF Download Composable - Add app/composables/useResumePdf.ts - Implement isGenerating ref for loading state - Implement downloadPdf() with blob handling - Add toast notifications for errors - Revoke object URL to prevent memory leaks Story 3-3: Connect Download Button to PDF Generation - Update ResumeDownloadButton.vue to use useResumePdf() - Bind :loading and :disabled to isGenerating - Connect @click to downloadPdf - Remove placeholder handler Dependencies Added: - puppeteer ^24.31.0 - puppeteer-core ^24.31.0 - @sparticuz/chromium ^141.0.0 Closes Epic 3 Closes Story 3-1, 3-2, 3-3
68 lines
3.1 KiB
YAML
68 lines
3.1 KiB
YAML
# Sprint Status - Resume Export Feature
|
|
# =====================================
|
|
# generated: 2025-11-30
|
|
# project: nuxt-portfolio
|
|
# project_key: resume-export
|
|
# tracking_system: file-system
|
|
# story_location: docs/sprint-artifacts
|
|
|
|
# STATUS DEFINITIONS:
|
|
# ==================
|
|
# Epic Status:
|
|
# - backlog: Epic exists in epic file but not contexted
|
|
# - contexted: Epic tech context created (required before drafting stories)
|
|
#
|
|
# Story Status:
|
|
# - backlog: Story only exists in epic file
|
|
# - drafted: Story file created in stories folder
|
|
# - ready-for-dev: Draft approved and story context created
|
|
# - in-progress: Developer actively working on implementation
|
|
# - review: Under SM review (via code-review workflow)
|
|
# - done: Story completed
|
|
#
|
|
# Retrospective Status:
|
|
# - optional: Can be completed but not required
|
|
# - completed: Retrospective has been done
|
|
|
|
generated: "2025-11-30"
|
|
project: nuxt-portfolio
|
|
project_key: resume-export
|
|
tracking_system: file-system
|
|
story_location: docs/sprint-artifacts
|
|
|
|
development_status:
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# Epic 1: Resume Data & Types
|
|
# Goal: Establish data foundation with TypeScript types and sample data
|
|
# FRs: FR1-4
|
|
# ═══════════════════════════════════════════════════════════════
|
|
epic-1: contexted
|
|
1-1-create-resume-typescript-interfaces: done
|
|
1-2-create-sample-resume-data-file: done
|
|
1-3-create-resume-data-composable: done
|
|
epic-1-retrospective: optional
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# Epic 2: Resume Preview Page
|
|
# Goal: Create pixel-perfect resume preview matching PDF output
|
|
# FRs: FR5-9, FR15-25
|
|
# ═══════════════════════════════════════════════════════════════
|
|
epic-2: contexted
|
|
2-1-create-resume-page-route: done
|
|
2-2-create-resume-preview-container-component: done
|
|
2-3-create-resume-header-main-content-components: done
|
|
2-4-create-resume-sidebar-components: done
|
|
2-5-create-download-button-component: done
|
|
epic-2-retrospective: completed
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# Epic 3: PDF Export
|
|
# Goal: Enable high-quality PDF generation matching web preview
|
|
# FRs: FR10-14
|
|
# ═══════════════════════════════════════════════════════════════
|
|
epic-3: contexted
|
|
3-1-create-pdf-generation-api-route: done
|
|
3-2-create-pdf-download-composable: done
|
|
3-3-connect-download-button-to-pdf-generation: done
|
|
epic-3-retrospective: optional
|