Confluence version here → Confluence Docs
Documentation en français ici → README-FR.md
Install the CLI globally:
npm install -g lvmh-careers-cliThen run the following command:
lvmh-careers searchLVMH Careers CLI is a command-line tool that allows you to explore career opportunities within the LVMH group directly from your terminal. The application provides an interactive and intuitive interface to search, view, and save your favorite job offers.
- Search by keywords in LVMH job offers
- Paginated navigation of results
- Detailed display of offers (title, company, location, contract, publication date)
- Direct opening of offers in the browser
- Export of results in JSON format
- Copy offer URLs to clipboard
- Save favorite offers locally
- View saved offers offline
- Navigate through your favorite offers
- Support for JSON and XML storage formats
- Save your custom searches
- Quick execution of recurring searches
- Manage your favorite queries
- Interface available in French (fr-fr) and English (en-us)
- Search in offers according to the configured locale
- Interactive configuration assistant
- Customize the number of results per page
- Choose storage format (JSON/XML)
- Reconfigure at any time
Initialize or reconfigure CLI settings.
Configurable options:
- Interface language (fr-fr / en-us)
- Number of results per page
- Favorites storage format (JSON / XML)
lvmh-careers initSearch for job offers on the LVMH Careers platform.
Options:
-q, --query <query>: Search term-n, --number <number>: Number of results per page-p, --page <page>: Page number-r, --raw: Display results in raw JSON
Examples:
# Interactive search
lvmh-careers search
# Search with specific term
lvmh-careers search -q "developer"
# Export JSON results
lvmh-careers search -q "marketing" -n 20 -rAvailable actions during navigation:
- View offer details
- Open offer in browser
- Add to favorites
- Copy URL
- Save search
- Navigation (next/previous page)
Display and navigate through your saved favorite offers.
lvmh-careers offersFeatures:
- Offline viewing of saved offers
- Paginated navigation
- Access to complete details
- Remove from favorites
Display and execute your saved search queries.
lvmh-careers queriesFeatures:
- List of all your saved searches
- Immediate execution of a favorite search
- Interactive navigation of results
Clear all local data (favorites and saved queries).
lvmh-careers clear- Node.js: Version 22.0.0 or higher
- npm: Installed with Node.js
npm install -g lvmh-careers-cli# Clone the repository
git clone https://github.com/moha-tah/lvmh-careers-cli
cd lvmh-careers-cli
# Install dependencies
npm install
# Build the project
npm run build
# Link globally
npm linklvmh-careers-cli/
├── src/
│ ├── api/ # API layer
│ │ ├── dtos/ # Data Transfer Objects
│ │ │ ├── inputs/ # Input DTOs
│ │ │ └── outputs/ # Output DTOs
│ │ └── LVMH.ts # LVMH API client
│ ├── commands/ # CLI commands
│ │ ├── init.ts # Initialization/configuration
│ │ ├── search.ts # Job search
│ │ ├── fav-offers.ts # Favorite offers management
│ │ ├── fav-queries.ts # Favorite queries management
│ │ ├── clear.ts # Data cleanup
│ │ └── index.ts # Commands export
│ ├── components/ # Reusable components
│ │ ├── offers/ # Offer-related components
│ │ │ ├── display-offers.ts # Offer display
│ │ │ ├── offer-navigation.ts # Paginated navigation
│ │ │ └── offer-selection.ts # Offer selection
│ │ ├── base-command.ts # Base class for commands
│ │ ├── logo.ts # Logo display
│ │ └── setup.ts # Configuration assistant
│ ├── config/ # Configuration
│ │ ├── index.ts # Configuration instance
│ │ ├── schema.ts # Configuration schema
│ │ └── is-config-valid.function.ts
│ ├── utils/ # Utilities
│ │ ├── constants.ts # Global constants
│ │ ├── types.ts # TypeScript types
│ │ ├── get-config-dir.ts # Config directory management
│ │ ├── get-favorites-from-file.ts
│ │ ├── set-favorites-to-file.ts
│ │ ├── offers-from-file.ts
│ │ └── queries-from-file.ts
│ └── index.ts # Main entry point
├── dist/ # Compiled files (generated)
├── .github/
│ └── workflows/
│ └── npm_publish.yml # CI/CD pipeline
├── package.json
├── tsconfig.json
└── eslint.config.js
| Package | Version | Usage |
|---|---|---|
| commander | ^14.0.1 | CLI framework (command and option management) |
| enquirer | ^2.4.1 | Interactive prompts (menus, inputs) |
| chalk | ^5.6.2 | Terminal coloring |
| conf | ^15.0.0 | Persistent configuration management |
| open | ^10.2.0 | Opening URLs in browser |
| clipboardy | ^5.0.0 | Clipboard management |
| fast-xml-parser | ^5.2.5 | XML parsing and generation |
| typescript | ^5.9.2 | Development language |
| Package | Version | Usage |
|---|---|---|
| tsx | ^4.20.6 | TypeScript execution in development |
| eslint | ^9.36.0 | Code linting |
| @typescript-eslint/ | ^8.45.0 | ESLint configuration for TypeScript |
| prettier | ^3.6.2 | Code formatting |
| @types/node | ^24.6.0 | TypeScript types for Node.js |
# Development
npm run dev # Launch CLI in development mode (tsx)
# Build
npm run build # Compile TypeScript to dist/
# Execution
npm start # Launch compiled CLI
# Code quality
npm run typecheck # TypeScript type checking
npm run lint # Linting with ESLint
npm run lint:fix # Automatic lint error correction
npm run format # Formatting with Prettier
# Tests
npm test # Not yet implementedtype ConfigSchema = {
locale: 'fr-fr' | 'en-us'; // Interface language
hitsPerPage: number; // Results per page (default: 5)
storageType: 'json' | 'xml'; // Storage format
favoriteOffers: OfferHitDTO[]; // (Managed by conf)
};Configuration is stored via the conf package in:
- macOS/Linux:
~/.config/lvmh-careers-cli/ - Windows:
%APPDATA%\lvmh-careers-cli\
Generated files:
config.json: Main configurationfavorite-offers.[json|xml]: Favorite offersfavorite-queries.[json|xml]: Saved queries
const LVMH_API_URL = 'https://www.lvmh.com/api/search';
const LVMH_API_BASE_INDEX_NAME = 'PRD-{{locale}}-timestamp-desc';
const LVMH_OFFER_BASE_URL = 'https://www.lvmh.com/join-us/our-job-offers/';The project uses GitHub Actions to automate npm publishing.
Pipeline (npm_publish.yml):
Trigger: release created
Jobs:
1. lint # Code verification
2. typecheck # Type checking
3. test # Test execution
4. publish-npm # npm publishing (after validation)Required configuration:
- Node.js 22.x
Publishing steps:
- Create a new release on GitHub
- Workflow runs automatically
- Validation (lint + typecheck + test)
- Publish to npm if all checks pass
ISC
Contributions are welcome! Feel free to open an issue or a pull request.