mirror of
https://github.com/mmahdium/portfolio.git
synced 2026-08-14 20:22:49 +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).
153 lines
6.9 KiB
XML
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>
|