Forked from midudev/minimalist-portfolio-json
A minimalist CV/portfolio built with Astro and enhanced with multilingual support, theme system, and some features.
- 🎨 Clean Design - Based on Bartosz Jarocki's elegant design
- 📄 Print Optimized - Perfect for both web viewing and PDF generation with A4 formatting
- 🌍 Multi-language Support - Automatic detection with browser preference integration
- 🎨 Theme System - Light, dark, and auto modes with system theme following
- 📝 Rich Text Formatting - HTML markup support in CV content
- 💼 Enhanced Experience - Location, department, and expandable details section
- 📱 Mobile Responsive - Optimized for all screen sizes with touch-friendly controls
- 🔧 Conditional Rendering - Sections auto-hide when no content is available
- Astro - Modern web framework
- TypeScript - Type-safe JavaScript
- Hotkeypad - Keyboard shortcuts menu
# Clone this enhanced version
git clone https://github.com/[your-username]/cv.git
cd cv
# Install dependencies (using bun recommended)
bun iCreate your main CV data file and language-specific CV data files for each supported language:
cv.json- Main CV data filecv.en_us.json- English versioncv.zh_tw.json- Traditional Chinese version- ...etc
Use the JSON Resume schema format for your CV data files, and some extended fields are defined in src/cv.d.ts file.
bun startOpen http://localhost:4321 to see your CV.
/
├── src/
│ ├── components/
│ │ ├── sections/ # CV sections (Hero, About, Experience, etc.)
│ │ ├── KeyboardManager.astro
│ │ └── LanguageSwitcher.astro
│ ├── i18n/
│ │ ├── ui.ts # UI translations
│ │ └── utils.ts # Translation utilities
│ ├── utils/
│ │ ├── language-context.ts # Language management
│ │ ├── date-formatter.ts # Date formatting utilities
│ │ └── section-utils.ts # Content validation
│ └── pages/
│ ├── [lang]/
│ │ └── index.astro # Multi-language pages
│ ├── 404.astro # Error page with redirection
│ └── index.astro # Language detection & redirect
├── cv.<language_code>.json # Language specific CV data (e.g., `cv.en_us.json`, `cv.zh_tw.json`)
└── cv.json # Default CV data
| Command | Action |
|---|---|
bun dev / bun start |
Start development server at localhost:4321 |
bun run build |
Build production site to ./dist/ |
bun preview |
Preview build locally |
The system automatically detects available CV files and UI translations, falling back gracefully when content isn't available in the user's preferred language.
1. UI Translations
- Location:
src/i18n/ui.ts - Add new language keys to the
uiobject with corresponding translations - Supports parameter interpolation (e.g.,
{name},{network})
2. CV Data Files
- Main CV data file:
cv.json(must have) - Language-specific CV data file:
cv.{language_code}.json(e.g.,cv.en_us.json,cv.zh_tw.json) - Place in project root directory
- Follow JSON Resume schema format
3. Language Display Names and Default Language
- Location:
astro.config.mjs→i18nConfig.languageNames - Controls how language names appear in the language switcher
- Format:
'language_code': 'Display Name'
// Example in astro.config.mjs
languageNames: {
'zh_tw': '繁體中文',
'en_us': 'English (US)',
'ja_jp': '日本語',
'es_es': 'Español'
}- Multi-language Support - Automatic detection with browser preference integration and persistence
- Rich Text Formatting - HTML markup support for enhanced CV content styling
- Work Experience Enhancements - Location, department, and expandable details sections
- Theme System - Complete dark mode with automatic system detection and persistence
- Interactive Skills - Expandable cards with level indicators, keywords, and category icons
- Rich CV Sections - Certificates, interests, education highlights with conditional rendering
- Native Print Support - Built-in window.print() with optimized A4 layouts and page breaks
- Smart Date Formatting - Displays work duration in natural language and i18n support
MIT - Originally created by midudev, enhanced with additional features.
- Original design: Bartosz Jarocki
- Base template: midudev
- JSON Resume schema: jsonresume.org