react-resume-kit
Version:
A collection of components for building a resume or CV with React
282 lines (218 loc) • 6.36 kB
Markdown
# React Resume Kit
<br/>
<br/>
<div align="center">
<img src="https://github.com/Kiyameh/react-resume-kit/blob/main/public/logo.png" alt="React Resume Kit Logo" width="300"/>
</div>
<br/>
<br/>
A modern, customizable React component for creating beautiful and professional resumes or curriculum for your website. Built with TypeScript.
## Live Demo
Check out the live demo at [https://react-resume-kit.vercel.app/](https://react-resume-kit.vercel.app/)
## Features
- 🌐 Multi-language support
- 📄 PDF download functionality
- 🎨 Customizable themes with CSS variables
- 🎯 Icon support (any React element, recommended Lucide Icons, Simple Icons, etc.)
- ⚡ Easy to configure and integrate
- 📱 Responsive design
- 🎨 Modern and clean UI
- 🔧 Custom toolbar creation with `useToolbar` hook
- 🎭 Comprehensive styling system with `.rrk-` prefixed classes
- 🌙 Dark/light theme support
- 📖 Complete documentation in English and Spanish
## Installation
```bash
npm install react-resume-kit
```
## Quick Start
```tsx
import { ResumeLayout, ResumeHeader } from "react-resume-kit";
import { content } from "./your-content-file";
function App() {
return (
<ResumeLayout resumeContent={content}>
<ResumeHeader />
</ResumeLayout>
);
}
```
## Configuration
STEP1: Add the ResumeLayout component by wrapping one or more of the following:
```tsx
<ResumeHeader/>
<ResumeAbout/>
<ResumeWorks/>
<ResumeCourses/>
<ResumeTechnologies/>
<ResumeSoftSkills/>
<ResumeProjects/>
<ResumeContact/>
```
STEP2: You can add the following props to ResumeLayout component:
- initialLanguage="es"
- resumeContent={content}
- enableLanguageSwitch
- enablePdfDownload
STEP3: Copy the data/exampleContent file that contains all the resume data. Update it. The content should follow this structure:
```typescript
import { ReactElement } from "react";
type ResumeContent = {
// One for each language
en: {
// Section names
about_title: string;
works_title: string;
courses_title: string;
techs_title: string;
soft_skills_title: string;
soft_skills_subtitle: string;
projects_title: string;
projects_subtitle: string;
connect_title: string;
// Download button text
download_pdf: string;
// Language switcher
switcher_text: string;
language_labels: Array<{ label: string; value: string }>;
// Header
name: string;
title: string;
email: string;
phone: string;
location: string;
picture?: string;
// About
about_text: string;
// Experience
works: Array<{
title: string;
company: string;
date: string;
location: string;
points: string[];
}>;
// Courses
courses: Array<{
degree: string;
school: string;
date: string;
}>;
// Technologies
technologies: Array<{
name: string;
icon: ReactElement;
}>;
// Soft Skills
soft_skills: Array<{
title: string;
description: string;
icon: ReactElement;
}>;
// Projects
projects: Array<{
title: string;
description: string;
features: string;
technologies: string[];
link?: string;
}>;
// Footer
author: string;
socialLinks: Array<{
name: string;
icon: ReactElement;
url: string;
}>;
};
};
```
### Example usage for technologies
```tsx
import { SiReact, SiTypescript } from "@icons-pack/react-simple-icons";
const content = {
en: {
// ...
technologies: [
{ name: "React", icon: <SiReact /> },
{ name: "TypeScript", icon: <SiTypescript /> },
// ...
],
// ...
},
// ...
};
```
## Icons
The component supports any React element as an icon. You can use icons from any library, such as [Simple Icons](https://simpleicons.org) or [Lucide Icons](https://lucide.dev/), by importing the icon component and passing it directly:
```tsx
import { SiReact } from "@icons-pack/react-simple-icons";
// ...
technologies: [
{ name: "React", icon: <SiReact /> },
// ...
];
```
You are responsible for importing and rendering the icon you want. The component will automatically inject the necessary CSS class for consistent styling.
## Language Support
The component supports multiple languages. You need to provide the content for each language in the content object:
```typescript
const content = {
en: {
/* English content */
},
es: {
/* Spanish content */
},
};
```
## Customization
### Styling System
The package includes a comprehensive styling system based on CSS variables and specific classes. All components use classes that start with `.rrk-` (react-resume-kit) for easy identification and customization.
#### Quick Customization
```css
:root {
--rrk-primary: #3b82f6; /* Your primary color */
--rrk-surface-100: #ffffff; /* Background color */
--rrk-content: #1f2937; /* Text color */
--rrk-radius-medium: 0.75rem; /* Border radius */
}
```
#### Advanced Customization
- **Variables CSS**: Override any CSS variable to change colors, shadows, borders, etc.
- **Component Classes**: Target specific components using their `.rrk-` classes
- **Developer Tools**: Inspect elements to see all available classes
- **Repository**: Check component CSS files for complete class reference
📖 **Full Documentation**:
- [Styling System Guide](./docs/styling-system.en.md)
- [Toolbar Customization Guide](./docs/toolbar-customization.en.md)
- [Documentation Index](./docs/README.md)
🎨 **Theme Examples**: [Custom Themes](./examples/custom-themes.css)
### Custom Toolbar
Create your own toolbar using the `useToolbar` hook:
```tsx
import { useToolbar } from "react-resume-kit";
function MyCustomToolbar() {
const { handlePrint, languageLabels, handleLanguageSelect } = useToolbar();
return (
<div className="my-toolbar">
<button onClick={handlePrint}>📄 Download</button>
<select onChange={(e) => handleLanguageSelect(e.target.value)}>
{languageLabels.map((lang) => (
<option key={lang.value} value={lang.value}>
{lang.label}
</option>
))}
</select>
</div>
);
}
```
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
MIT
## Author
Andoni Abarzuza (@kiyameh)