Cuisiner malin, dépenser moins, ne plus jeter.
Recettes chiffrées avec de vrais prix, garde-manger anti-gaspi et listes de courses comparées entre enseignes, grâce aux données ouvertes.
Chaque Français jette en moyenne une trentaine de kilos de nourriture par an, pendant que le budget alimentaire pèse de plus en plus lourd. Comégusto relie trois gestes du quotidien :
- Choisir quoi cuisiner en connaissant le coût réel d'une recette et son empreinte carbone.
- Acheter au bon endroit en comparant son panier entre les enseignes proches de chez soi.
- Consommer avant qu'il ne soit trop tard grâce à un garde-manger qui alerte et propose des recettes.
| Accueil | Comparateur de prix | Garde-manger |
|---|---|---|
![]() |
![]() |
![]() |
| Pour qui | Où |
|---|---|
| Utilisateurs | Guide intégré à l'application sur /guide/ : chaque fonctionnalité expliquée avec des captures annotées, en thème clair et sombre. |
| Développeurs | Documentation développeur : installation, architecture, tests, déploiement, configuration, maintenance et évolution. |
Recettes
- 50 recettes de démonstration, économiques et anti-gaspi, de France et du monde entier : mafé, poulet yassa, riz jollof, pad thaï, porc au caramel, chana masala, tajine, houmous, tacos… illustrées par des photos sous licence libre.
- Filtre par cuisine (France, Europe, Maghreb et Moyen-Orient, Afrique, Asie, Inde, Amériques) et vignettes « Cuisines du monde » sur l'accueil.
- Recherche instantanée insensible aux accents (titre, ingrédients, régimes), filtres combinables (type de plat, régime, difficulté, temps) et tri par date, prix, durée ou CO2, avec pagination stable et URL partageables.
- Ajustement des portions, quantités recalculées à la volée.
- Coût par portion calculé à partir de prix réels, détail par ingrédient.
- Empreinte carbone par portion (ADEME Agribalyse) et badge « de saison ».
- Valeurs nutritionnelles par portion (énergie, protéines, lipides, glucides) calculées à partir de la table Ciqual 2025 de l'Anses.
- Favoris.
Comparateur de prix
- Prix médians observés sur 12 mois, hors promotions, ramenés au kilo, au litre ou à la pièce.
- Classement des enseignes pour une recette ou une liste de courses, avec la part de prix réellement relevés.
- Recherche géographique autour du code postal de l'utilisateur, repli national si les relevés locaux manquent.
Garde-manger anti-gaspi
- Ajout par scan de code-barres (caméra du téléphone) ou saisie, fiche complétée par Open Food Facts (Nutri-Score, Green-Score, image) et valeur estimée par Open Prices.
- Classement par urgence (date dépassée, sous 3 jours, plus tard).
- Suivi « consommé » ou « jeté », taux anti-gaspi et valeur jetée sur 30 jours.
- Rappels par email avant péremption.
- Suggestions de recettes qui utilisent en priorité les produits qui périment.
Listes de courses
- Ajout d'une recette pour un nombre de portions donné, fusion des quantités, déduction du stock du garde-manger.
- Articles regroupés par rayon, cochables, version imprimable.
- Rangement des achats dans le garde-manger en un clic.
Cuisiner avec ce que j'ai
- « Riz sauce tomate pour 2 » : la recette du catalogue, ou écrite par l'assistant si le plat n'y est pas encore.
- Ce que vous avez déjà (texte, photo ou garde-manger), ce qui manque, et l'enseigne la moins chère près de chez vous pour les seuls ingrédients manquants.
- Sans plat précis : les recettes qui demandent le moins d'achats, ou une recette sur mesure.
Assistant IA
- Recherche en langage naturel (« un dîner végé pour 4 à moins de 10 € ») traduite en critères, avec étiquettes retirables.
- Menu de la semaine qui sauve d'abord les produits qui périment, dans un budget, puis liste de courses en un clic.
- Recette « vider le frigo » inventée à partir des produits choisis, chiffrée par l'application.
- Lecture d'un ticket de caisse en photo pour remplir le garde-manger.
- Catalogue enrichi par l'assistant : plats demandés et génération par lot depuis l'administration, en relecture ; ingrédients inconnus créés « à vérifier ».
- Fournisseurs (Anthropic, GitHub Models, Mistral, Ollama…), modèles, niveau de réflexion et quotas réglés dans l'administration, plafond de dépenses mensuel, replis sans IA. Le modèle choisit et explique, les chiffres viennent toujours des données ouvertes.
Formules sans but lucratif
- Gratuit, Plus (2,99 € par mois) et Famille (4,99 € par mois), environ 30 % de moins à l'année : seuls les quotas de l'assistant et le mode Approfondi changent.
- Paiement par virement ou Wero, confirmé depuis l'administration ; Stripe intégré, désactivé par défaut.
- Page « Où va votre argent » : frais du mois, coût réel de l'IA et part couverte par les abonnements.
Sécurité du compte
- Double authentification : application d'authentification, clés d'accès (empreinte, visage) et codes de secours ; obligatoire pour l'administration.
- Inscriptions multiples freinées : adresses jetables et alias refusés, limite par connexion, quota gratuit partagé par appareil.
Et aussi
- Calendrier des fruits et légumes de saison.
- Guide utilisateur intégré, avec captures annotées générées automatiquement.
- Administration moderne (thème Unfold) : tableau de bord, navigation par domaine, mode sombre.
- API REST documentée (OpenAPI).
- Mode sombre, responsive, accessible au clavier.
- Suppression du compte et de toutes les données en libre-service.
| Service | Usage | Licence |
|---|---|---|
| Open Prices | Prix observés en magasin, recherche géographique | ODbL |
| Open Food Facts | Fiches produits, Nutri-Score, Green-Score, taxonomie des catégories | ODbL |
| ADEME Impact CO2 | Empreinte carbone des aliments, calendrier de saison | Licence Ouverte 2.0 |
| Anses Ciqual 2025 | Composition nutritionnelle des ingrédients | Licence Ouverte 2.0 |
| IGN Géoplateforme | Géocodage des codes postaux | Licence Ouverte 2.0 |
| OpenStreetMap | Magasins (via Open Prices) | ODbL |
Les appels sont faits par un client HTTP commun : délai maximal, nouvelles tentatives sur les erreurs 429 et 5xx, User-Agent identifiable, cache des réponses et mémorisation des pannes pour ne jamais bloquer une page.
cp .env.example .env
docker compose up -d --build
docker compose exec web python manage.py seed_demo
docker compose exec web python manage.py sync_prices
docker compose exec web python manage.py createsuperuserL'application est disponible sur http://localhost:8000, l'administration sur /admin/ et la documentation de l'API sur /api/docs/.
La pile comprend PostgreSQL, Redis, l'application (Gunicorn + WhiteNoise) et un planificateur qui synchronise les prix et envoie les rappels une fois par jour.
Le guide de déploiement détaille :
- un comparatif des hébergeurs gratuits (Oracle Cloud Always Free, Render + Neon, Cloud Run) et payants (VPS Hetzner, OVHcloud ou Scaleway, Clever Cloud, Scalingo, Railway…) ;
- le déploiement sur un VPS avec
docker-compose.prod.ymlet Caddy (HTTPS automatique, médias servis par Caddy) ; - le déploiement sur une plateforme PaaS, le stockage S3 des médias, les tâches planifiées (y compris via GitHub Actions), les sauvegardes et une checklist de mise en production.
En résumé, sur un serveur avec un nom de domaine :
cp .env.example .env # DOMAIN, SECRET_KEY, POSTGRES_PASSWORD, EMAIL_URL...
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --buildPrérequis : uv et Node.js 20+ (22.23+ pour construire la documentation).
uv sync # dépendances Python (crée .venv)
npm install && npm run build
cp .env.example .env # DEBUG=true, base SQLite si DATABASE_URL est vide
uv run python manage.py migrate
uv run python manage.py seed_demo
uv run python manage.py setup_billing
uv run python manage.py sync_prices
uv run python manage.py runserverPendant le développement, npm run dev recompile les styles à chaque modification.
| Commande | Rôle |
|---|---|
seed_demo [--refresh-images] |
Charge les 102 ingrédients et 50 recettes de démonstration avec leurs photos (idempotent). |
sync_prices [slug ...] [--days N] [--pages N] |
Importe les prix Open Prices puis recalcule les recettes. |
refresh_metrics |
Recalcule coût, empreinte carbone et valeurs nutritionnelles (automatique à chaque enregistrement dans l'administration). |
send_expiry_reminders [--days N] |
Envoie les rappels de péremption. |
setup_assistant, setup_billing |
Créent la configuration par défaut de l'assistant et les formules (idempotent). |
Toute la configuration passe par des variables d'environnement (voir .env.example). Le guide de configuration explique pas à pas :
- l'envoi d'emails : format de
EMAIL_URL, fournisseurs (Brevo, boîte mail du domaine, Gmail), délivrabilité, test et dépannage ; - la connexion avec Google : création du client OAuth et URL de redirection ;
- l'assistant IA : clés des fournisseurs, plafond de dépenses ;
- les abonnements : coordonnées de virement et Wero dans l'administration, clés Stripe facultatives ;
- le domaine, la sécurité, la base, le cache, les médias, les prix, les tâches planifiées et les alertes d'erreur ;
- la référence complète des variables.
Les variables essentielles en production :
| Variable | Exemple |
|---|---|
SECRET_KEY |
chaîne aléatoire longue |
DOMAIN ou ALLOWED_HOSTS + CSRF_TRUSTED_ORIGINS |
comegusto.example.org |
DATABASE_URL (ou POSTGRES_PASSWORD avec Docker Compose) |
postgres://... |
EMAIL_URL, DEFAULT_FROM_EMAIL, CONTACT_EMAIL |
smtp+tls://...@smtp-relay.brevo.com:587 |
ADMIN_URL |
gestion-8f3k/ |
ANTHROPIC_API_KEY (facultatif) |
clé de l'API Anthropic pour l'assistant |
config/ réglages, URLs, WSGI/ASGI
apps/
core/ accueil, tableau de bord, saison, contact, santé, balises de templates
accounts/ utilisateur (connexion par email), profil, localisation, suppression RGPD
recipes/ ingrédients, recettes, unités et conversions, coût et CO2 par portion
integrations/ clients Open Food Facts, Open Prices, Impact CO2, géocodage IGN
pricing/ magasins, relevés de prix, synchronisation, estimateur de panier
pantry/ garde-manger, scan, statistiques, suggestions, rappels
shopping/ listes de courses, fusion, déduction du stock, comparaison
api/ API REST (DRF) et schéma OpenAPI
guide/ guide utilisateur intégré, commande de capture des figures
assistant/ assistant IA : fournisseurs, quotas, recherche, menu, frigo, ticket
templates/ gabarits Django (HTMX pour les interactions)
assets/app.css source Tailwind CSS v4, compilée vers static/css/app.css
demo/ recettes de démonstration, photos et crédits (images/credits.json)
deploy/ configuration Caddy pour la production
docs/ documentation développeur (Astro Starlight), captures du README
flowchart LR
OP[Open Prices] -->|sync_prices| PO[(Relevés de prix)]
OFF[Open Food Facts] -->|scan| PI[(Garde-manger)]
CO2[ADEME Impact CO2] --> M[Coût et CO2 des recettes]
PO --> E[Estimateur de panier]
E --> M
E --> SL[Comparaison des listes]
PI --> S[Suggestions anti-gaspi]
PI --> SL
IGN[IGN Géoplateforme] --> U[Localisation utilisateur] --> E
Chaque ingrédient est relié à un aliment de la table Ciqual 2025 (code et valeurs pour 100 g dans demo/ciqual.json, modifiables dans l'administration). Les quantités de la recette sont converties en grammes (poids moyen d'une pièce, densité 1 pour les liquides et les cuillères), puis les apports sont additionnés et divisés par le nombre de portions. La part des ingrédients couverts est affichée quand elle n'est pas de 100 %.
- Chaque ingrédient est relié à une catégorie Open Food Facts (
en:tomatoes,en:butters…). sync_pricesimporte les relevés récents de cette catégorie : prix « vrac » au kilo ou à la pièce et, s'ils sont trop rares, prix de produits emballés ramenés au kilo ou au litre grâce à leur contenance.- Les prix vrac sont préférés dès qu'il y en a au moins cinq, car les catégories larges contiennent aussi des produits transformés.
- L'estimateur retient la médiane des prix, globalement puis par enseigne, en écartant les prix plus de 4 fois éloignés de la médiane. Pour une enseigne, un ingrédient sans relevé est compté au prix médian, et la part de prix réellement relevés est affichée.
La documentation interactive est servie sur /api/docs/ et le schéma sur /api/schema/.
| Point d'accès | Accès |
|---|---|
GET /api/v1/recipes/ et /api/v1/recipes/{slug}/ |
public |
GET /api/v1/recipes/{slug}/estimate/?servings=&lat=&lon=&radius_km= |
public |
GET /api/v1/ingredients/ |
public |
/api/v1/pantry/ |
authentifié, propre à l'utilisateur |
/api/v1/shopping-lists/, POST .../{id}/add-recipe/ |
authentifié |
GET /api/v1/products/{code-barres}/ |
authentifié |
Authentification par session ou par jeton (Authorization: Token ..., jetons gérés dans l'administration).
uv run pytest --cov # 150+ tests, appels externes simulés
uv run ruff check . && uv run ruff format --check .
uv run pre-commit install # vérifications avant chaque commitLa CI GitHub Actions exécute le lint, les tests sur PostgreSQL, check --deploy et la construction de l'image Docker.
- Aucun secret dans le code : configuration par variables d'environnement.
- Content Security Policy stricte (aucun script ni style en ligne), HSTS, cookies sécurisés,
X-Frame-Options: DENY. - Double authentification (TOTP, clés d'accès, codes de secours), obligatoire pour l'équipe.
- Limitation de débit sur l'authentification (allauth), l'API et le formulaire de contact (avec pot de miel).
- Isolation stricte des données par utilisateur, couverte par des tests.
- Images externes restreintes aux domaines Open Food Facts.
Pour signaler une vulnérabilité, merci d'écrire à l'adresse de contact plutôt que d'ouvrir une issue publique.
Le suivi se fait dans les issues. Pistes : contribution de prix vers Open Prices depuis l'application, import de recettes, notifications push, application mobile installable (PWA).
Les contributions sont bienvenues : voir CONTRIBUTING.md.
Code sous licence MIT. Les photos des recettes proviennent de Wikimedia Commons sous licences CC0, CC BY ou CC BY-SA : leurs auteurs et licences sont indiqués sous chaque photo, sur la page /credits/ et dans demo/images/credits.json. Les données issues d'Open Food Facts, d'Open Prices et d'OpenStreetMap restent sous licence ODbL, celles de l'Anses (Ciqual), de l'ADEME et de l'IGN sous Licence Ouverte 2.0.




