Epic 1: Resume Data & Types - All Stories Complete Story 1.1: Create Resume TypeScript Interfaces ✅ - Add Resume, ResumeBasics, WorkExperience, Education, Skill, Language, Certification interfaces - File: app/types/resume.ts - All interfaces exported with proper TypeScript types - Date fields use YYYY-MM string format Story 1.2: Create Sample Resume Data File ✅ - Add sample resume data with Ali Arghyani profile - File: app/data/resume.en.ts - Includes: basics, work (2), education (1), skills (2), languages (2) - Data independent from portfolio data Story 1.3: Create Resume Data Composable ✅ - Add useResumeData composable for reactive data access - File: app/composables/useResumeData.ts - Exports: resume ref, formatDate(), getFullName(), getPdfFilename() - Proper JSDoc documentation Files Added: - app/types/resume.ts - app/data/resume.en.ts - app/composables/useResumeData.ts - docs/sprint-artifacts/1-1-create-resume-typescript-interfaces.md - docs/sprint-artifacts/1-1-create-resume-typescript-interfaces.context.xml - docs/sprint-artifacts/1-2-create-sample-resume-data-file.md - docs/sprint-artifacts/1-2-create-sample-resume-data-file.context.xml - docs/sprint-artifacts/1-3-create-resume-data-composable.md - docs/sprint-artifacts/1-3-create-resume-data-composable.context.xml Files Modified: - docs/sprint-artifacts/sprint-status.yaml (stories 1.1-1.3: backlog → done) All stories reviewed and approved. Epic 1 complete - data foundation ready for Epic 2 (Resume Preview Page).
7.6 KiB
Story 1.2: Create Sample Resume Data File
Status: done
Story
As a developer, I want a sample resume data file with realistic content, so that I can test the preview and PDF generation with real data.
Acceptance Criteria
| AC ID | Criteria | Testable |
|---|---|---|
| AC-1 | File exists at app/data/resume.en.ts |
✓ |
| AC-2 | Exports resumeData of type Resume |
✓ |
| AC-3 | Contains full name and job title in basics |
✓ |
| AC-4 | Contains contact info (email, phone, location) in basics |
✓ |
| AC-5 | Contains at least 2 social profiles with icons (LinkedIn, GitHub) | ✓ |
| AC-6 | Contains professional summary (2-3 sentences) | ✓ |
| AC-7 | Contains at least 2 work experiences with 3+ highlights each | ✓ |
| AC-8 | Contains at least 1 education entry | ✓ |
| AC-9 | Contains at least 2 skill categories with 4+ keywords each | ✓ |
| AC-10 | Contains at least 2 languages | ✓ |
| AC-11 | Data is independent from portfolio data | ✓ |
Tasks / Subtasks
-
Task 1: Create data file (AC: 1)
- Create
app/data/resume.en.tsfile - Add file header comment
- Create
-
Task 2: Import Resume type (AC: 2)
- Import
Resumetype from~/types/resume - Export
resumeDataconstant with type annotation
- Import
-
Task 3: Define basics section (AC: 3, 4, 5, 6)
- Add
name: string(Ali Arghyani) - Add
label: string(Senior Frontend Developer) - Add
email: string - Add
phone: string - Add
location: { city, country } - Add
profilesarray with LinkedIn and GitHub (with icons) - Add
summary(2-3 sentences)
- Add
-
Task 4: Define work experience (AC: 7)
- Add at least 2 work entries
- Each entry has company, position, startDate, endDate?
- Each entry has 3+ highlights
-
Task 5: Define education (AC: 8)
- Add at least 1 education entry
- Include institution, area, studyType, dates
-
Task 6: Define skills (AC: 9)
- Add at least 2 skill categories
- Each category has 4+ keywords
-
Task 7: Define languages (AC: 10)
- Add at least 2 languages
- Use fluency union type values
-
Task 8: Verify TypeScript compilation (AC: 1-11)
- Run
pnpm typecheckor build to verify no errors - Verify data imports correctly
- Run
Dev Notes
Architecture Alignment
- Schema: Must conform to
Resumeinterface from Story 1.1 - Location:
app/data/follows Nuxt 4 convention for data files - Naming:
resume.en.tssupports future i18n extension (resume.fa.ts) - Independence: Data must be separate from existing
portfolio.en.ts
Key Constraints
- Date format: YYYY-MM string (e.g., "2022-01")
- Use "Present" concept via undefined
endDatefor current positions - Iconify icon names for profiles:
i-mdi-linkedin,i-mdi-github - Fluency values:
'Native' | 'Fluent' | 'Intermediate' | 'Basic'
Sample Data Guidelines
- Use Ali Arghyani as sample name (per Architecture doc)
- Use placeholder contact info (not real PII)
- Work experience should be realistic but fictional
- Skills should reflect frontend developer profile
Learnings from Previous Story
From Story 1-1-create-resume-typescript-interfaces (Status: done)
- Types Created: All resume interfaces available at
app/types/resume.ts - Import Pattern: Use
import type { Resume } from '~/types/resume' - Interfaces Available:
Resume,ResumeBasics,WorkExperience,Education,Skill,Language,Certification - Date Format: All date fields are
stringtype for YYYY-MM format - Optional Fields:
url,endDate,languages,certificationsare optional
[Source: docs/sprint-artifacts/1-1-create-resume-typescript-interfaces.md#Dev-Agent-Record]
Project Structure Notes
- File path:
app/data/resume.en.ts - Similar pattern to existing
app/data/portfolio.en.ts - Auto-imported by Nuxt (no manual import needed)
References
- [Source: docs/architecture.md#Data-Architecture] - Sample data structure
- [Source: docs/epics.md#Story-1.2] - Acceptance criteria
- [Source: docs/sprint-artifacts/tech-spec-epic-1.md#Data-Models-and-Contracts] - Schema details
- [Source: app/types/resume.ts] - TypeScript interfaces to use
Dev Agent Record
Context Reference
docs/sprint-artifacts/1-2-create-sample-resume-data-file.context.xml
Agent Model Used
Claude (Kiro Dev Agent - Amelia)
Debug Log References
- Created
app/data/resume.en.tswith sample resume data - Imported
Resumetype from~/types/resume - All sections populated: basics, work (2), education (1), skills (2), languages (2)
- getDiagnostics: No errors found
Completion Notes List
- ✅ Created
app/data/resume.en.tswith header comment - ✅ Exported
resumeDataconstant withResumetype annotation - ✅ basics: Ali Arghyani, Senior Frontend Developer, contact info, 2 profiles with icons, summary
- ✅ work: 2 entries (NexaPortal current, Freelance past) with 4 highlights each
- ✅ education: 1 entry (Qom University of Technology, B.Sc. Telecommunications)
- ✅ skills: 2 categories (Frontend: 5 keywords, Tools & DevOps: 5 keywords)
- ✅ languages: 2 entries (Persian Native, English Fluent)
- ✅ Data is independent from portfolio data (no imports from portfolio files)
File List
| Action | File |
|---|---|
| Created | app/data/resume.en.ts |
Change Log
| Date | Author | Change |
|---|---|---|
| 2025-11-30 | SM Agent (Bob) | Initial draft created |
| 2025-11-30 | Dev Agent (Amelia) | Implemented all tasks - created sample resume data file |
| 2025-11-30 | Senior Dev Review (AI) | Code review completed - APPROVED |
Senior Developer Review (AI)
Review Metadata
- Reviewer: mahdi
- Date: 2025-11-30
- Outcome: ✅ APPROVE
Summary
All 11 acceptance criteria are fully implemented. All 8 tasks verified with evidence. Data conforms to Resume interface, is independent from portfolio data, and follows project patterns.
Acceptance Criteria Coverage
| AC# | Description | Status | Evidence |
|---|---|---|---|
| AC-1 | File exists at app/data/resume.en.ts | ✅ | File exists |
| AC-2 | Exports resumeData of type Resume | ✅ | resume.en.ts:9 |
| AC-3 | Contains full name and job title | ✅ | resume.en.ts:11-12 |
| AC-4 | Contains contact info | ✅ | resume.en.ts:13-19 |
| AC-5 | Contains 2+ social profiles with icons | ✅ | resume.en.ts:20-31 |
| AC-6 | Contains professional summary | ✅ | resume.en.ts:32-33 |
| AC-7 | Contains 2+ work experiences with 3+ highlights | ✅ | resume.en.ts:36-57 |
| AC-8 | Contains 1+ education entry | ✅ | resume.en.ts:58-65 |
| AC-9 | Contains 2+ skill categories with 4+ keywords | ✅ | resume.en.ts:66-73 |
| AC-10 | Contains 2+ languages | ✅ | resume.en.ts:74-83 |
| AC-11 | Data independent from portfolio | ✅ | No portfolio imports |
Summary: 11 of 11 ACs implemented
Task Completion Validation
| Task | Marked | Verified | Evidence |
|---|---|---|---|
| Task 1-8 | [x] | ✅ | All verified with file evidence |
Summary: 8 of 8 tasks verified, 0 false completions
Architectural Alignment
- ✅ Conforms to Resume interface from app/types/resume.ts
- ✅ File location follows Nuxt 4 convention (app/data/)
- ✅ Naming supports i18n extension (resume.en.ts)
- ✅ Independent from portfolio data
Test Coverage
- TypeScript compiler validates data structure
- getDiagnostics: No errors
Security Notes
- ✅ Uses placeholder contact info (not real PII)
Action Items
- Note: No action items required - implementation is complete and correct