Transformez une offre en candidature complète — CV ciblé, analyse ATS, lettre, exports et suivi — sans disperser votre travail entre six outils.
Découvrir Mindris · Fonctionnalités · Installer · CLI · Contribuer · Roadmap
Une recherche d’emploi finit souvent par devenir une chaîne de tâches répétitives : trouver une offre, copier son contenu, adapter un CV, demander un score à un outil, générer une lettre, convertir le document, puis recopier les informations dans un tracker.
Mindris rassemble ce parcours dans un seul espace de travail :
Offre d'emploi
↓
Extraction et compréhension du besoin
↓
CV ciblé ← Analyse ATS transparente → Suggestions IA
↓
Lettre de motivation et exports ouverts
↓
Tracker, historique et traçabilité des artefacts
Le projet ne cherche pas à devenir un Canva-like. Le CV Builder propose une personnalisation avancée mais cadrée : des choix visuels utiles, des templates professionnels et un rendu cohérent entre la preview et le PDF.
| Principe | Ce que cela signifie concrètement |
|---|---|
| Local-first | CV, offres, rapports et historiques restent dans votre stockage local. |
| Backend-owned | Secrets, état durable, règles métier et orchestration ne sont pas cachés dans le navigateur. |
| IA au choix | Providers locaux ou BYOK : Ollama, OpenAI, Mistral, Gemini, Groq et autres catalogues compatibles. |
| ATS explicable | Le score expose ses critères et ses recommandations au lieu d'afficher un nombre opaque. |
| Exports ouverts | PDF, DOCX, Markdown, HTML, LaTeX et Typst permettent de garder la maîtrise des documents. |
| Self-hosted | Une distribution Docker prête à installer complète le mode développement local. |
| Traçable | Jobs, CV, rapports ATS, lettres, versions et événements restent reliés dans l'historique. |
Local-first ne veut pas dire “aucun réseau possible”. Mindris fonctionne avec des moteurs locaux, mais peut aussi appeler un provider externe lorsque l'utilisateur le configure explicitement. Le choix et les clés restent sous son contrôle.
- modes Simple, Normal et Avancé pour révéler progressivement les contrôles ;
- ruban d’actions réductible pour garder la preview centrale ;
- structure, sections et placement en une ou deux colonnes ;
- personnalisation des couleurs, typographies, espacements et détails ;
- dix templates intégrés, du CV ATS minimal au profil académique ou exécutif ;
- import PDF, locales multiples et exports cohérents avec la preview ;
- adaptation du contenu à une offre sans édition libre pixel par pixel.
- scraping d’offres avec stratégie de fallback ;
- parsing local-first des CV, avec LlamaCloud optionnel ;
- découverte dynamique des modèles disponibles chez les providers ;
- analyse du matching, mots-clés manquants et suggestions contextualisées ;
- agents de réécriture structurés et évalués sur des cas reproductibles ;
- configuration globale ou par tâche des providers et modèles.
- score ATS persistant et relié à l’opportunité ;
- génération et versioning des lettres de motivation ;
- espace Markdown avec preview et export PDF/DOCX ;
- tracker de candidatures ;
- historique unifié des artefacts et runs IA ;
- Workflow, actuellement Beta, pour visualiser la candidature de bout en bout et les éléments encore manquants.
- dashboard de synthèse ;
- guide visuel avec parcours et checklists ;
- thèmes clair et sombre basés sur des tokens partagés ;
- interface française en priorité, avec infrastructure i18n progressive ;
- RuntimeGate qui attend réellement l’API et le renderer avant d’ouvrir le workspace.
| Surface | Statut | Rôle principal |
|---|---|---|
| Dashboard | Stable | Synthèse, raccourcis et diagnostic du runtime |
| CV Builder | Cœur produit | Création, personnalisation, adaptation et export du CV |
| ATS Score | Stable | Analyse explicable et rapport persistant |
| Markdown PDF | Stable | Lettres, documents libres et exports |
| Tracker | Stable | Suivi des candidatures |
| History | Stable | Ledger job ↔ CV ↔ ATS ↔ lettre ↔ tracker |
| Workflow | Beta | Vue orchestrée d’une opportunité et de ses artefacts |
| Guide | Actif | Parcours guidés, bonnes pratiques et checklists |
Le chemin recommandé pour utiliser Mindris sans préparer le workspace de
développement. Il nécessite Docker Engine/Desktop et Docker Compose v2, mais ni
Python, ni uv, ni Bun.
Linux, macOS ou WSL :
curl -fsSL https://raw.githubusercontent.com/RashOps/Mindris-AI/main/scripts/install_self_hosted.sh | shWindows PowerShell :
irm https://raw.githubusercontent.com/RashOps/Mindris-AI/main/scripts/install_self_hosted.ps1 | iexLe script crée un espace privé dans ~/.mindris-ai, génère une clé opérateur,
télécharge les images GHCR et lance les trois services.
| Service | URL par défaut |
|---|---|
| Application | http://localhost:3000 |
| API Gateway | http://localhost:8000 |
| Renderer | http://localhost:4000 |
Si le port 3000 est occupé :
curl -fsSL https://raw.githubusercontent.com/RashOps/Mindris-AI/main/scripts/install_self_hosted.sh \
| MINDRIS_WEB_PORT=3100 sh$env:MINDRIS_WEB_PORT = "3100"
irm https://raw.githubusercontent.com/RashOps/Mindris-AI/main/scripts/install_self_hosted.ps1 | iexConsultez le guide d’installation pour la configuration des providers, la mise à jour, le smoke test et le nettoyage.
Prérequis de contribution :
| Outil | Usage |
|---|---|
| Python 3.12+ | CLI, API, intelligence, scraper et tests |
uv |
Gestionnaire obligatoire du workspace Python |
| Bun | Frontend Next.js et renderer |
| Git | Sources et contrôles de release |
| Docker | Facultatif, pour le packaging self-hosted |
git clone https://github.com/RashOps/Mindris-AI.git
cd Mindris-AI
./mindris doctor
./mindris setup
./mindris devSous Windows :
git clone https://github.com/RashOps/Mindris-AI.git
Set-Location Mindris-AI
.\mindris.ps1 doctor
.\mindris.ps1 setup
.\mindris.ps1 devuv est volontairement obligatoire pour les commandes qui touchent au
workspace Python. Les environnements pip, Poetry et Conda ne sont pas
supportés pour valider une contribution : le lockfile et la CI doivent rester
la source de vérité.
La CLI est écrite uniquement avec la bibliothèque standard Python. Elle peut donc diagnostiquer un poste avant l’installation du workspace et fournit les mêmes intentions sous Linux, macOS, Windows et WSL.
| Commande | Description |
|---|---|
mindris doctor [--json] |
Vérifie Python, Git, uv, Bun, Docker, ports et services |
mindris setup |
Installe le workspace verrouillé et les navigateurs requis |
mindris reset-deps |
Réinstalle les dépendances sans toucher aux lockfiles |
mindris dev |
Lance et supervise API, renderer et frontend |
mindris status / stop |
Inspecte ou arrête la stack supervisée |
mindris logs [service] |
Filtre les logs par service, date ou request ID |
mindris backup create/inspect/restore |
Archive ou restaure les données locales sans exporter les secrets |
mindris lint / test |
Lance les contrôles par scope |
mindris check |
Enchaîne la validation complète |
mindris smoke / e2e |
Vérifie la stack ou le parcours navigateur |
mindris docker … |
Pilote Docker Compose depuis un clone |
mindris release verify vX.Y.Z |
Vérifie ascendance et égalité des arbres Git |
Lanceurs :
./mindris Linux / macOS / WSL
.\mindris.ps1 Windows PowerShell
mindris.cmd Windows CMD
python3 scripts/mindris.py Appel direct Unix
La CLI ne contient aucune logique métier et ne lit jamais les secrets pour les afficher. Retrouvez toutes les commandes dans le guide des scripts.
Exemple de diagnostic ciblé :
./mindris logs api-gateway --since 30m --request-id <request-id>
./mindris backup create ./backups/mindris.zipAu premier démarrage, le tableau de bord affiche une checklist persistée par le backend : runtime, premier CV, moteur IA, test de configuration, première offre et premier export. Le mode local est recommandé et les étapes optionnelles peuvent être ignorées puis réactivées.
Voir le guide de sauvegarde et restauration pour le format versionné, la restauration transactionnelle et le cas Docker.
flowchart LR
Browser["Frontend Next.js<br/>client-only"]
API["API Gateway<br/>FastAPI"]
Intelligence["Intelligence<br/>ATS · LLM · workflow"]
Scraper["Scraper<br/>Playwright · fallbacks"]
Database[("SQLite + vectordb<br/>stockage local")]
Renderer["Renderer Bun/Elysia<br/>HTML · PDF"]
Providers["Providers locaux<br/>ou BYOK"]
Browser -->|API calls| API
API --> Intelligence
API --> Scraper
API --> Database
API --> Renderer
Intelligence --> Database
Intelligence -. configuration explicite .-> Providers
Renderer --> Browser
apps/web Interface Next.js client-only
services/api-gateway Contrats produit, routes et persistance
services/intelligence ATS, providers IA, agents et workflows
services/scraper Extraction d'offres et stratégies de fallback
services/renderer Preview HTML et export PDF avec Bun/Puppeteer
packages/database Modèles SQLite et persistance vectorielle
packages/utils Configuration, logs et utilitaires runtime
- Le frontend ne devient jamais un backend ou une couche de service cachée.
- Les secrets, l’état durable et les décisions métier appartiennent au backend.
- Le navigateur communique uniquement via les APIs.
- Les exports passent par le renderer partagé.
.logs/est le répertoire canonique des logs locaux.- Une route API ne renvoie ni ne journalise une valeur secrète brute.
Plus de détails dans docs/architecture.md.
Copiez .env.example vers .env — mindris setup le fait automatiquement
lorsque nécessaire — puis configurez uniquement les providers souhaités.
| Variable | Usage |
|---|---|
API_KEY |
Authentification opérateur locale pour scripts et appels externes |
OPENAI_API_KEY |
Modèles OpenAI optionnels |
MISTRAL_API_KEY |
Modèles Mistral optionnels |
GEMINI_API_KEY |
Modèles Gemini optionnels |
GROQ_API_KEY |
Modèles Groq optionnels |
LLAMA_CLOUD_API_KEY |
Parsing LlamaCloud optionnel |
OLLAMA_API_BASE |
Runtime IA local Ollama |
SCRAPER_STRATEGY |
Stratégie de scraping et fallback |
Les secrets sont write-only dans l’interface : l’application peut indiquer
qu’une clé est configurée, mais ne renvoie jamais sa valeur brute. Ne partagez
pas la sortie développée d’un Compose contenant un vrai .env.
Validation locale recommandée :
./mindris check
./mindris check --with-smoke --with-e2eLa seconde commande suppose que la stack locale est déjà démarrée.
La CI couvre séparément Python, frontend, renderer, Docker et la CLI sur Linux et Windows.
Les images Docker suivent une politique build once, promote by digest :
- les pull requests valident sans publier ;
- un tag
vX.Y.Z-rc.Nconstruit et teste les images candidates ; - le tag stable doit appartenir à
mainet partager exactement l’arbre Git du RC validé ; vX.Y.Zetlatestsont promus par digest, sans rebuild.
Voir la politique de release et l’ADR 025.
| Je veux… | Documentation |
|---|---|
| Installer Mindris avec Docker | Installation one-command |
| Développer localement | Développement local |
| Comprendre le self-hosting | Self-hosting Docker |
| Comprendre l’architecture | Architecture |
| Utiliser les scripts et la CLI | Guide des scripts |
| Comprendre le runtime agent | Runtime agent |
| Explorer les exports ouverts | Exports |
| Suivre les prochaines phases | Roadmap |
| Lire les décisions techniques | Architecture Decision Records |
| Contribuer | CONTRIBUTING.md |
- continuer le polish visuel et les tests des dix templates CV ;
- élargir l’évaluation des agents d’adaptation sur des cas réels ;
- maturer Workflow avant sa sortie de Beta ;
- généraliser progressivement l’i18n anglaise ;
- simplifier encore le self-hosting pour les utilisateurs non techniques ;
- préparer l’application desktop Tauri dans une phase dédiée.
La roadmap détaillée et les statuts de phase vivent dans docs/roadmap.md.
Les contributions sont les bienvenues : corrections, tests, documentation, templates, accessibilité, providers ou idées produit.
Avant d’ouvrir une PR :
./mindris doctor
./mindris setup
./mindris checkLisez CONTRIBUTING.md et AGENTS.md pour les invariants du projet et les règles de validation.
Le code source est distribué sous licence MIT.
Le nom Mindris, les logos, wordmarks et éléments d’identité ne sont pas inclus dans cette licence. Les forks publics, services dérivés et distributions commerciales doivent se rebrander sauf autorisation écrite. Consultez la politique de marque.
Construire une candidature devrait demander de la réflexion, pas vingt copier-coller.