Files
portfolio/docs/sprint-artifacts/1-2-create-sample-resume-data-file.context.xml
T
mahdiarghyani a492b0ba05 feat(epic-1): complete resume data foundation - types, data, and composable
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).
2025-11-30 15:06:20 +03:30

153 lines
6.9 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<story-context id="story-1-2-context" v="1.0">
<metadata>
<epicId>1</epicId>
<storyId>2</storyId>
<title>Create Sample Resume Data File</title>
<status>ready-for-dev</status>
<generatedAt>2025-11-30</generatedAt>
<generator>BMAD Story Context Workflow</generator>
<sourceStoryPath>docs/sprint-artifacts/1-2-create-sample-resume-data-file.md</sourceStoryPath>
</metadata>
<story>
<asA>developer</asA>
<iWant>a sample resume data file with realistic content</iWant>
<soThat>I can test the preview and PDF generation with real data</soThat>
<tasks>
<task id="1" ac="1">Create app/data/resume.en.ts file with header comment</task>
<task id="2" ac="2">Import Resume type and export resumeData constant</task>
<task id="3" ac="3,4,5,6">Define basics section (name, label, email, phone, location, profiles, summary)</task>
<task id="4" ac="7">Define work experience (2+ entries, 3+ highlights each)</task>
<task id="5" ac="8">Define education (1+ entry)</task>
<task id="6" ac="9">Define skills (2+ categories, 4+ keywords each)</task>
<task id="7" ac="10">Define languages (2+ entries)</task>
<task id="8" ac="1-11">Verify TypeScript compilation</task>
</tasks>
</story>
<acceptanceCriteria>
<criterion id="AC-1">File exists at app/data/resume.en.ts</criterion>
<criterion id="AC-2">Exports resumeData of type Resume</criterion>
<criterion id="AC-3">Contains full name and job title in basics</criterion>
<criterion id="AC-4">Contains contact info (email, phone, location) in basics</criterion>
<criterion id="AC-5">Contains at least 2 social profiles with icons (LinkedIn, GitHub)</criterion>
<criterion id="AC-6">Contains professional summary (2-3 sentences)</criterion>
<criterion id="AC-7">Contains at least 2 work experiences with 3+ highlights each</criterion>
<criterion id="AC-8">Contains at least 1 education entry</criterion>
<criterion id="AC-9">Contains at least 2 skill categories with 4+ keywords each</criterion>
<criterion id="AC-10">Contains at least 2 languages</criterion>
<criterion id="AC-11">Data is independent from portfolio data</criterion>
</acceptanceCriteria>
<artifacts>
<docs>
<doc>
<path>docs/architecture.md</path>
<title>Resume Export Feature - Architecture Document</title>
<section>Data Architecture - Sample Data Structure</section>
<snippet>Defines sample resume data structure with Ali Arghyani as sample name. Includes basics, work, education, skills, languages sections.</snippet>
</doc>
<doc>
<path>docs/epics.md</path>
<title>Resume Export Feature - Epic Breakdown</title>
<section>Story 1.2: Create Sample Resume Data File</section>
<snippet>Acceptance criteria for sample data including realistic content requirements and independence from portfolio data.</snippet>
</doc>
<doc>
<path>docs/sprint-artifacts/tech-spec-epic-1.md</path>
<title>Epic Technical Specification: Resume Data and Types</title>
<section>Data Models and Contracts</section>
<snippet>Complete data structure examples with sample values for all resume sections.</snippet>
</doc>
<doc>
<path>docs/prd.md</path>
<title>nuxt-portfolio - Product Requirements Document</title>
<section>Functional Requirements FR1-4</section>
<snippet>FR1: System stores resume data in dedicated file. FR3: Resume data is independent from portfolio data.</snippet>
</doc>
</docs>
<code>
<file>
<path>app/types/resume.ts</path>
<kind>types</kind>
<symbol>Resume, ResumeBasics, WorkExperience, Education, Skill, Language, Certification</symbol>
<reason>MUST import Resume type from this file. Created in Story 1.1.</reason>
</file>
<file>
<path>app/data/portfolio.ts</path>
<kind>data</kind>
<symbol>portfolio</symbol>
<reason>Reference for data file pattern. Resume data should follow similar structure but be INDEPENDENT.</reason>
</file>
<file>
<path>app/data/portfolio.en.ts</path>
<kind>data</kind>
<symbol>default export</symbol>
<reason>Reference for locale-specific data file naming pattern (resume.en.ts).</reason>
</file>
</code>
<dependencies>
<node>
<package>typescript</package>
<version>^5.9.x</version>
<purpose>Type checking for data file</purpose>
</node>
<node>
<package>nuxt</package>
<version>^4.1.3</version>
<purpose>Auto-imports data from app/data/</purpose>
</node>
</dependencies>
</artifacts>
<constraints>
<constraint type="schema">Data must conform to Resume interface from app/types/resume.ts</constraint>
<constraint type="format">Date fields must use YYYY-MM string format (e.g., "2022-01")</constraint>
<constraint type="independence">Resume data must be independent from portfolio data (FR3)</constraint>
<constraint type="extension">File naming supports future i18n (resume.en.ts, resume.fa.ts)</constraint>
<constraint type="location">File must be at app/data/resume.en.ts</constraint>
<constraint type="icons">Use Iconify icon names for profiles: i-mdi-linkedin, i-mdi-github</constraint>
<constraint type="fluency">Language fluency must use union type: 'Native' | 'Fluent' | 'Intermediate' | 'Basic'</constraint>
<constraint type="sample">Use Ali Arghyani as sample name per Architecture doc</constraint>
</constraints>
<interfaces>
<interface>
<name>Resume</name>
<kind>TypeScript interface</kind>
<signature>
interface Resume {
basics: ResumeBasics
work: WorkExperience[]
education: Education[]
skills: Skill[]
languages?: Language[]
certifications?: Certification[]
}
</signature>
<path>app/types/resume.ts</path>
</interface>
<interface>
<name>resumeData export</name>
<kind>TypeScript const export</kind>
<signature>export const resumeData: Resume = { ... }</signature>
<path>app/data/resume.en.ts (to be created)</path>
</interface>
</interfaces>
<tests>
<standards>TypeScript compiler validates data structure at build time. No runtime tests needed for static data. Use pnpm typecheck or pnpm build to verify compilation.</standards>
<locations>
<location>TypeScript compilation (pnpm typecheck)</location>
<location>Build process (pnpm build)</location>
</locations>
<ideas>
<idea ac="AC-1">Verify file exists after creation</idea>
<idea ac="AC-2">TypeScript compiler validates type annotation</idea>
<idea ac="AC-3-10">Manual review of data content completeness</idea>
<idea ac="AC-11">Verify no imports from portfolio data files</idea>
</ideas>
</tests>
</story-context>