{"id":49895016,"url":"https://github.com/nimpnaw/thermocook","last_synced_at":"2026-05-15T23:04:13.567Z","repository":{"id":357169210,"uuid":"1234910027","full_name":"NimpNaw/thermocook","owner":"NimpNaw","description":"Self-hosted recipe manager for Thermomix-like devices. Local FTS search, cooking mode, shopping list aggregation. Docker-ready.","archived":false,"fork":false,"pushed_at":"2026-05-11T15:44:07.000Z","size":4412,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-11T17:32:51.002Z","etag":null,"topics":["docker","fastapi","postgresql","react","recipes","self-hosted","thermomix"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NimpNaw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-10T19:51:50.000Z","updated_at":"2026-05-11T15:59:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/NimpNaw/thermocook","commit_stats":null,"previous_names":["nimpnaw/thermocook"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/NimpNaw/thermocook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimpNaw%2Fthermocook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimpNaw%2Fthermocook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimpNaw%2Fthermocook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimpNaw%2Fthermocook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NimpNaw","download_url":"https://codeload.github.com/NimpNaw/thermocook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimpNaw%2Fthermocook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33082764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T20:25:35.270Z","status":"ssl_error","status_checked_at":"2026-05-15T20:25:34.732Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","fastapi","postgresql","react","recipes","self-hosted","thermomix"],"created_at":"2026-05-15T23:04:12.075Z","updated_at":"2026-05-15T23:04:13.557Z","avatar_url":"https://github.com/NimpNaw.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🍳 ThermoCook\n\n![CI](https://github.com/NimpNaw/thermocook/actions/workflows/ci.yml/badge.svg)\n\n**Votre bibliothèque de recettes, auto-hébergée et taillée pour le Thermomix**\n\n*Recherche instantanée. Mode cuisine tablette. Liste de courses partageable. Vos données vous appartiennent.*\n\n[![FastAPI](https://img.shields.io/badge/FastAPI-009688?style=flat-square\u0026logo=fastapi\u0026logoColor=white)](https://fastapi.tiangolo.com/)\n[![React](https://img.shields.io/badge/React_19-61DAFB?style=flat-square\u0026logo=react\u0026logoColor=black)](https://react.dev/)\n[![PostgreSQL](https://img.shields.io/badge/PostgreSQL_15-336791?style=flat-square\u0026logo=postgresql\u0026logoColor=white)](https://www.postgresql.org/)\n[![Docker](https://img.shields.io/badge/Docker-prêt-2496ED?style=flat-square\u0026logo=docker\u0026logoColor=white)](https://www.docker.com/)\n[![PWA](https://img.shields.io/badge/PWA-hors--ligne-F7DF1E?style=flat-square)](https://web.dev/progressive-web-apps/)\n[![License](https://img.shields.io/badge/Licence-ISC-green?style=flat-square)](https://opensource.org/licenses/ISC)\n\n\u003c/div\u003e\n\n---\n\nThermoCook est un gestionnaire de recettes **auto-hébergé et respectueux de la vie privée**, conçu pour les propriétaires de Thermomix qui souhaitent s'affranchir des services cloud propriétaires.\n\nVos recettes vivent sur votre serveur, pas ailleurs. Pas d'abonnement. Pas d'enfermement propriétaire.\n\n---\n\n## Fonctionnalités\n\n### 🔍 Découverte et recherche\n\n\u003cimg src=\"docs/screenshots/accueil.png\" alt=\"Accueil ThermoCook\" width=\"260\" align=\"right\"/\u003e\n\nLa page d'accueil met en avant les recettes de saison. Une barre de recherche permet de retrouver n'importe quelle recette en quelques lettres — même avec une faute de frappe.\n\nLa navigation par onglets permet de basculer entre **Découvrir**, le **Catalogue** complet, les **Courses** et les **Favoris**.\n\n\u003cbr clear=\"right\"/\u003e\n\n---\n\n### 📖 Fiche recette\n\n\u003cimg src=\"docs/screenshots/recette.png\" alt=\"Fiche recette\" width=\"260\" align=\"right\"/\u003e\n\nChaque recette affiche sa photo, sa difficulté, sa catégorie, son temps de préparation et le nombre de portions. Deux actions sont accessibles en un tap depuis la fiche :\n\n- **Commencer la cuisine** — lance le Mode Cuisine pas à pas\n- **Ajouter à la liste de courses** — ajoute les ingrédients à votre liste en cours\n\n\u003cbr clear=\"right\"/\u003e\n\n---\n\n### 🍳 Étapes de préparation Thermomix\n\n\u003cimg src=\"docs/screenshots/mode-thermomix.png\" alt=\"Étapes Thermomix\" width=\"260\" align=\"right\"/\u003e\n\nLes réglages Thermomix — température, vitesse, durée — apparaissent sous forme de pastilles colorées directement dans le texte de chaque étape. D'un coup d'œil, vous savez exactement quoi régler sur votre robot.\n\n\u003cbr clear=\"right\"/\u003e\n\n---\n\n### 🎬 Mode Cuisine\n\n\u003cimg src=\"docs/screenshots/mode-cuisine.png\" alt=\"Mode Cuisine\" width=\"260\" align=\"right\"/\u003e\n\nLe Mode Cuisine affiche les étapes une par une, en grand, pour une lecture confortable à distance. Une barre de progression indique où vous en êtes dans la recette.\n\n- L'écran de la tablette reste allumé pendant toute la préparation\n- Les durées deviennent des minuteurs que vous lancez d'un tap\n- Navigation avant/arrière entre les étapes\n\n\u003cbr clear=\"right\"/\u003e\n\n---\n\n### 🛒 Liste de courses\n\n\u003cimg src=\"docs/screenshots/liste-de-course.png\" alt=\"Liste de courses\" width=\"260\" align=\"right\"/\u003e\n\nConstituez votre liste de courses depuis les fiches recettes. Les ingrédients de plusieurs recettes sont regroupés automatiquement par rayon (Fruits \u0026 Légumes, Crémerie, Épicerie…).\n\nUn bouton de partage génère un lien pour consulter la liste sur votre téléphone en magasin, sans avoir à ouvrir l'application.\n\n\u003cbr clear=\"right\"/\u003e\n\n---\n\n### ❤️ Favoris\n\n\u003cimg src=\"docs/screenshots/favoris.png\" alt=\"Mes Favoris\" width=\"260\" align=\"right\"/\u003e\n\nAjoutez une recette à vos favoris en un tap. L'onglet **Favoris** rassemble toutes vos recettes sauvegardées pour les retrouver facilement.\n\n\u003cbr clear=\"right\"/\u003e\n\n---\n\n### 📱 Installez l'application sur votre téléphone\n\nThermoCook s'installe depuis le navigateur sur votre téléphone ou tablette, comme une application classique. Les recettes déjà consultées restent accessibles même sans connexion.\n\n---\n\n## Démarrage rapide\n\n**Prérequis :** Docker et Docker Compose.\n\n```bash\n# 1. Cloner le dépôt\ngit clone https://github.com/NimpNaw/thermocook.git\ncd thermocook\n\n# 2. Configurer l'environnement\ncp .env.example .env\n# Éditez .env — définissez au minimum SECRET_KEY, ADMIN_PASSWORD et vos identifiants de base de données\n\n# 3. Lancer\ndocker compose up -d\n```\n\n| Service | URL |\n|---|---|\n| Application | `http://localhost:3000` |\n| API (Swagger) | `http://localhost:8000/docs` |\n\nThermoCook démarre avec une bibliothèque de recettes vide. Voir [Ajouter des recettes](#ajouter-des-recettes) ci-dessous.\n\n---\n\n## Configuration\n\nToute la configuration se fait via des variables d'environnement dans votre fichier `.env`.\n\n| Variable | Défaut | Description |\n|---|---|---|\n| `SECRET_KEY` | ⚠️ valeur dev | Secret JWT — **à changer en production** |\n| `ADMIN_USERNAME` | `admin` | Nom d'utilisateur administrateur |\n| `ADMIN_PASSWORD` | `changeme` | Mot de passe admin — **à changer en production** |\n| `POSTGRES_USER` | — | Utilisateur PostgreSQL |\n| `POSTGRES_PASSWORD` | — | Mot de passe PostgreSQL |\n| `POSTGRES_DB` | — | Nom de la base de données PostgreSQL |\n| `ALLOWED_ORIGINS` | `http://localhost:3000` | Origines CORS autorisées, séparées par des virgules |\n| `AUTO_IMPORT` | `true` | Lance l'import des recettes au démarrage du backend |\n| `COOKIE_SECURE` | `false` | Mettre à `true` pour servir en HTTPS |\n| `BACKEND_PORT` | `8000` | Port exposé du backend |\n| `FRONTEND_PORT` | `3000` | Port exposé du frontend |\n\n\u003e **Conseil proxy inverse :** Faites tourner ThermoCook derrière Nginx/Traefik/Caddy pour HTTPS. Définissez `COOKIE_SECURE=true` et `ALLOWED_ORIGINS` sur votre domaine public.\n\n---\n\n## Ajouter des recettes\n\nThermoCook est livré sans recettes. Chaque recette est un fichier Markdown dans `data/recipes/`.\n\n### Structure des répertoires\n\n```\ndata/recipes/\n└── ma-source/\n    └── gateau-chocolat/\n        ├── recette.md\n        └── images/\n            └── principale.jpg\n```\n\nL'identifiant de la recette est dérivé du chemin : `{dossier_source}_{dossier_recette}` (ex. `ma-source_gateau-chocolat`). Renommer un dossier change son identifiant et supprime toutes les données utilisateur associées au prochain import.\n\n### Format de `recette.md`\n\n```markdown\n# Fondant au Chocolat\n\n![Fondant au Chocolat](images/principale.jpg)\n\n**Difficulté :** Facile | **Temps total :** 30 min | **Portions :** 6 portions\n**Catégorie :** Dessert\n\n## Ingrédients\n\n- 200 g de chocolat noir\n- 150 g de beurre\n- 4 œufs\n- 120 g de sucre\n\n## Préparation\n\n**1.** Faire fondre le chocolat et le beurre. {5 min/50°C/vitesse 2}\n**2.** Ajouter les œufs et le sucre, mélanger. {30 sec/vitesse 4}\n**3.** Cuire à 180°C pendant 12 minutes.\n```\n\n### Notation Thermomix `{…}`\n\nLes réglages Thermomix s'écrivent entre accolades : `{durée/température_ou_mode/vitesse}`\n\n| Exemple | Signification |\n|---|---|\n| `{5 min/Varoma/vitesse 2}` | 5 min à Varoma, vitesse 2 |\n| `{10 min/98°C/vitesse 1}` | 10 min à 98°C, vitesse 1 |\n| `{30 sec/vitesse 10}` | 30 sec à vitesse 10 |\n| `{5 min/pétrin}` | 5 min en mode pétrin |\n\n**Modes supportés :** `pétrin`, `inverse`, `mijotage`, `turbo`, `Varoma`, `Épaissir`, `Mixage`, `Caramel`, `Bouilloire`, `Rice cooker`, `Cuisson lente`, `Fermentation`, `Sous-vide`, `Nettoyage`, `Éplucher`, `Cuisson des œufs`, `Râper`, `Émincer`, `Cuisson sans couvercle`.\n\n### Importation\n\nUne fois vos fichiers en place, connectez-vous en tant qu'administrateur (bouton **ADMIN** en haut à droite de l'application) et déclenchez une synchronisation depuis le panneau d'administration. L'import peut aussi se lancer automatiquement à chaque démarrage du backend si `AUTO_IMPORT=true` est défini dans votre `.env`.\n\n---\n\n## Stack technique\n\n| Couche | Technologie |\n|---|---|\n| Frontend | React 19, TypeScript, Vite 6, Tailwind CSS v4, TanStack Query, Zustand |\n| Backend | FastAPI (Python 3.11), SQLModel, Alembic, slowapi |\n| Base de données | PostgreSQL 15 avec extension `pg_trgm` |\n| Serveur web | Nginx (proxy inverse + fichiers statiques) |\n| Déploiement | Docker, Docker Compose |\n\n---\n\n## Structure du projet\n\n```\nthermocook/\n├── backend/          # App FastAPI, modèles, migrations (Alembic)\n├── frontend/         # PWA React (Vite + Tailwind)\n├── data/             # Fichiers recettes, images, miniatures (non versionné)\n├── scripts/          # Scripts utilitaires\n├── docker-compose.yml\n└── docker-compose.dev.yml\n```\n\n---\n\n## Licence\n\n[Licence ISC](https://opensource.org/licenses/ISC)\n\n---\n\n\u003cdiv align=\"center\"\u003e\nCréé pour les cuisiniers qui apprécient leur indépendance.\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnimpnaw%2Fthermocook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnimpnaw%2Fthermocook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnimpnaw%2Fthermocook/lists"}