mirror of
https://github.com/mmahdium/portfolio.git
synced 2026-08-16 21:14:31 +03:30
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).
210 lines
7.6 KiB
Markdown
210 lines
7.6 KiB
Markdown
# 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
|
|
|
|
- [x] **Task 1: Create data file** (AC: 1)
|
|
- [x] Create `app/data/resume.en.ts` file
|
|
- [x] Add file header comment
|
|
|
|
- [x] **Task 2: Import Resume type** (AC: 2)
|
|
- [x] Import `Resume` type from `~/types/resume`
|
|
- [x] Export `resumeData` constant with type annotation
|
|
|
|
- [x] **Task 3: Define basics section** (AC: 3, 4, 5, 6)
|
|
- [x] Add `name: string` (Ali Arghyani)
|
|
- [x] Add `label: string` (Senior Frontend Developer)
|
|
- [x] Add `email: string`
|
|
- [x] Add `phone: string`
|
|
- [x] Add `location: { city, country }`
|
|
- [x] Add `profiles` array with LinkedIn and GitHub (with icons)
|
|
- [x] Add `summary` (2-3 sentences)
|
|
|
|
- [x] **Task 4: Define work experience** (AC: 7)
|
|
- [x] Add at least 2 work entries
|
|
- [x] Each entry has company, position, startDate, endDate?
|
|
- [x] Each entry has 3+ highlights
|
|
|
|
- [x] **Task 5: Define education** (AC: 8)
|
|
- [x] Add at least 1 education entry
|
|
- [x] Include institution, area, studyType, dates
|
|
|
|
- [x] **Task 6: Define skills** (AC: 9)
|
|
- [x] Add at least 2 skill categories
|
|
- [x] Each category has 4+ keywords
|
|
|
|
- [x] **Task 7: Define languages** (AC: 10)
|
|
- [x] Add at least 2 languages
|
|
- [x] Use fluency union type values
|
|
|
|
- [x] **Task 8: Verify TypeScript compilation** (AC: 1-11)
|
|
- [x] Run `pnpm typecheck` or build to verify no errors
|
|
- [x] Verify data imports correctly
|
|
|
|
## Dev Notes
|
|
|
|
### Architecture Alignment
|
|
|
|
- **Schema:** Must conform to `Resume` interface from Story 1.1
|
|
- **Location:** `app/data/` follows Nuxt 4 convention for data files
|
|
- **Naming:** `resume.en.ts` supports 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 `endDate` for 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 `string` type for YYYY-MM format
|
|
- **Optional Fields:** `url`, `endDate`, `languages`, `certifications` are 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.ts` with sample resume data
|
|
- Imported `Resume` type 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.ts` with header comment
|
|
- ✅ Exported `resumeData` constant with `Resume` type 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
|