# CV-Maker Application web de création de CV en temps réel : saisie **Markdown** dans un panneau latéral, **preview A4** instantanée, sauvegarde locale automatique et export **PDF** — le tout sans backend, 100 % côté navigateur. ## Démarrage rapide ```bash docker run -d -p 3000:3000 --name cv-maker /cv-maker:latest # → http://localhost:3000 ``` Avec Docker Compose : ```yaml services: cv-maker: image: devcodetools/cv-maker:latest container_name: cv-maker restart: unless-stopped ports: - "3000:3000" healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:3000"] interval: 30s timeout: 5s retries: 3 start_period: 10s ``` ## Fonctionnalités - Édition **Markdown** en direct (6 zones + expériences professionnelles) - **Preview A4** instantanée au format d'impression - **Export PDF** et **export/import JSON** (`cv-maker.json`) pour partager un CV - **Sauvegarde automatique** dans le `localStorage` du navigateur — aucune donnée transmise, aucun volume requis - **PWA installable** : utilisable hors-ligne (`sw.js`, manifest, icônes 192/512) - Rendu Markdown sécurisé (`marked` + `DOMPurify`, anti-XSS) ## Détails de l'image | Caractéristique | Valeur | | --- | --- | | Base | `node:20-alpine` | | Port exposé | `3000` | | Variables d'environnement | `HOSTNAME=0.0.0.0`, `PORT=3000`, `NODE_ENV=production` | | Schéma | Multi-stage (`deps` → `builder` → `runner`), sortie Next.js `standalone` | | Volume persistant | Aucun — données dans le navigateur (`localStorage`) | | Commit | `node` comme utilisateur non-root (Next.js standalone) | ## Tags | Tag | Usage | | --- | --- | | `latest` | Dernière version stable — déploiements courants | | `` (ex. `1.0.0`) | Version précise — retours arrière | ## Réduire / personnaliser - **Port** : laisser le conteneur sur `3000`, mapper le port hôte librement (`-p 8080:3000`). - **HTTP** : image se servant elle-même (pas de serveur externe requis), adaptée derrière un reverse-proxy (Caddy/Nginx). ## Sources - Dockerfile, configuration et documentation technique : dépôt du projet - Toute donnée saisie reste dans le navigateur — conforme aux exigences de confidentialité (aucun cookie, aucune télémesure)