Gestionnaire de cave ร vin, spiritueux et biรจres โ Application web full-stack avec sommelier IA, cartes interactives, scan d'รฉtiquettes par vision artificielle, recherche de prix de marchรฉ et imprimante d'รฉtiquettes.
Cave & Vigne est une application web complรจte de gestion de cave personnelle. Elle permet de rรฉfรฉrencer ses bouteilles de vin et spiritueux, d'obtenir des recommandations d'accords mets/vins grรขce ร l'IA Claude (Anthropic), de visualiser ses vignobles sur des cartes interactives, et de scanner les รฉtiquettes ร la camรฉra pour importer automatiquement les informations.
| Fonctionnalitรฉ | Description |
|---|---|
| ๐ Authentification | Inscription/connexion sรฉcurisรฉe, JWT access + refresh token, rรฉinitialisation mot de passe |
| ๐ก๏ธ 2FA TOTP | Double authentification (Google Authenticator, FreeOTP) |
| ๐ท Cave ร vins | CRUD complet, quantitรฉs, position, prix, millรฉsime, infos domaine, sรฉlection multiple |
| ๐บ Biรจres | Collection complรจte : blonde, brune, IPA, NEIPA, stout, sour, lambicโฆ โ ABV, IBU, volume, brasserie, statut โ scanner code-barres V&B / Untappd / RateBeer |
| ๐ฅ Spiritueux | Whisky, rhum, cognac, armagnac, calvados, gin, vodka โ avec statut ouvert/fermรฉ |
| ๐ธ Photos bouteilles | Photo รฉtiquette + photo bouteille, infos domaine (site web, sol, altitude) |
| ๐ค Sommelier IA multi-provider | Accords mets/vins depuis la cave โ Claude, ChatGPT, Mistral ou OpenWebUI/Ollama |
| ๐ท Scan d'รฉtiquettes | Camรฉra ou photo importรฉe โ IA Vision extrait les infos automatiquement |
| ๐ Analyse IA de cave | Score diversitรฉ/รฉquilibre, points forts, occasion parfaite, axes d'amรฉlioration |
| ๐ Enrichissement multi-sources | Vivino โ Open Food Facts โ Vinatis โ LRVF โ fallback gรฉnรฉrique |
| ๐ฝ๏ธ Recettes associรฉes | Suggestions de recettes via TheMealDB |
| ๐ Journal de dรฉgustation | Notes par bouteille (robe, nez, bouche, finale, note /100) |
| ๐ Liste de souhaits | Vins ร acquรฉrir avec prioritรฉ, budget max et lien boutique |
| ๐ค Export / Import CSV | Cave exportable et importable (compatible Excel) |
| ๐ Carte mondiale | Vins (cercles), spiritueux (diamants) et biรจres (triangles) โ filtres par catรฉgorie + dรฉtail des bouteilles en cave |
| ๐ซ๐ท Carte France v2 | 16 rรฉgions viticoles, zoom/pan D3, filtre cรฉpage, overlay domaines en cave, clic rรฉgion โ dรฉtail AOC + cรฉpages + bouteilles |
| ๐บ Carte spiritueux | Origines mondiales de vos spiritueux |
| โญ Accords notรฉs | Notation 5 รฉtoiles des accords mets/vin avec commentaire |
| ๐ Catalogue public | Mode visiteur sans authentification (configurable) |
| โ๏ธ Admin | Gestion multi-provider IA, SMTP, catalogue public depuis l'UI |
| ๐ฑ PWA + App Android | Installable sur mobile/desktop + WebView native (camรฉra, swipe-to-refresh) |
| ๐ App iOS | Application SwiftUI (WKWebView) โ camรฉra, swipe-back, hors-ligne |
| ๐๏ธ Caves partagรฉes | Invitations par email, permissions lecture ou รฉcriture collaborative (ajouter/modifier/supprimer/toggle), gestion des accรจs |
| ๐ Historique valeur | Snapshot quotidien + graphique d'รฉvolution sur 90 jours |
| โณ Tracker de maturitรฉ | Vins classรฉs : ร l'apogรฉe, approche, trop jeune, passรฉ prime |
| ๐ด Alerte derniรจre bouteille | Badge rouge quand il ne reste qu'une bouteille |
| ๐ฆ Scanner code-barres | Camรฉra (BarcodeDetector) ou saisie : EAN-8/13, ITF-14 cartons/caisses, UPC, Code 128 โ prรฉ-remplit formulaire vin ou spiritueux |
| ๐ซ Douchette code-barres | Onglet dรฉdiรฉ douchette HID (scanner physique USB/Bluetooth) โ scan continu, historique 10 derniers, retour auto-focus |
| ๐๏ธ Cache barcode local | Import bulk Open Food Facts (dump JSONL) โ lookup instantanรฉ offline ; fallback Vivino / Oeni / Liv-ex |
| ๐ท๏ธ Imprimante d'รฉtiquettes | 4 formats : 57ร32 mm, 89ร36 mm, 100ร62 mm, grille A4 โ impression directe via CSS @page |
| ๐ง Vue 3D des casiers | Rendu CSS3D, rotation par glisser, bouteilles colorรฉes par type, dรฉtail au clic |
| ๐๏ธ Gestion des casiers v2 | Type de cave (Casier / Conservation / Vieillissement / Polyvalente), รฉdition dimensions (L ร H), mode dรฉplacement de bouteilles |
| ๐ธ Recherche de rachat | Prix de marchรฉ en ligne pour racheter une bouteille : Vivino, Vinatis, iDรฉalwine โ prix min, prix moyen, disponibilitรฉ |
| ๐น Gรฉnรฉrateur de cocktails | Suggestion de cocktails et apรฉritifs selon les spiritueux et biรจres disponibles dans la cave (IA) |
| ๐ Export PDF | Impression de la cave filtrรฉe (tableau stylisรฉ via window.print) |
| ๐ "Que boire ce soir ?" | L'IA choisit dans votre cave selon occasion, convives, envie |
| ๐ Rรฉgion spotlight | Analyse IA d'une rรฉgion viticole depuis la carte France |
| ๐ Catalogue public | Visiteurs non connectรฉs peuvent consulter la cave si activรฉ (VisitorAllowed sans redirection login) |
| ๐ผ๏ธ Vue galerie | Basculement liste/galerie sur la page vins โ grille d'รฉtiquettes cliquables avec badge quantitรฉ et overlay "bu" |
| ๐ Gantt apogรฉe | Calendrier de dรฉgustation (ยฑ8 ans) : barres empilรฉes par type de vin, apogรฉes en cours surlignรฉes |
| ๐ฐ Historique des prix | Enregistrement manuel ou automatique des prix par bouteille (source + date) |
| โ Actions groupรฉes | Sรฉlection multiple โ marquer comme bu ou supprimer en une seule requรชte SQL (IN (...)) |
| ๐ Score qualitรฉ | Score d'enrichissement (0โ100) calculรฉ sur 13 champs clรฉs โ affichรฉ dans le panneau d'enrichissement |
| ๐ API docs (Swagger) | Documentation interactive OpenAPI disponible sur /api/docs |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Cloudflare CDN/WAF โ
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Nginx (reverse proxy) โ
โ SSL Let's Encrypt โข Gzip โข Cache โ
โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโ
โ โ
โโโโโโโโโโโโผโโโโโโโโโโโ โโโโโโโโโโผโโโโโโโโโโโโโโโโโ
โ React 19 + BS5 โ โ Node.js / Express API โ
โ Vite 6 (build) โ โ Port 3001 (127.0.0.1) โ
โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโ
โ โ โ
โโโโโโโผโโโโโโ โโโโโโผโโโโโ โโโโโโโผโโโโโโโ
โ MariaDB โ โ Redis โ โ AI APIs โ
โ 12 โ โ :6379 โ โ (multi) โ
โโโโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโโโโ
Stack technique :
| Couche | Technologie |
|---|---|
| Frontend | React 19, Bootstrap 5, React Query v5, D3.js, Axios |
| Build | Vite 6 + @vitejs/plugin-react |
| Backend | Node.js 24, Express 4, JWT, Multer, Sharp 0.34, Axios, Cheerio |
| Base de donnรฉes | MariaDB 12 (mysql2 driver) |
| Cache | Redis 7 |
| IA | Claude, ChatGPT, Mistral, OpenWebUI/Ollama โ Sommelier + Vision |
| Serveur web | Nginx |
| CDN/Sรฉcuritรฉ | Cloudflare |
| Process manager | PM2 (cluster mode) |
| Mobile Android | Kotlin WebView + Swipe Refresh |
- Node.js 24+
- MariaDB 12 (ou MySQL 8+)
- Redis (optionnel, dรฉgrade gracieusement)
- Clรฉ API IA : Anthropic, OpenAI, Mistral, ou instance OpenWebUI (configurable depuis l'UI admin)
cd backend
cp .env.example .env
# รditer .env avec vos paramรจtres
npm install
npm run migrate # Crรฉe les tables
npm run dev # Dรฉmarre en mode dev (nodemon, port 3001)cd frontend
# Crรฉer .env.local
echo "REACT_APP_API_URL=http://localhost:3001/api" > .env.local
npm install
npm start # Vite dev server โ http://localhost:3000# backend/.env
DB_HOST=localhost
DB_NAME=cave_vigne
DB_USER=cave_user
DB_PASSWORD=votre_mot_de_passe
JWT_SECRET=cle_secrete_64_caracteres_minimum
# Clรฉ IA par dรฉfaut (remplacรฉe par la config admin si renseignรฉe en BDD)
ANTHROPIC_API_KEY=sk-ant-... # Claude
# OPENAI_API_KEY=sk-... # ChatGPT
# MISTRAL_API_KEY=... # Mistral
# SMTP pour emails (reset mot de passe, notifications)
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=...
SMTP_PASS=...
# Optionnel
REDIS_HOST=localhost
REDIS_PASSWORD=cave-vigne/
โโโ backend/
โ โโโ src/
โ โ โโโ config/
โ โ โ โโโ ai.js # Abstraction multi-provider IA (callAI, callAIVision)
โ โ โ โโโ db.js # Pool MariaDB
โ โ โ โโโ redis.js # Cache Redis
โ โ โ โโโ email.js # Transport Nodemailer dynamique
โ โ โ โโโ migrate.js # Migration BDD (tables + ALTER)
โ โ โโโ jobs/
โ โ โ โโโ notifications.js # Cron quotidien keep_until + purge tokens
โ โ โโโ middleware/
โ โ โ โโโ auth.js # Vรฉrification JWT + optionalAuth
โ โ โโโ routes/
โ โ โ โโโ auth.js # Login, register, refresh, 2FA TOTP, reset password
โ โ โ โโโ wines.js # CRUD vins + accords + enrichissement + barcode (cacheโOFFโscrapers)
โ โ โ โโโ spirits.js # CRUD spiritueux + barcode
โ โ โ โโโ beers.js # CRUD biรจres + stats + barcode (cacheโOFFโV&B/Untappd/RateBeer)
โ โ โ โโโ sharing.js # Caves partagรฉes (read/write) + invitations + permissions
โ โ โ โโโ sommelier.js # IA accord + scan + recettes + recommend + region-spotlight
โ โ โ โโโ tasting.js # Journal de dรฉgustation par bouteille
โ โ โ โโโ wishlist.js # Liste de souhaits
โ โ โ โโโ settings.js # Config admin (IA, SMTP, catalogue)
โ โ โโโ services/
โ โ โ โโโ wineScraper.js # EAN fallback : UPC ItemDB โ Vivino โ Oeni โ Liv-ex ; enrichissement : Vivino โ OFF โ Vinatis โ LRVF
โ โ โโโ jobs/
โ โ โ โโโ notifications.js # Cron quotidien keep_until + valeur cave
โ โ โ โโโ importOpenFoodFacts.js # Import bulk dump JSONL โ barcode_cache
โ โ โโโ server.js # Point d'entrรฉe Express
โ โโโ ecosystem.config.js # Config PM2
โ โโโ .env.example
โ โโโ package.json
โ
โโโ frontend/
โ โโโ index.html # Entrรฉe Vite
โ โโโ vite.config.js
โ โโโ public/
โ โ โโโ manifest.json # PWA manifest
โ โ โโโ sw.js # Service Worker (cache-first)
โ โโโ src/
โ โ โโโ components/
โ โ โ โโโ Layout.jsx # Sidebar + Topbar responsive
โ โ โ โโโ BarcodeScannerModal.jsx # Camรฉra BarcodeDetector + saisie + douchette HID, EAN/ITF-14/UPC
โ โ โ โโโ LabelPrinter.jsx # Imprimante รฉtiquettes (4 formats, CSS @page)
โ โ โ โโโ WineMarketModal.jsx # Recherche prix marchรฉ rachat (Vivino, Vinatis, iDรฉalwine)
โ โ โโโ context/
โ โ โ โโโ AuthContext.jsx # Auth state global
โ โ โโโ locales/
โ โ โ โโโ fr.js # Traductions franรงaises
โ โ โ โโโ en.js # Traductions anglaises
โ โ โโโ pages/
โ โ โ โโโ Login.jsx # + lien "Mot de passe oubliรฉ"
โ โ โ โโโ Register.jsx
โ โ โ โโโ ForgotPassword.jsx
โ โ โ โโโ ResetPassword.jsx
โ โ โ โโโ Dashboard.jsx # Donut Chart.js + valeur + maturitรฉ + analyse IA + gรฉnรฉrateur cocktails
โ โ โ โโโ WinesPage.jsx # CRUD + dรฉgustation + barcode + enrichissement + PDF + bulk + รฉtiquettes + rachat
โ โ โ โโโ SpiritsPage.jsx # CRUD + barcode scan
โ โ โ โโโ BeersPage.jsx # Collection biรจres (16 types) + barcode scan
โ โ โ โโโ CellarPage.jsx # Vue 3D des casiers v2 (type cave, dimensions, dรฉplacement)
โ โ โ โโโ SharedCavesPage.jsx # Caves partagรฉes (invite, lecture/รฉcriture collaborative)
โ โ โ โโโ WishlistPage.jsx
โ โ โ โโโ SommelierPage.jsx # Accord + "ce soir ?" + badge provider
โ โ โ โโโ ScanPage.jsx # Vision IA + badge provider
โ โ โ โโโ ProfilePage.jsx # Profil + 2FA
โ โ โ โโโ AdminPage.jsx # Utilisateurs + paramรจtres IA multi-provider
โ โ โ โโโ WorldMapPage.jsx # Vins + spiritueux + biรจres ; filtres catรฉgorie
โ โ โ โโโ FranceMapPage.jsx # 16 rรฉgions, zoom D3, filtre cรฉpage, overlay domaines, spotlight IA
โ โ โ โโโ SpiritsMapPage.jsx
โ โ โโโ services/
โ โ โ โโโ api.js # Axios + auto-refresh JWT
โ โ โโโ App.jsx
โ โ โโโ index.css
โ โ โโโ main.jsx # + PWA service worker registration
โ โโโ package.json
โ
โโโ android/ # App Android native
โ โโโ app/src/main/
โ โโโ java/com/cavevigne/
โ โ โโโ MainActivity.kt
โ โโโ AndroidManifest.xml
โ
โโโ nginx/
โ โโโ cavevigne.fr.conf # Config Nginx production
โ
โโโ docs/
โ โโโ DEPLOY.md # Guide dรฉploiement complet
โ โโโ GITHUB_META.md
โ
โโโ deploy.sh # Script dรฉploiement automatisรฉ Debian 13
โโโ CHANGELOG.md
โโโ .gitignore
โโโ LICENSE
โโโ README.md
Un script de dรฉploiement complet est fourni pour Debian 13 (Trixie) :
# Sur le VPS, aprรจs avoir clonรฉ le dรฉpรดt
sudo bash deploy.shLe script installe et configure automatiquement l'ensemble de la stack :
| รtape | Action |
|---|---|
| 1 | Mise ร jour systรจme + dรฉpendances (libvips, curl, etc.) |
| 2 | Node.js 24 LTS + PM2 (cluster mode) |
| 3 | MariaDB 12 โ crรฉation BDD, utilisateur, tuning InnoDB |
| 4 | Redis โ sรฉcurisรฉ (bind 127.0.0.1, mot de passe) |
| 5 | Nginx โ config copiรฉe depuis nginx/, SSL Let's Encrypt |
| 6 | Backend + Frontend โ copie, .env gรฉnรฉrรฉ, migration BDD, build Vite |
| 7 | PM2 startup systemd |
| 8 | Certbot SSL + renouvellement automatique (cron 3h) |
| 9 | UFW โ SSH + HTTPS ouverts, MariaDB/Redis/3001 bloquรฉs |
Le script gรฉnรจre automatiquement le
JWT_SECRETet demande de maniรจre interactive le domaine, l'email SSL, les mots de passe et la clรฉ API Anthropic.
Voir le guide complet : docs/DEPLOY.md
L'application Android est une WebView Kotlin qui encapsule l'application web avec :
- Accรจs camรฉra natif pour le scan d'รฉtiquettes
- Swipe-to-refresh
- Gestion des permissions (camรฉra, stockage)
- Page d'erreur offline รฉlรฉgante
Build : Ouvrir android/ dans Android Studio โ Generate Signed APK
- Mots de passe hashรฉs avec bcrypt (salt factor 12)
- JWT avec expiration courte (7j) + refresh token (30j)
- 2FA TOTP compatible Google Authenticator, FreeOTP, Authy
- Rate limiting : 200 req/15min global, 20 req/15min sur auth, 5 req/min sur
/api/wines/:id/enrich(par utilisateur) - Cache enrichissement : rรฉsultats Vivino/OFF mis en cache Redis 24h (bypass possible via
?refresh=1) - Helmet.js โ headers de sรฉcuritรฉ HTTP
- CORS restreint aux origines autorisรฉes
- Cloudflare WAF โ protection SQLi, XSS, bots
- Uploads restreints aux images, optimisรฉs via Sharp (WebP)
- Nginx : blocage des fichiers cachรฉs, headers HSTS
Les contributions sont les bienvenues ! Pour contribuer :
- Forkez le dรฉpรดt
- Crรฉez une branche feature :
git checkout -b feature/ma-fonctionnalite - Commitez vos changements :
git commit -m 'feat: ajouter ma fonctionnalitรฉ' - Poussez la branche :
git push origin feature/ma-fonctionnalite - Ouvrez une Pull Request
- Recherche full-text avancรฉe (facets, ElasticSearch)
- Application iOS โ distribution App Store (compte Developer requis)
- Notifications push (PWA + mobile) pour les rappels keep_until
Ce projet est sous licence MIT โ voir LICENSE pour les dรฉtails.
- Claude (Anthropic), ChatGPT (OpenAI), Mistral AI, OpenWebUI โ Sommelier IA, analyse d'รฉtiquettes, enrichissement
- D3.js โ Cartes interactives
- Bootstrap 5 โ Interface utilisateur
- Chart.js โ Graphiques et statistiques
- Open Food Facts โ Enrichissement et cache barcode local
- Vivino / Oeni / Liv-ex โ Scrapers fallback EAN vins + enrichissement + prix de marchรฉ
- Vinatis / iDรฉalwine / LRVF โ Scrapers enrichissement et prix de marchรฉ
- V&B / Untappd / RateBeer โ Scrapers fallback biรจres
- TheMealDB โ Suggestions de recettes associรฉes
Fait avec โค๏ธ et ๐ท en Normandie