A modern, responsive React-based theme for JSON Resume, built with React, TypeScript, and Vite.
- 🚀 Modern Stack: Built with React 18, TypeScript, and Vite
- 🌐 Multilingual Support: Built-in internationalization with i18next
- 🎨 Modern UI: Clean, professional design with Tailwind CSS
- 📱 Responsive Design: Optimized for all devices
- 📝 Markdown Support: Rich text formatting in descriptions
- 🖨️ Print-Friendly: Optimized for PDF generation
- 🔍 Type Safety: Full TypeScript support with generated types
- Node.js 20+
- npm 9+
-
Clone the repository:
git clone https://github.com/phoinixi/jsonresume-theme-react.git cd jsonresume-theme-react -
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Create your resume:
- Place your
resume.jsonfile in the project root - For multiple languages, create files like
resume-fr.json,resume-de.json, etc.
- Place your
-
Build and render your resume:
npm run render:resumed
This will:
- Build the theme
- Render your resume
- Output to
public/index.html
The theme supports multiple languages using the language property within your resume.json file. The theme uses i18next for internationalization, and translations are located in the src/i18n directory.
-
Set the Language in
resume.json: Inside yourresume.jsonfile, specify the desired language code (e.g.,en,fr,de) at the root level:{ "language": "fr", // Set this to the desired language "basics": { // ... your basic info } // ... rest of your resume data } -
Rendering: When you run the render script (
npm run render:localor usingresumed), the theme will read the rootlanguageproperty and load the corresponding translations.The rendered output file (
public/index.htmlby default) will be in the language specified in the JSON. -
Development Server: The development server (
npm run dev) will also respect the rootlanguageset in theresume.jsonfile used for preview.
Note: While you can maintain separate files like resume-en.json, resume-fr.json for organizational purposes, the theme itself only cares about the root language property within the specific JSON file being rendered or previewed.
npm run dev: Start development servernpm run build: Build the theme for productionnpm run render:resumed: Build and render your resumenpm run generate-types: Generate TypeScript types from JSON schemanpm run test: Run test suitenpm run lint: Run ESLintnpm run format: Format code with Prettier
├── src/
│ ├── components/ # React components
│ ├── i18n/ # Internationalization
│ ├── styles/ # CSS and Tailwind config
│ ├── types/ # TypeScript types
│ └── utils/ # Utility functions
├── scripts/ # Build and render scripts
├── public/ # Static assets
└── resume.json # Sample resume
MIT
