- Update resume data with comprehensive professional summary and optimized work experience highlights
- Add resume content tech-spec and strategy documentation for 2025 best practices
- Create resume guidelines reference document for content consistency
- Enhance PDF composable with openPdf preview function alongside downloadPdf
- Expand CSS banner hiding rules to block certificates.dev promotional content
- Add research documentation on resume best practices and ATS optimization
- Update i18n translations for resume content in English and Persian
- Include sample Ali Arghyani resume PDF template in design assets
- Refactor resume.en.ts with improved professional positioning and achievement metrics
- Update API route documentation for PDF generation story artifacts
- Establish foundation for Epic 4 sprint planning with tech specifications
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
- Add useResumePdf composable for client-side PDF download handling
- Implement /api/resume/pdf server endpoint for PDF generation
- Add puppeteer and @sparticuz/chromium dependencies for PDF rendering
- Add puppeteer-core for headless browser automation
- Update Vercel configuration to support PDF generation
- Include loading state management and error handling with toast notifications
- Implement blob download with automatic filename generation
- Add memory leak prevention through object URL revocation
- Modify content file parsing hook to handle both English and Persian blog routes
- Remove English locale prefix for default language routes
- Preserve Persian locale prefix for localized routes
- Add type assertions to resolve TypeScript hook typing issues
- Improve logging for prerendered blog routes
- Refactor prerender plugin to use content:file:afterParse hook
- Dynamically collect blog post routes during file parsing
- Remove complex locale-based post fetching logic
- Add conditional prerendering to prevent unnecessary processing
- Improve logging for prerender route generation
- Simplify route collection and prerendering process
Improves performance and reliability of static site generation for blog content.