useResume hook for state management and provides an intuitive interface for data entry.
Form Components
PersonalInfoForm
ThePersonalInfoForm component collects basic contact and personal information.
Location: src/components/Editor/PersonalInfoForm.tsx:6
Features:
- Two-column grid layout for efficient space usage
- Integrated with
useResumehook for state management - Real-time updates as you type
- Placeholder text for guidance
User’s full name (e.g., “John Doe”)
Current or desired job title (e.g., “Software Engineer”)
Email address with email validation
Phone number with tel input type
Current location (e.g., “New York, NY”)
Personal website URL
LinkedIn profile URL
GitHub profile URL
ExperienceForm
TheExperienceForm component manages work experience entries with add/remove functionality.
Location: src/components/Editor/ExperienceForm.tsx:9
Features:
- Add multiple experience entries
- Animated entry/exit transitions using Framer Motion
- “Currently working here” checkbox that disables end date
- Individual remove buttons for each entry
- Empty state message when no entries exist
Company or organization name
Job title or role
Work location
Start date (format: MM/YYYY)
End date (format: MM/YYYY or “Present”) - disabled when current is true
Whether this is the current position
Multi-line description of responsibilities and achievements
EducationForm
TheEducationForm component manages educational background entries.
Location: src/components/Editor/EducationForm.tsx:9
Features:
- Similar structure to ExperienceForm
- Animated transitions for adding/removing entries
- Grid layout for organized input fields
- Empty state when no education is added
Institution name
Degree type (e.g., “Bachelor of Science”)
Field of study (e.g., “Computer Science”)
Start year (format: YYYY)
End year (format: YYYY)
Additional details like coursework, honors, GPA
SkillsForm
TheSkillsForm component provides a tag-based interface for managing skills.
Location: src/components/Editor/SkillsForm.tsx:9
Features:
- Form-based skill addition
- Tag-style display with remove buttons
- Animated skill badges using Framer Motion
- Input clearing after adding a skill
Unique identifier (generated with crypto.randomUUID())
Skill name (e.g., “React”, “TypeScript”)
ProjectsForm
TheProjectsForm component manages personal or professional project entries.
Location: src/components/Editor/ProjectsForm.tsx:9
Entry Fields:
Project name
GitHub repository URL
Live demo or production URL
Project description and key features
CustomSectionForm
TheCustomSectionForm component allows users to create custom resume sections.
Location: src/components/Editor/CustomSectionForm.tsx:9
Features:
- Two-level management: sections and items within sections
- Add custom section titles (e.g., “Volunteer”, “Awards”)
- Each section can have multiple items
- Remove entire sections or individual items
Section unique identifier
Section title displayed in the resume
Array of custom section items
Item title (e.g., role or award name)
Item subtitle (e.g., organization or issuer)
Start date (format: MM/YYYY)
End date (format: MM/YYYY)
Item description
Common Form Patterns
State Management Integration
All form components follow a consistent pattern for state management:- Extract data from context:
const { resumeData, ...methods } = useResume() - Render input fields: Connected to resume data via
valueprop - Handle changes: Call update methods from
useResumehook - Local state: Only used for temporary input (like
newSkillin SkillsForm)
Animation Pattern
Forms with multiple entries use Framer Motion for smooth transitions:Component Composition
Forms are composed using the UI component library:- Card: Container with optional title and action buttons
- Input: Text input fields with labels
- TextArea: Multi-line text input
- Button: Action buttons with icons and variants
Form Validation
Currently, forms rely on:- HTML5 input types (
email,tel) for basic validation - Trim operations to prevent empty entries
- Disabled states for conditional fields (like end date when current job)

