Skip to content

About

๐Ÿท Gestionnaire de cave ร  vin & spiritueux โ€” Sommelier IA, scan d'รฉtiquettes, cartes interactives. React + Node.js + MariaDB + Cloudflare.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

66 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿท Cave & Vigne

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.

License: MIT Node.js React Vite Bootstrap MariaDB


๐ŸŒ Aperรงu

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รฉs

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

๐Ÿ— Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   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

๐Ÿš€ Dรฉmarrage rapide (dรฉveloppement local)

Prรฉrequis

  • 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)

1. Backend

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)

2. Frontend

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

3. Variables d'environnement requises

# 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=

๐Ÿ“ Structure du projet

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

๐ŸŒ Dรฉploiement production

Script automatisรฉ โ€” Debian 13

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.sh

Le 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_SECRET et demande de maniรจre interactive le domaine, l'email SSL, les mots de passe et la clรฉ API Anthropic.

Dรฉploiement manuel

Voir le guide complet : docs/DEPLOY.md


๐Ÿ“ฑ Application Android

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


๐Ÿ”’ Sรฉcuritรฉ

  • 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

๐Ÿค Contribution

Les contributions sont les bienvenues ! Pour contribuer :

  1. Forkez le dรฉpรดt
  2. Crรฉez une branche feature : git checkout -b feature/ma-fonctionnalite
  3. Commitez vos changements : git commit -m 'feat: ajouter ma fonctionnalitรฉ'
  4. Poussez la branche : git push origin feature/ma-fonctionnalite
  5. Ouvrez une Pull Request

Idรฉes d'amรฉliorations

  • Recherche full-text avancรฉe (facets, ElasticSearch)
  • Application iOS โ€” distribution App Store (compte Developer requis)
  • Notifications push (PWA + mobile) pour les rappels keep_until

๐Ÿ“„ Licence

Ce projet est sous licence MIT โ€” voir LICENSE pour les dรฉtails.


๐Ÿ™ Crรฉdits

  • 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

About

๐Ÿท Gestionnaire de cave ร  vin & spiritueux โ€” Sommelier IA, scan d'รฉtiquettes, cartes interactives. React + Node.js + MariaDB + Cloudflare.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages