Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
173 changes: 125 additions & 48 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,71 +1,148 @@
# OpenApply

OpenApply est une application locale et open source qui aide toute personne à préparer des candidatures ciblées, quel que soit son métier. Elle analyse une offre, signale les compétences à confirmer, adapte un CV et une lettre à partir de faits vérifiés, puis génère des fichiers DOCX et PDF.
OpenApply est une application locale et open source qui prépare des candidatures ciblées à partir de faits vérifiés. Elle analyse une offre, demande confirmation lorsqu’une compétence manque, adapte les copies d’un CV et d’une lettre, puis produit les fichiers DOCX et PDF.

## Principes

- **Tous les métiers** : les catégories couvrent notamment le numérique, la santé, l’enseignement, l’industrie, le bâtiment, le commerce, l’hôtellerie, la logistique, l’administration et les fonctions support.
- **Aucune invention** : le moteur utilise seulement les faits saisis dans le profil actif.
- **Données locales** : profils, modèles, clés, offres et documents restent dans `.openapply/` et `generated/`, deux dossiers exclus de Git.
- **Profils isolés** : une candidature ne peut utiliser que les faits et modèles du profil actif.
- **Interface guidée** : le profil et le moteur IA se configurent dans l’application, sans passage obligatoire par le terminal.
- **Sources ouvertes** : licence MIT, tests automatiques et règles de contribution publiques.

## Fonctionnalités
## Ce que fait OpenApply

- Jusqu’à 10 offres ou candidatures spontanées par lot.
- Import de liens depuis un collage, un tableau ou une feuille Excel.
- Import de liens par collage, depuis un tableau ou une feuille Excel.
- Classification locale par métier, contrat, niveau, langue, mode de travail et outils détectés.
- Veille via Greenhouse, Lever, France Travail et La Bonne Alternance.
- Connexion visuelle à Codex, Google Antigravity, GitHub Copilot CLI, Hermes Agent, Ollama, LM Studio, llama.cpp ou à une API compatible.
- Confirmation des écarts de compétences avant adaptation.
- Génération d’un CV et d’une lettre en DOCX et PDF, avec contrôle LibreOffice sur une page.
- Reprise après interruption, cache local et relance ciblée des seuls postes en échec.
- Connexion à Codex, Google Antigravity, GitHub Copilot CLI, Hermes Agent, Ollama, LM Studio, llama.cpp ou à une API compatible.
- Confirmation rapide et honnête des écarts de compétences.
- Génération d’un CV et d’une lettre en DOCX et PDF.
- Contrôle LibreOffice pour conserver la mise en page et une page par document.
- Reprise après interruption, cache local et relance des seuls postes en échec.

OpenApply ne modifie jamais les modèles importés. Les profils sont isolés et le moteur n’utilise que les faits du profil actif.

## Installation rapide

## Installation
Il faut installer trois composants :

Prérequis : Node.js 20 ou plus récent, Python 3 et LibreOffice.
- Node.js 20 ou plus récent, avec npm ;
- Python 3, avec le module `venv` ;
- LibreOffice.

### Windows
Au premier `npm start` ou double-clic sur le lanceur, OpenApply crée automatiquement un environnement Python privé dans `.venv`, installe les modules documentaires et vérifie l’installation. `npm run setup` reste disponible pour relancer cette préparation manuellement.

### Windows 10 et 11

Ouvre PowerShell puis exécute :

```powershell
winget install OpenJS.NodeJS.LTS
winget install Python.Python.3.12
winget install TheDocumentFoundation.LibreOffice
py -3 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
npm install
npm run doctor
```

Double-clique ensuite sur `start-openapply.cmd`, ou lance `npm start` puis ouvre <http://localhost:4173>.
Ferme et rouvre PowerShell après l’installation de Node.js. Télécharge ou clone ensuite OpenApply :

```powershell
git clone https://github.com/yvanfocsa/OpenApply.git
cd OpenApply
npm start
```

Tu peux aussi double-cliquer directement sur `start-openapply.cmd`. Le premier lancement prépare l’application, puis ouvre le navigateur. Les lancements suivants sont immédiats.

### macOS

