| title | CV Generator |
|---|---|
| author | Giak |
| date | 2025-03-10 |
| status | active |
| version | 1.1.0 |
💡 Modern CV builder with full JSON Resume standard support, real-time validation, multiple export formats, and multilingual interface
# Installation
pnpm install
# Development
pnpm dev
# Visit http://localhost:3000- Overview
- Features
- Tech Stack
- Current Status
- Architecture
- Getting Started
- Usage
- Project Structure
- Development
- Deployment
- Maintenance
- Changelog
- License
- Acknowledgments
CV Generator is a modern web application that helps you create professional CVs using the JSON Resume standard. Built with Vue 3, TypeScript, and following Clean Architecture principles, it offers a seamless experience for creating, editing, and exporting CVs in multiple formats.
Managing and updating CVs in various formats can be challenging and time-consuming. Traditional word processors lack standardization and make it difficult to maintain consistent formatting across different versions. Additionally, language barriers can limit the reach of your CV in international job markets.
CV Generator provides a structured, standardized approach to CV creation using the JSON Resume format (https://jsonresume.org/schema/), combined with a modern, intuitive interface and real-time preview capabilities. The application ensures your CV data is always compliant with the standard, enabling interoperability with other tools in the JSON Resume ecosystem. With full multilingual support, you can easily create and manage CVs in different languages to target international employers.
-
📝 JSON Resume Standard Support
- 100% compliant with the official JSON Resume schema
- Real-time schema validation and error detection
- Complete implementation of all schema sections and properties
- Seamless import/export for interoperability with JSON Resume ecosystem
- Compatibility with existing JSON Resume themes and tools
-
🎨 Modern UI/UX
- Real-time preview of changes
- Responsive design for all devices
- Customizable themes and layouts
- Drag-and-drop field organization
- Event-based navigation without page reloads (SPA)
- Visual indicators for form completion status
- Intuitive progress tracking across all CV sections
-
🌍 Internationalization & Multilingual Support
- Complete UI internationalization with 22 components translated
- Support for English and French languages with easy switching
- Robust validation messages in multiple languages
- Safe translation system with fallback handling
- Extensible translation key structure for adding new languages
- Comprehensive testing infrastructure for multilingual validation
- Developer-friendly tools for adding new translations
- Reactive updates when changing language in real-time
-
💾 Data Management
- Automatic local storage backup
- Offline capabilities with PWA support
- Auto-save functionality with history
- Version control for CV iterations
- State preservation during navigation
-
✅ Validation Strategy
- Robust Result/Option Pattern implementation
- Multi-layer validation (Domain, Application, Presentation)
- Multilingual validation messages with i18n support
- Comprehensive error catalog with standardized codes
- Detailed validation messages with helpful suggestions
- Warning support for non-blocking validation issues
- Rich error context with severity levels and field mapping
- Type-safe validation with TypeScript generics
- Backward-compatible migration strategy
- Zod integration for schema-based validation
-
🚦 Advanced Navigation
- True Single-Page Application experience
- Smart section suggestion based on completion status
- Visual progress indicators for each section
- Consistent navigation patterns across components
- Event-based navigation system for seamless transitions
-
📤 Export Options
- PDF export with customizable styles
- HTML export for online publishing
- JSON export for data portability
- Multiple theme selection for exports
| Technology | Version | Purpose | Benefits |
|---|---|---|---|
| Vue.js | 3.4+ | Frontend framework and component architecture | Reactivity, composition API, TypeScript support |
| TypeScript | 5.7+ | Type safety and enhanced developer experience | Strong typing, better IDE support, error prevention |
| Vite | 6.0+ | Build tool and development server | Fast HMR, efficient bundling, plugins |
| Tailwind CSS | 3.4.0 | Utility-first styling framework | Responsive design, minimal CSS, customizability |
| Vitest | 3.x+ | Testing framework integrated with Vite | Fast test execution, Vue component testing |
| Pinia | 2.1+ | State management with TypeScript support | DevTools, modular stores, composition API |
| Zod | 3.22+ | Schema validation and runtime type checking | Type inference, custom validations |
| pnpm | 10+ | Package manager with monorepo workspace support | Efficient disk usage, workspaces, speed |
| Vue Router | 4.2+ | Client-side routing and navigation | Seamless SPA transitions, lazy loading |
| Vue I18n | 9.2+ | Internationalization solution for Vue | Multilingual support, message format, pluralization |
| Mermaid | 10.x+ | Diagrams and visualization | Documentation, architecture visualization |
- Epic-1: Fondation du système ✅ 100% Complété
- Architecture Clean Architecture mise en place
- Structure en packages établie
- Modèles de données JSON Resume implémentés
- Epic-2: Refactorisation des Composants CV ✅ 100% Complété
- ✅ Composable
useFormModelpour la gestion standardisée des modèles de formulaire - ✅ Composable
useFormValidationpour la validation centralisée des formulaires - ✅ Composable
useCollectionFieldpour la gestion des collections d'éléments - ✅ Composant
DateRangeFieldspour les plages de dates avec option "en cours" - ✅ Composant
CollectionManagerpour l'affichage et la gestion des listes d'éléments - ✅ Tous les composants formulaires (12/12) refactorisés
- ✅ Tous les composants listes (10/10) refactorisés
- ✅ Documentation technique et tests unitaires complétés
- ✅ Composable
- Epic-3: Édition de CV 🔄 75% Complété
- ✅ Formulaires pour les informations de base (basics)
- ✅ Formulaires pour l'expérience professionnelle (work)
- ✅ Tri chronologique implémenté pour les listes éducation
- ✅ Système de validation standardisé avec Result/Option Pattern (60%)
- ✅ Migration des Value Objects principaux (Email, Phone, WorkDate) vers le nouveau système
- 🔄 Implémentation des formulaires pour l'éducation (education) en cours (80%)
- ✅ Système de navigation modernisé avec émission d'événements
- ✅ Composant
UnifiedNavigationpour une navigation cohérente - ✅ Composant
FormNavigationrefactorisé pour utiliser le même système d'événements - 🔄 Optimisation pour l'expérience mobile en cours
- ⏳ Formulaires pour les compétences (skills) et autres sections planifiés
- ⏳ Support des sections optionnelles du standard JSON Resume
- Epic-5: Internationalisation & Multilinguisme ✅ 100% Complété
- ✅ Architecture i18n (100%)
- ✅ Clés de traduction centralisées (100%)
- ✅ Adaptation des composants Value Objects et services (100%)
- ✅ Adaptation des composables UI comme useValidationResult (100%)
- ✅ Support complet pour français et anglais (100%)
- ✅ Tests multilingues (100%)
- ✅ Documentation technique complète (100%)
- Epic-4: Prévisualisation et exportation ⏳ Planifié
- Epic-6: Optimisation ATS ⏳ Planifié
✨ Recent Achievement: Complete UI Internationalization ✨
The application now features a comprehensive internationalization system:
-
✅ Translated Components:
- All 22 UI components are now fully internationalized
- Support for English and French languages
- Robust translation key structure for easy maintenance
- Safe translation handling with fallback mechanism
-
✅ Domain Layer Internationalization:
- Extraction of hardcoded messages from domain entities and value objects
- Implementation of Adapter pattern for i18n integration in the domain layer
- Centralized translation keys for validation messages
- Default adapters for backward compatibility
- Complete internationalization of key value objects:
url.value-object.tsdate-range.value-object.tswork-date.value-object.tsemail.value-object.tsphone.value-object.ts
- Internationalized domain entities:
Work.tsResume.ts
- Structured approach that maintains Clean Architecture principles
-
✅ Internationalized Validation:
- Adapted composables (
useValidationResult,useValidationCatalogue) for i18n - Multilingual validation messages with interpolation support
- Reactive updates when language changes
- Preserved compatibility with existing API
- Adapted composables (
-
✅ Testing Infrastructure:
- Specialized i18n testing plugin for Vue components
- Utilities for testing components in multiple languages
- Automated detection of i18n-related console errors
- Multilingual testing scripts for efficient validation
-
✅ Developer Experience:
- Reference guide for adding new translation keys
- Standardized approach for component internationalization
- Comprehensive technical documentation for code review
- Best practices for UI text internationalization
This enhancement brings several benefits:
- Improved user experience with native language support
- Global accessibility for French and English-speaking users
- Enhanced maintainability with centralized translation keys
- Robust testing ensuring correct translations across the application
- Framework for future languages with minimal additional effort
// Example: Safe translation function
function safeTranslate(key: string, fallback: string = ""): string {
const translation = t(key);
// If translation equals the key, it doesn't exist
return translation === key ? fallback : translation;
}// Example: Component with i18n support
<template>
<h2>{{ t(TRANSLATION_KEYS.CV.LISTS.WORK.TITLE) }}</h2>
<p>{{ safeTranslate(TRANSLATION_KEYS.CV.LISTS.WORK.DESCRIPTION, 'Fallback text') }}</p>
</template>// Example: Internationalized validation with useValidationResult
const { allErrors, setResult } = useValidationResult(null, {
i18n: {
t: i18n.t,
locale: ref(i18n.locale)
}
});
// ValidationErrorInterface with i18n support
{
field: 'email',
message: 'Invalid email',
code: 'EMAIL_INVALID',
severity: 'error',
i18nKey: 'validation.email.invalid', // Will be translated
layer: ValidationLayerType.PRESENTATION
}// Example: Domain entity internationalization with Adapter pattern
// DomainI18nPortInterface - Interface for i18n in domain layer
export interface DomainI18nPortInterface {
translate(key: string, params?: Record<string, unknown>): string;
exists(key: string): boolean;
}
// DefaultI18nAdapter - Default implementation for backward compatibility
class DefaultI18nAdapter implements DomainI18nPortInterface {
translate(key: string, _params?: Record<string, unknown>): string {
// Default fallback messages
const defaultMessages: Record<string, string> = {
[URL_VALIDATION_KEYS.MISSING_URL]: "L'URL est requise",
[URL_VALIDATION_KEYS.INVALID_URL]: "Format d'URL invalide"
// More default messages...
};
return defaultMessages[key] || key;
}
exists(_key: string): boolean {
return true;
}
}
// Factory method with i18n adapter injection
public static create(
url: string,
i18n: DomainI18nPortInterface = defaultI18nAdapter
): ResultType<Url> {
if (!url) {
return createFailure([{
code: ERROR_CODES.COMMON.REQUIRED_FIELD,
message: i18n.translate(URL_VALIDATION_KEYS.MISSING_URL),
i18nKey: URL_VALIDATION_KEYS.MISSING_URL,
field: "url",
severity: "error",
layer: ValidationLayerType.DOMAIN
}]);
}
// Remaining validation...
}For detailed information about the internationalization system, check the documentation in docs/epic-5/i18n-reference-guide.md and docs/epic-5/i18n-technical-review.md.
The Epic-2 has delivered several high-quality, reusable composables:
-
useFormModel: Standardized form state management with TypeScript safety
const { localModel, updateField, updateNestedField } = useFormModel({ modelValue: computed(() => props.modelValue), emit: (event, value) => emit(event, value), defaultValues: { /* default values */ }, });
The application follows a Clean Architecture approach with Domain-Driven Design principles:
-
Result Pattern: Functional approach to error handling returning success/failure objects
// Example of Result pattern implementation export class Result<T> { private constructor( public readonly isValid: boolean, public readonly errors: string[], private readonly _value?: T ) {} static success<T>(value: T): Result<T> { ... } static failure<T>(errors: string[]): Result<T> { ... } }
-
Value Objects Pattern: Encapsulation of validation and behavior in immutable objects
// Example of Email Value Object export class Email { private constructor(private readonly value: string) {} static create(email: string): Result<Email> { // Validation logic here return Result.success(new Email(email)); } getValue(): string { return this.value; } }
-
Repository Pattern: Abstraction layer for data persistence
-
Clean Architecture: Separation of concerns with domain, application, and infrastructure layers
-
Domain-Driven Design: Rich domain model with entities and value objects
-
Composable Pattern: Reusable logic with Vue Composition API
// Example of Composable Pattern with useFormModel export function useFormModel<T>({ modelValue, emit, defaultValues }) { // Implementation... return { localModel, updateField, updateNestedField }; }
---
title: CV Generator System Architecture
---
graph TD
%% Frameworks & Drivers Layer
subgraph "Frameworks & Drivers Layer (Infrastructure)"
UI["UI Components"]
WebAPI["Web API Clients"]
LocalStorage["LocalStorage"]
FileSystem["File System"]
end
%% Interface Adapters Layer
subgraph "Interface Adapters Layer"
Stores["Pinia Stores"]
Repositories["Repository Implementations"]
Presenters["Presenters/Controllers"]
end
%% Application Layer
subgraph "Application Layer"
subgraph "CV Context"
CVUseCases["CV Use Cases"]
end
subgraph "Export Context"
ExportUseCases["Export Use Cases"]
end
subgraph "User Context"
UserUseCases["User Use Cases"]
end
end
%% Domain Layer
subgraph "Domain Layer"
subgraph "Entities & Value Objects"
Entities["Domain Entities"]
ValueObjects["Value Objects"]
end
subgraph "Repository Ports"
RepoInterfaces["Repository Interfaces"]
end
subgraph "Domain Services"
DomainServices["Domain Services"]
end
end
%% Dependencies between layers
UI --> Stores
UI --> Presenters
Stores --> CVUseCases
Stores --> ExportUseCases
Stores --> UserUseCases
Presenters --> CVUseCases
Presenters --> ExportUseCases
Repositories --> RepoInterfaces
WebAPI --> RepoInterfaces
LocalStorage --> Repositories
FileSystem --> Repositories
CVUseCases --> Entities
CVUseCases --> RepoInterfaces
CVUseCases --> DomainServices
ExportUseCases --> Entities
ExportUseCases --> DomainServices
UserUseCases --> Entities
DomainServices --> Entities
DomainServices --> ValueObjects
RepoInterfaces --> Entities
Entities --> ValueObjects
-
Clean Architecture
- Independent of frameworks
- Testable by design
- Independent of UI
- Independent of database
- Independent of external services
-
Domain-Driven Design
- Rich domain model
- Encapsulated business logic
- Ubiquitous language
- Bounded contexts
-
SOLID Principles
- Single Responsibility: Each class has one reason to change
- Open/Closed: Open for extension, closed for modification
- Liskov Substitution: Subtypes must be substitutable for base types
- Interface Segregation: Clients shouldn't depend on interfaces they don't use
- Dependency Inversion: High-level modules shouldn't depend on low-level modules
-
Testing Strategy
- Unit tests for domain logic
- Integration tests for repositories
- E2E tests for critical paths
- Component tests for UI
The application is fully compatible with the JSON Resume ecosystem:
- Complete implementation of the JSON Resume schema
- Validation against the official schema specification
- Import/export support for seamless integration with other tools
- Support for all required and optional fields defined in the standard
The application includes features to optimize your CV for Applicant Tracking Systems:
- Real-time analysis of CV content for ATS compatibility
- Keyword suggestions based on job market trends
- Readability score calculation
- Format optimization for parsing by recruitment software
- Best practices recommendations
- Node.js 22+ (LTS recommended)
- pnpm 10+
- Modern web browser (Chrome, Firefox, Safari, Edge)
- Git (for development)
-
Clone the repository:
git clone https://github.com/giak/cv-generator.git cd cv-generator -
Install dependencies:
pnpm install
-
Start development server:
pnpm dev
-
Open your browser:
http://localhost:3000
| Command | Description | When to Use |
|---|---|---|
pnpm dev |
Start development server | Local development |
pnpm build |
Build for production | Preparing for deployment |
pnpm test |
Run unit tests | Verifying component functionality |
pnpm test:e2e |
Run end-to-end tests | Testing user flows |
pnpm lint |
Lint code for errors and style issues | Code quality checks |
pnpm format |
Format code according to project standards | Maintaining consistent style |
pnpm storybook |
Run Storybook component explorer | Component development and testing |
pnpm docs:dev |
Run documentation site locally | Working on project documentation |
You can also run the application using Docker, which provides an isolated, consistent environment across different platforms.
- Docker 24.x+
- Docker Compose 2.x+
# Start in production mode (default port: 8080)
./start.sh
# or
pnpm docker:start
# Start in development mode with hot-reload
./start.sh development
# or
pnpm docker:start:dev| Command | Description |
|---|---|
pnpm docker:start |
Start production environment |
pnpm docker:start:dev |
Start development environment with hot-reload |
pnpm docker:setup |
Setup complete development environment |
pnpm docker:test |
Run tests in Docker environment |
pnpm docker:clean |
Clean Docker resources |
pnpm docker:logs |
View container logs |
pnpm docker:health |
Check health of Docker containers |
For detailed information about Docker deployment, see README.docker.md or the Docker Deployment Guide.
- Click on "Create New CV" from the home screen
- Choose a template for your CV
- Fill in your basic information in the form
- Navigate through sections using the sidebar
- Save your progress at any time with the "Save" button
Each section of your CV can be edited independently:
- Basics: Personal information and contact details
- Work Experience: Your professional history
- Education: Academic background
- Skills: Technical and soft skills
- Projects: Significant projects you've worked on
- Publications: Papers, articles, or books
- References: Professional recommendations
All fields have real-time validation with helpful error messages.
The Basic Information section allows you to manage your personal and contact details:
- Complete the form with your personal information:
- Name, email, and phone number
- Professional title/label
- Website URL
- Professional summary
- Add your location details:
- Address, city, postal code, and region
- Link your professional profiles:
- Add multiple social/professional network profiles
- Specify the network name and your profile URL
The form provides real-time validation to ensure all required fields are properly filled.
The Work Experience section allows you to showcase your professional history:
- Click "Add Work Experience" to create a new entry
- Complete the form with your work details:
- Company name and position
- Start and end dates (leave end date empty for current positions)
- Company website URL (optional)
- Job description summary
- Add key highlights for each position:
- Click "Add Highlight" to add accomplishments or responsibilities
- Highlights can be reordered by dragging
- Remove unwanted highlights with the delete button
- Edit existing work experiences by clicking on the edit button
- Change the order of work experiences using the arrow buttons
The section automatically organizes entries in reverse chronological order (most recent first).
- Click the "Export" button in the top menu
- Select your desired format:
- PDF (for printing or sharing)
- HTML (for web portfolios)
- JSON (for data backup)
- Choose a theme for your export
- Download your completed CV
- Click "Import" in the main menu
- Select a JSON Resume file from your computer
- Review and confirm the imported data
- Make any necessary adjustments
- Click on the language selector in the top navigation bar
- Choose your preferred language (English or French)
- The entire interface including validation messages will update immediately
- Your CV data remains unchanged - only the UI language changes
- You can switch languages at any time without losing your work
cv-generator/
├── packages/
│ ├── core/ # Domain & Business Logic
│ │ ├── src/
│ │ │ ├── cv/ # CV bounded context
│ │ │ │ ├── domain/ # CV domain entities, value objects
│ │ │ │ ├── application/ # CV use cases
│ │ │ │ └── ports/ # CV repository interfaces
│ │ │ │
│ │ │ ├── export/ # Export bounded context
│ │ │ │ ├── domain/ # Export domain entities
│ │ │ │ ├── application/ # Export use cases
│ │ │ │ └── ports/ # Export service interfaces
│ │ │ │
│ │ │ ├── user/ # User bounded context
│ │ │ │ └── ...
│ │ │ │
│ │ │ └── shared/ # Shared modules
│ │ │ ├── domain/ # Shared domain objects (Result, etc.)
│ │ │ └── utils/ # Shared utilities
│ │ │
│ │ │
│ │ └── __tests__/ # Core tests
│ │
│ ├── infrastructure/ # External Integrations
│ │ ├── src/
│ │ │ ├── repositories/ # Repository implementations
│ │ │ ├── services/ # External service integrations
│ │ │ └── adapters/ # External adapters
│ │ └── __tests__/ # Infrastructure tests
│ │
│ ├── shared/ # Shared Types & Utils
│ │ ├── src/
│ │ │ ├── types/ # Shared TypeScript types
│ │ │ ├── utils/ # Shared utilities
│ │ │ ├── i18n/ # Internationalization resources
│ │ │ │ ├── locales/ # Language files (en, fr)
│ │ │ │ └── keys/ # Translation key constants
│ │ │ └── constants/ # Shared constants
│ │ └── __tests__/ # Shared module tests
│ │
│ └── ui/ # Vue 3 Frontend App
│ ├── src/
│ │ ├── assets/ # Static assets
│ │ ├── components/ # Shared components
│ │ ├── modules/ # Feature modules
│ │ │ └── cv/
│ │ │ ├── domain/ # Module-specific domain
│ │ │ ├── application/# Module-specific logic
│ │ │ └── presentation/# UI components
│ │ ├── stores/ # Pinia stores
│ │ ├── i18n/ # i18n plugin configuration
│ │ └── types/ # UI-specific types
│ ├── e2e/ # E2E tests
│ └── __tests__/ # Unit tests
│
├── docs/ # Project Documentation
│ ├── architecture/ # Architecture decisions
│ ├── api/ # API documentation
│ ├── epic-5/ # Internationalization documentation
│ │ ├── i18n-reference-guide.md # Guide for adding translations
│ │ └── i18n-technical-review.md # Technical implementation details
│ └── guides/ # Development guides
│
└── .github/ # GitHub Actions & Config
├── workflows/ # CI/CD pipelines
└── environments/ # Environment configs
Each package has its own responsibilities:
| Package | Purpose | Key Files |
|---|---|---|
| core | Business logic and domain models | src/cv/domain/entities/Resume.ts |
| infrastructure | External services and persistence | src/repositories/LocalStorageResumeRepository.ts |
| shared | Common utilities and types | src/types/resume.interface.ts, src/i18n/locales/ |
| ui | User interface and presentation logic | src/modules/cv/presentation/components/BasicsForm.vue |
Our application follows a comprehensive testing approach:
-
Unit Tests: For all domain entities, services, and business logic
pnpm test:unit
-
Component Tests: For UI components and composables
pnpm test:components
-
Integration Tests: For store interactions and use cases
pnpm test:integration
-
E2E Tests: For critical user flows
pnpm test:e2e
-
i18n Tests: For internationalization functionality
pnpm test:i18n
Test coverage requirements:
- Domain logic: 90%+ coverage
- UI components: 80%+ coverage
- i18n functionality: 90%+ coverage
- Overall project: 75%+ coverage
We enforce strict code quality standards:
-
ESLint configuration with TypeScript integration
pnpm lint
-
Prettier formatting
pnpm format
-
TypeScript strict mode with no implicit any
-
Vue component conventions:
- Composition API with
<script setup> - Typed props and emits
- Single-file components
- Test co-location
- Composition API with
- Fork the repository
- Create your feature branch
git checkout -b feature/amazing-feature
- Commit your changes following conventional commits
git commit -m "feat: add amazing feature" - Push to the branch
git push origin feature/amazing-feature
- Create a Pull Request
ℹ️ Note: Please read our Contributing Guide for details on our code of conduct and development process.
To build the application for production:
pnpm buildThis creates optimized files in the dist folder, ready for deployment.
Configure the application using environment variables:
# .env.production
NODE_ENV=production
APP_TITLE=CV Generator
APP_DESCRIPTION=Modern CV builder with JSON Resume support
API_URL=https://your-api-endpoint.com/api
DEFAULT_LOCALE=en # Set default language
The application can be deployed to any platform that supports static hosting:
- Netlify
- Vercel
- GitHub Pages
- AWS S3 + CloudFront
- Any web server (Nginx, Apache, etc.)
The application can be easily deployed using Docker:
# Quick start with default settings
./start.sh
# Development mode on port 3000
./start.sh development 3000
# Production mode on port 8080
./start.sh production 8080- Consistent environment across different machines
- Easy deployment with a single command
- Isolated environment for testing and development
- No need to install Node.js or PNPM locally
For detailed instructions on Docker deployment, see README.docker.md.
You can run tests in a Docker environment to ensure consistent results:
# Run unit tests
./test-docker.sh unit
# Run end-to-end tests
./test-docker.sh e2e
# Run all tests with coverage
./test-docker.sh all true- PDF export formatting with special characters
- Workaround: Use basic Latin characters for best results
- 5MB local storage limitation
- Workaround: Export regularly to JSON and import when needed
- Font rendering differences across browsers
- Workaround: Stick to system fonts for consistent display
- Validation errors sometimes unclear on nested objects
- Workaround: Check parent fields when validation errors occur
- Track issues on GitHub
-
Development Server Issues
- Clear node_modules:
pnpm clean && pnpm install - Check Node.js version:
node --version - Verify Vite configuration:
vite.config.ts
- Clear node_modules:
-
Build Problems
- Clear cache:
pnpm clean:cache - Update dependencies:
pnpm update - Check for TypeScript errors:
pnpm typecheck
- Clear cache:
-
Data Loss Issues
- Check localStorage in browser DevTools
- Verify exports work correctly
- Consider enabling the debug mode:
localStorage.setItem('debug', 'true')
-
Internationalization Issues
- Check browser language settings
- Verify translation keys exist in the locale files
- Clear browser cache if translations don't update
- Try setting language manually:
localStorage.setItem('locale', 'en')
-
Update dependencies:
pnpm update
-
Run tests to ensure compatibility:
pnpm test -
Check for breaking changes in CHANGELOG.md
-
Update documentation if necessary:
pnpm docs:build
Q: Can I use npm or yarn instead of pnpm?
A: Yes, but pnpm is recommended for better dependency management and workspace support.
Q: How do I customize themes?
A: Edit files in packages/ui/src/assets/themes/ or create a new theme by copying an existing one.
Q: What's the maximum CV size?
A: Local storage limit is 5MB. Use export for larger files.
Q: Is my data stored on a server?
A: No, all data is stored locally in your browser. No server storage is used.
Q: Can I share my CV directly from the app?
A: Currently, you need to export and share the file. Direct sharing is planned for a future release.
Q: How do I change the language?
A: Click on the language selector in the top navigation bar and choose your preferred language (English or French).
Q: Can I add more languages?
A: Yes, by adding new locale files in packages/shared/src/i18n/locales/ and updating the language selector component.
Q: How do I report bugs or suggest features?
A: Please open an issue on our GitHub repository.
Pour une liste détaillée des modifications, consultez le CHANGELOG.md.
- Internationalization: Complete UI components translation with English and French support
- i18n Testing: Advanced testing infrastructure for multilingual components
- Validation i18n: Adapted composables for internationalized validation messages
- NavigationSystem: Completely refactored navigation with event-based architecture
- FormComponents: Standardized all form components with TypeScript type safety
- CollectionManager: Added unified list management with drag-and-drop support
- ValidationSystem: Implemented robust Result/Option Pattern for standardized validation
- Performance: Improved rendering performance for large CV collections
- JSON Resume for the standardized format
- Vue.js for the excellent frontend framework
- Vue I18n for the internationalization solution
- Vite for the blazing fast development experience
- Tailwind CSS for the utility-first styling approach
- Zod for the schema validation system
- All our contributors and community members
Last updated: March 10, 2025
Un système intelligent de gestion des traductions a été implémenté pour assurer la fiabilité et la sécurité des fichiers de traduction.
- Détection précise : Utilise 12 patterns différents pour détecter les clés de traduction utilisées
- Protection intelligente : Système de protection pour éviter la suppression de clés essentielles
- Sauvegarde automatique : Crée des backups horodatés avant chaque modification
- Interface interactive : Demande confirmation avant les actions potentiellement destructives
- Rapport détaillé : Génère un rapport complet sur l'état des traductions
# Analyser les traductions et appliquer les modifications nécessaires
pnpm i18n:guardian
# Créer une sauvegarde manuelle des fichiers de traduction
pnpm i18n:backup- Sécurité renforcée : Système de création automatique de sauvegardes avant modification
- Protection des clés essentielles : Utilisation de patterns pour protéger des catégories entières de clés
- Détection de contexte : Identifie les fichiers et lignes où chaque clé est utilisée
- Confirmation multi-niveaux : Demande une double confirmation pour les actions destructives
- Visualisation claire : Interface console avec code couleur pour une meilleure lisibilité
- Rapport structuré : Génère un rapport JSON détaillé avec toutes les informations d'analyse
Le rapport généré est disponible dans le dossier /reports/i18n/i18n-guardian-report.json (non versionné) et contient :
- Un résumé des clés utilisées, manquantes, inutilisées et protégées
- La liste complète des clés dans chaque catégorie
- Le contexte d'utilisation de chaque clé (fichier, ligne, extrait de code)
Les sauvegardes sont stockées dans /packages/ui/src/i18n/locales/backups/ avec un horodatage ISO.


