« Qu'est-ce qui mijote dans ton frigo ? »
Web app (PWA) 100 % gratuite qui répond à deux problèmes :
-
Tu oublies les dates de péremption → l'appli liste tes aliments, triés par urgence, avec un code couleur (vert / orange / rouge) et une alerte « à consommer très vite ».
-
Tu ne sais pas quoi cuisiner avec ce que tu as → un bouton te propose des recettes basées sur ton frigo, en priorisant les aliments qui périment bientôt (badge 🔥).
-
Tu en as marre de tout taper → bouton 📷 Scanner : scanne le code-barres (nom auto-rempli via Open Food Facts), ou photographie un fruit/légume (reconnu par une IA qui tourne sur ton téléphone), et photographie la date imprimée (lue par OCR).
Aucun compte, aucune donnée envoyée ailleurs : tout reste sur ton téléphone (stockage local du navigateur). Les recettes viennent de l'API gratuite TheMealDB, les produits emballés de Open Food Facts.
La PWA doit être servie en HTTPS pour s'installer. Le plus simple : l'héberger gratuitement (voir plus bas), puis sur l'iPhone :
- Ouvre l'URL dans Safari.
- Bouton Partager (carré avec flèche) → « Sur l'écran d'accueil ».
- L'icône « Mijo » apparaît comme une app, plein écran, utilisable hors-ligne (la liste du frigo marche sans réseau ; les recettes ont besoin d'internet).
Ça marche aussi sur Android (Chrome → menu → « Ajouter à l'écran d'accueil ») et sur ordinateur.
L'appli est faite de fichiers statiques : pas de build, pas de serveur.
- Crée un dépôt GitHub et pousse le contenu de ce dossier.
Settings → Pages → Source: main / root.- Ton URL :
https://<ton-pseudo>.github.io/<depot>/.
- Va sur https://app.netlify.com/drop.
- Glisse-dépose le dossier
Recipeentier. URL HTTPS générée aussitôt.
npm i -g vercel puis vercel dans le dossier.
Un service worker exige http/https (pas file://). Lance un petit serveur :
cd Recipe
python3 -m http.server 8000
# puis ouvre http://localhost:8000Recipe/
├── index.html écran principal (onglets Frigo / Recettes)
├── css/styles.css styles (mobile-first, code couleur d'urgence)
├── js/ingredients-fr.js dictionnaire FR→EN des ingrédients (+ emojis)
├── js/app.js logique : stock, dates, suggestions, détail recette
├── js/scan.js scan code-barres + reconnaissance IA + OCR de la date
├── manifest.webmanifest métadonnées PWA (installation)
├── sw.js service worker (hors-ligne + cache)
└── icons/ icônes générées (192/512/180 + maskable)
- Stockage :
localStorage(clésfrigo.items.v1/frigo.settings.v1). - Recettes :
filter.php?i=<ingrédient>pour chaque aliment, puis agrégation — une recette est d'autant mieux classée qu'elle utilise plus de tes ingrédients, avec un gros bonus si elle utilise un aliment qui périme dans ≤ 2 jours (🔥).lookup.phpfournit le détail (ingrédients cochés selon ton stock + préparation). - Langue : les recettes TheMealDB sont en anglais. Les ingrédients connus sont réaffichés en français, et un bouton « Traduire en français » ouvre la préparation dans Google Traduction.
- Rappels : la cloche (en haut à droite) active des notifications locales quand des aliments périment aujourd'hui/demain (selon le support du navigateur).
Trois technologies gratuites, chargées à la demande depuis un CDN (donc internet requis à la première utilisation, puis mises en cache) :
| Quoi | Comment | Limite |
|---|---|---|
| Nom d'un produit emballé | Code-barres → Open Food Facts | Produit doit exister dans la base |
| Nom d'un fruit/légume | IA on-device MobileNet (TensorFlow.js) | Approximatif, libellés limités |
| Date de péremption | OCR Tesseract.js | Dépend de la lisibilité |
localhost, pas en ouvrant le fichier directement. Le résultat
pré-remplit le formulaire d'ajout — tu peux toujours corriger avant d'enregistrer.
- Ajouter des ingrédients reconnus : édite
js/ingredients-fr.js(listeFR_INGREDIENTS, format{ fr, en, emoji, cat }). Leendoit correspondre à un ingrédient TheMealDB pour que la recherche de recettes fonctionne.
- La base de recettes (TheMealDB) est anglophone et internationale.
- Pas de synchro entre appareils (par choix : 100 % local, vie privée).
- Les notifications quand l'app est fermée nécessiteraient un serveur push (non inclus pour rester 100 % gratuit/sans compte).