VinEye
Une application qui reconnaît les maladies de la vigne à partir d'une simple photo de feuille — en moins d'une seconde, même sans connexion internet.

Photographier une feuille, connaître son état.
Les maladies de la vigne — comme la pourriture noire ou l'esca — peuvent ruiner une récolte. Les repérer tôt sauve les plants, mais il faut un œil expert, rarement disponible directement dans les parcelles.
VinEye transforme un simple téléphone en assistant. On prend une feuille en photo, l'application l'analyse et indique aussitôt si elle est saine ou malade — et de quelle maladie il s'agit, parmi 4 reconnues.
L'analyse se fait directement sur le téléphone, sans envoyer la photo sur internet : ça fonctionne en pleine vigne sans réseau, et c'est quasi instantané (~40 millisecondes).
Comment ça marche
Photographier
On cadre une feuille de vigne et on prend une photo, depuis l'app ou la version web.
L'IA analyse
Un modèle de vision entraîné sur ~9 000 images traite l'image en ~40 ms.
Diagnostic
L'app affiche l'état de la feuille et la maladie identifiée, avec un guide associé.
L'app en images.
Accueil
Le point d'entrée de l'application.
Mes plantes
Le suivi des plantes et de leurs analyses.
Guides des maladies
Les fiches détaillées des maladies reconnues.
Carte
La localisation des analyses sur une carte.
Un monorepo, plusieurs cibles.
App mobile React Native, PWA dérivée du même code, backend Next.js (API + panel admin) et pipeline ML Python — du dataset à l'inférence en production.
La stack, couche par couche.
Mobile
React Native, Expo SDK 54, TypeScript, NativeWind, React Navigation v7, Reanimated v4, i18next (FR/EN)
IA on-device
react-native-fast-tflite (MobileNetV2, 4 classes), preprocessing JS
PWA
Export web Expo (react-native-web), manifest + service worker, getUserMedia
Backend / API
Next.js 16 (App Router), Prisma 7, PostgreSQL (Supabase), better-auth, Zod
IA serveur
ONNX Runtime (onnxruntime-node), sharp, rate-limiting Upstash Redis
ML / Data
Python 3.12, TensorFlow/Keras, tf2onnx, dataset Kaggle (~9 000 images)
Infra / Deploy
Vercel (API + PWA), VPS Ubuntu (PM2 + Nginx + Certbot), EAS Build (Android), GitHub Actions (CI/CD)
Les choix techniques qui comptent.
- Double stratégie d'inférence
Modèle embarqué TFLite (mobile, offline) et inférence serveur ONNX (web/PWA), à partir du même modèle — conversion .tflite → ONNX validée par test de parité (écart < 2e-4).
- Un seul codebase → 2 plateformes
La PWA réutilise l'app Expo via les variants *.web.ts, sans toucher au natif — zéro régression côté mobile.
- Auth mobile passwordless
Mot de passe déterministe SHA-256(email + deviceId + pepper), jamais transmis ; gestion de bannissement en temps réel.
- Sécurité API
Validation Zod, rate-limiting par IP, garde anti-DoS (taille de payload + nombre de pixels), CORS maîtrisé.
- Offline-first
Cache local AsyncStorage + synchronisation best-effort vers le backend dès que le réseau revient.
- DevOps
Déploiement Vercel + Supabase, builds natifs EAS, CI/CD GitHub Actions, fix CMake Windows pour les modules natifs.
Envie de voir VinEye en action ?
Teste la démo web, installe l'app Android, ou explore le code source du monorepo.