Overview
The Resume Builder is a client-side React application built with modern web technologies. The architecture emphasizes simplicity, type safety, and a great user experience with real-time preview capabilities.Application Architecture
The application follows a traditional React component-based architecture with centralized state management:State Management
You manage application state using React Context API through theResumeProvider component located in src/hooks/useResume.tsx:36.
ResumeContext
The context provides:- Resume data state: Personal info, experience, education, skills, projects, and custom sections
- Template selection: Currently selected template (classic, modern, or minimal)
- CRUD operations: Methods to add, update, and remove resume entries
- Section ordering: Drag-and-drop reordering of resume sections
Data Persistence
The application uses browserlocalStorage for data persistence:
- Resume data is saved to
resume-builder-datakey - Selected template is saved to
resume-builder-templatekey - Data is automatically saved on every state change via
useEffecthooks (src/hooks/useResume.tsx:66)
All data is stored locally in the user’s browser. No server-side storage is used.
Component Hierarchy
The application has a clear component hierarchy:Root Level
- __root.tsx: Defines the HTML document structure, metadata, and includes TanStack devtools
- router.tsx: Configures TanStack Router with the generated route tree
Page Level
- index.tsx: Main application page wrapped with
ResumeProvider - Contains the split-view layout (Editor + Preview)
Feature Components
Editor Components (src/components/Editor/):
PersonalInfoForm: Contact information and job titleExperienceForm: Work experience entriesEducationForm: Educational backgroundSkillsForm: Skills managementProjectsForm: Project showcasesCustomSectionForm: User-defined sections
src/components/Preview/):
Preview: Main preview containerSectionRenderer: Renders individual sections
src/components/ResumeRenderer/):
UniversalRenderer: Template-agnostic rendering engineSectionRenderer: Section-specific rendering logic- Section-specific components in
sections/directory
UI Components
Reusable UI primitives insrc/components/ui/:
Button: Action buttonsCard: Container componentInput: Form inputs and textareas
Data Flow
Editing Flow
- User interacts with an Editor form component
- Form calls a method from
useResume()hook - Context updates the state
useEffectpersists to localStorage- Preview component automatically re-renders with new data
Template Switching Flow
- User selects a template from
TemplateSelector setSelectedTemplateupdates context state- Template preference saved to localStorage
- Preview re-renders using the new template’s styling from
src/templates/
Section Reordering Flow
- User drags sections in
SectionOrderEditor(uses@dnd-kit) reorderSectionscalled with new order array- Context updates
sectionOrderin resume data - Preview reflects new section arrangement
Rendering Architecture
The application uses a template-driven rendering approach:Template System
Templates are JSON configuration files insrc/templates/:
classic.json: Traditional serif layoutmodern.json: Contemporary designminimal.json: Clean, minimalist style
- Theme: Colors, typography, spacing
- Layout: Column structure
- Structure: Section ordering
- Variants: Section-specific styling
Universal Renderer
TheUniversalRenderer component reads template configuration and applies:
- CSS custom properties for theming
- Dynamic section rendering based on
sectionOrder - Template-specific variants for each section type
Type Safety
The application is fully typed with TypeScript. Core types are defined insrc/types.ts:1:
ResumeData: Complete resume structurePersonalInfo,Experience,Education, etc.: Individual section typesResumeTemplate: Template variant typeSectionId: Valid section identifiers
Build Architecture
The application uses Vite as the build tool with:- TanStack Start: Full-stack React framework
- TanStack Router Plugin: Automatic route generation
- Tailwind CSS: Utility-first styling via Vite plugin
- TypeScript: Type checking and compilation
Performance Considerations
Client-Side Rendering
- Real-time preview updates without network requests
- LocalStorage for instant data persistence
- Component memoization where beneficial
Print Optimization
- Print-specific CSS styles
- Full-size preview rendering for PDF export
- Hidden UI elements during print (
no-printclass)
Responsive Design
- Mobile: Single column with modal preview
- Desktop: Split-view with sticky preview
- Floating preview button for mobile users
Next Steps
Tech Stack
Explore the technologies powering the application
Project Structure
Navigate the codebase directory structure