Avec [Homebrew](https://brew.sh/) :

```bash
brew install node
brew install node python
brew install --cask libreoffice
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
npm install
npm run doctor
git clone https://github.com/yvanfocsa/OpenApply.git
cd OpenApply
npm start
```

Double-clique ensuite sur `start-openapply.command`, ou lance `npm start`.
Tu peux aussi double-cliquer directement sur `start-openapply.command`. Le premier lancement prépare l’application, puis ouvre le navigateur. Si macOS refuse le premier double-clic, ouvre le fichier avec clic droit, puis « Ouvrir ».

### Linux, Debian et Ubuntu

Installe d’abord Node.js 20 ou plus récent depuis [nodejs.org](https://nodejs.org/) ou avec le gestionnaire de versions de ton choix. Installe ensuite les dépendances système :

```bash
sudo apt update
sudo apt install python3 python3-venv python3-pip libreoffice
git clone https://github.com/yvanfocsa/OpenApply.git
cd OpenApply
npm start
```

Pour les lancements suivants, utilise `npm start` ou `./start-openapply.sh`.

### Installation depuis une archive ZIP

Git n’est pas obligatoire. Télécharge l’archive du projet, décompresse-la, ouvre un terminal dans ce dossier puis exécute :

```bash
npm start
```

Après avoir installé Node.js, Python et LibreOffice, `npm start` suffit : la préparation manquante est détectée et lancée automatiquement.

L’application attend que le serveur soit prêt, puis ouvre <http://localhost:4173>. Si elle fonctionne déjà, la commande ouvre simplement l’instance existante.

## Premier lancement

OpenApply ouvre automatiquement la configuration du profil si les faits ou les modèles manquent. Importe :
OpenApply guide la création du premier profil. Prépare :

1. les faits vérifiés du candidat ;
2. un modèle de CV français et/ou anglais ;
3. un modèle de lettre DOCX ;
4. le moteur IA souhaité.
2. un modèle de CV français et/ou anglais au format DOCX ;
3. un modèle de lettre au format DOCX ;
4. un moteur IA local, un CLI connecté ou une clé API compatible.

Un seul moteur IA est nécessaire. Les moteurs indiqués comme optionnels par le diagnostic n’empêchent pas le lancement.

Chaque utilisateur apporte ses propres modèles. Aucun CV réel n’est fourni dans le dépôt public.

## Confidentialité
## Diagnostic et dépannage

La première commande à lancer en cas de problème est :

```bash
npm run doctor
```

Le diagnostic contrôle Node.js, npm, Python, les modules Python, LibreOffice, les droits d’écriture et les moteurs IA détectés. Il affiche une commande de correction adaptée à Windows, macOS ou Linux.

Une version exploitable par un outil automatisé est disponible avec :

```bash
npm run doctor:json
```

Problèmes courants :

- **Node.js trop ancien** : installe la version LTS actuelle, ferme le terminal, puis rouvre-le.
- **Modules Python manquants** : relance `npm run setup`. L’installation reste isolée dans `.venv`.
- **LibreOffice introuvable** : installe l’application complète, puis relance le terminal.
- **Port 4173 occupé** : choisis un autre port. Sous PowerShell, utilise `$env:PORT=4174; npm start`. Sous macOS ou Linux, utilise `PORT=4174 npm start`.
- **Le navigateur ne doit pas s’ouvrir** : utilise `npm run start:server`, ou définis `OPENAPPLY_NO_BROWSER=1` avant `npm start`.
- **Python installé dans un emplacement particulier** : définis `OPENAPPLY_PYTHON` avec le chemin complet de l’exécutable, puis relance `npm run setup`.

## Configuration locale

Les réglages ordinaires se font dans l’interface. Ces variables restent disponibles pour les installations avancées :

| Variable | Utilité | Valeur par défaut |
| --- | --- | --- |
| `PORT` | Port HTTP local | `4173` |
| `OPENAPPLY_DATA_DIR` | Dossier privé des profils et réglages | `.openapply/` |
| `OPENAPPLY_PYTHON` | Chemin d’un interpréteur Python précis | Détection automatique |
| `OPENAPPLY_NO_BROWSER` | Empêche l’ouverture automatique avec la valeur `1` | Désactivé |
| `OPENAPPLY_SKIP_SETUP` | Ignore la préparation automatique avec la valeur `1` | Désactivé |

OpenApply écoute uniquement sur `127.0.0.1`. Il n’expose pas l’interface au réseau local.

Les données locales sont ignorées par Git. Les secrets saisis dans l’interface sont chiffrés au repos dans le coffre local ; la clé de coffre demeure sur le même appareil, ce qui protège contre une lecture accidentelle mais pas contre un compte système déjà compromis. OpenApply écoute uniquement sur `127.0.0.1` et applique des protections de navigateur strictes.
## Moteurs IA et confidentialité

OpenApply n’envoie une offre et les faits du profil actif qu’au moteur choisi. Un moteur local comme Ollama, LM Studio ou llama.cpp peut être utilisé lorsque les données ne doivent pas quitter l’appareil.

Les données privées sont enregistrées dans `.openapply/` et `generated/`, deux dossiers exclus de Git. Les secrets saisis dans l’interface sont chiffrés au repos dans le coffre local. La clé du coffre reste sur le même appareil, ce qui protège contre une lecture accidentelle mais pas contre un compte système déjà compromis.

Avant un commit ou une publication :

Expand All @@ -74,20 +151,16 @@ npm run privacy:check
npm run check
```

Le premier contrôle bloque les dossiers locaux, les formats de documents personnels et plusieurs formes courantes de secrets. Consulte aussi [PRIVACY.md](PRIVACY.md) et [SECURITY.md](SECURITY.md).

## Moteurs IA et réseau

OpenApply n’envoie une offre et les faits du profil actif qu’au moteur choisi. Un moteur local compatible peut être utilisé pour éviter un service distant. Les appels aux sources d’offres ne sont effectués que lorsque la veille correspondante est configurée et activée.
Consulte aussi [PRIVACY.md](PRIVACY.md) et [SECURITY.md](SECURITY.md).

## Sources d’offres

- Greenhouse et Lever : pages carrières publiques, sans clé.
- France Travail : identifiant client et secret d’une application développeur autorisée pour `Offres d’emploi v2`.
- France Travail : identifiant client et secret d’une application autorisée pour `Offres d’emploi v2`.
- La Bonne Alternance : jeton pour `Recherche d’opportunités d’emploi en alternance`.
- LinkedIn et Welcome to the Jungle : import manuel lorsque l’accès public automatisé n’est pas disponible.
- LinkedIn et Welcome to the Jungle : import manuel lorsqu’un accès public automatisé n’est pas disponible.

Les identifiants peuvent être saisis dans l’interface ou fournis par variables d’environnement :
Les identifiants peuvent être saisis dans l’interface. Les variables d’environnement restent disponibles pour une installation administrée :

```bash
FRANCE_TRAVAIL_CLIENT_ID="..." \
Expand All @@ -96,14 +169,18 @@ LA_BONNE_ALTERNANCE_TOKEN="..." \
npm start
```

## Stockage personnalisé
## Mise à jour

Par défaut, les données privées sont stockées dans `.openapply/`. Pour utiliser un autre emplacement local :
Depuis un clone Git :

```bash
OPENAPPLY_DATA_DIR="/chemin/prive/openapply" npm start
git pull --ff-only
npm run setup
npm run check
```

Les profils et documents locaux ne sont pas remplacés par cette procédure. Une sauvegarde du dossier défini par `OPENAPPLY_DATA_DIR` reste recommandée avant une mise à jour importante.

## Contribution

Les corrections, traductions et nouveaux métiers sont bienvenus. Lis [CONTRIBUTING.md](CONTRIBUTING.md). En participant, tu acceptes la licence [MIT](LICENSE).
Les corrections, traductions et nouveaux métiers sont bienvenus. Lis [CONTRIBUTING.md](CONTRIBUTING.md). En participant, tu acceptes la licence [MIT](LICENSE).
65 changes: 55 additions & 10 deletions UTILISATION_SYSTEME_CV.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,72 @@
# Utiliser OpenApply

## 1. Créer le profil
## Avant de commencer

Ouvre les réglages du profil, indique un nom, les domaines recherchés et les faits vérifiés : expériences, études, compétences, langues et contraintes utiles. N’ajoute pas de secret ni de donnée sans rapport avec une candidature.
Le premier double-clic sur le lanceur Windows ou macOS prépare automatiquement les modules documentaires. Une installation fonctionnelle doit ensuite afficher uniquement des contrôles obligatoires en vert avec :

Importe ensuite les modèles DOCX du profil. OpenApply travaille sur des copies et ne modifie jamais ces sources.
```bash
npm run doctor
```

Les moteurs IA absents sont marqués comme optionnels. Un seul moteur prêt suffit.

## 1. Créer un profil

Au premier lancement, ouvre les réglages du profil et renseigne :

- le nom du profil ;
- les domaines et contrats recherchés ;
- les expériences, études, compétences et langues vérifiées ;
- les contraintes utiles aux candidatures.

Importe ensuite les modèles DOCX de ce profil. OpenApply travaille toujours sur des copies et ne modifie jamais les fichiers sources.

Chaque personne doit disposer de son propre profil. Les faits et modèles d’un autre profil ne sont jamais réutilisés.

## 2. Connecter un moteur

Choisis un moteur dans les réglages. L’assistant visuel indique si une installation, une connexion de compte ou une clé API est nécessaire. Un moteur local est préférable lorsque les données ne doivent pas quitter l’appareil.
Choisis un moteur dans les réglages. L’assistant indique si une installation, une connexion de compte ou une clé API est nécessaire. Un moteur local est préférable lorsque les données ne doivent pas quitter l’appareil.

Il n’est pas nécessaire de configurer tous les moteurs. Après une première connexion, utilise le bouton de vérification affiché dans l’interface.

## 3. Ajouter les candidatures

Tu peux coller :

## 3. Ajouter les cibles
- un lien d’offre ;
- plusieurs liens, avec un lien par ligne ;
- une colonne copiée depuis un tableur ;
- le texte complet d’une offre ;
- une cible de candidature spontanée.

Colle jusqu’à 10 liens, une colonne de tableur, le texte d’une offre ou une candidature spontanée. Le contrat et la langue peuvent rester en mode automatique ou être imposés manuellement.
Le contrat, la langue et le domaine peuvent rester en mode automatique ou être imposés. Un choix manuel l’emporte toujours sur la détection.

## 4. Confirmer les écarts

OpenApply compare les exigences de l’offre aux faits du profil. Confirme le niveau réel pour chaque compétence importante. Une réponse ne doit jamais exagérer l’expérience.
OpenApply compare les exigences de l’offre aux faits du profil. Pour chaque compétence importante, indique rapidement le niveau réel : professionnel, encadré, projet, notions ou jamais pratiqué.

Les champs de commentaire sont facultatifs. Utilise-les seulement lorsqu’un contexte court peut améliorer la formulation sans exagérer l’expérience.

## 5. Générer et contrôler

Le moteur adapte les copies du CV et de la lettre. LibreOffice vérifie ensuite le rendu PDF et la limite d’une page. Les résultats se trouvent sous `generated/<profil>/` et peuvent être téléchargés depuis l’interface.
Le moteur adapte une copie du CV et de la lettre. LibreOffice génère ensuite les PDF et vérifie que chaque document tient sur une page.

Les résultats se trouvent sous `generated/<profil>/` et peuvent être téléchargés depuis l’interface en DOCX ou PDF.

En cas d’interruption ou de quota épuisé, reprends la candidature depuis l’étape enregistrée avec un autre moteur. Les offres déjà analysées et les documents déjà validés ne doivent pas être recalculés.

## 6. Suivre les candidatures

Classe les candidatures par catégorie et mets à jour leur statut : à préparer, envoyée, à relancer, entretien, acceptée, refusée ou archivée. La sélection multiple permet d’appliquer un statut ou une catégorie à plusieurs candidatures en une seule action.

## 7. Protéger les données

Ne place jamais `.openapply/`, `generated/`, un CV, une lettre, une clé ou un export de candidature dans Git.

Avant une publication :

## 6. Protéger les données
```bash
npm run privacy:check
```

Ne place jamais `.openapply/`, `generated/`, un CV, une lettre, une clé ou un export de candidature dans Git. Exécute `npm run privacy:check` avant toute publication.
Pour changer l’emplacement des données privées, définis `OPENAPPLY_DATA_DIR` avant le lancement. Consulte le [guide d’installation](README.md#installation-rapide) pour les commandes Windows, macOS et Linux.
Loading
Loading