From b3280c976d79726109695dcb13fa5632e8b4663f Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Tue, 24 Feb 2026 19:49:02 +0100 Subject: [PATCH] feat: add recipe-importer app template Hungarian recipe scraper for Mealie & Tandoor. Supports mindmegette.hu, streetkitchen.hu, nosalty.hu, sobors.hu, kiskegyed.hu, gastrohobbi.hu with schema.org fallback for other sites. Co-Authored-By: Claude Opus 4.6 --- templates/recipe-importer/.felhom.yml | 66 ++++++++++++++++++++ templates/recipe-importer/docker-compose.yml | 50 +++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 templates/recipe-importer/.felhom.yml create mode 100644 templates/recipe-importer/docker-compose.yml diff --git a/templates/recipe-importer/.felhom.yml b/templates/recipe-importer/.felhom.yml new file mode 100644 index 0000000..e851084 --- /dev/null +++ b/templates/recipe-importer/.felhom.yml @@ -0,0 +1,66 @@ +# ============================================================================= +# .felhom.yml — App metadata for felhom-controller +# ============================================================================= +# Place alongside docker-compose.yml in each stack directory: +# /opt/docker/stacks/recipe-importer/.felhom.yml +# ============================================================================= + +# --- Display info (shown on dashboard) --- +display_name: "Recipe Importer" +description: "Magyar receptoldalak importálása Mealie-be és Tandoor-ba" +category: "tools" +subdomain: "rimport" + +# --- Asset slug --- +slug: "recipe-importer" + +# --- Resource hints (displayed on deploy screen) --- +resources: + mem_request: "30M" + mem_limit: "128M" + pi_compatible: true + needs_hdd: false + +# --- Deploy fields --- +deploy_fields: + - env_var: DOMAIN + label: "Domain" + type: domain + description: "A szerver domain neve" + locked_after_deploy: true + + - env_var: SUBDOMAIN + label: "Aldomain" + type: subdomain + default: "rimport" + required: true + locked_after_deploy: true + description: "Az alkalmazás aldomainje" + + - env_var: SECRET_KEY + label: "Titkos kulcs" + type: secret + generate: "hex:32" + locked_after_deploy: true + description: "Flask munkamenet titkos kulcs (automatikusan generált)" + +# --- App info (info page content) --- +app_info: + tagline: 'Magyar receptoldalak importálása egyszerűen - Mealie és Tandoor támogatással' + docs_url: 'https://gitea.dooplex.hu/admin/recipe-importer' + + use_cases: + - 'Receptek importálása mindmegette.hu, streetkitchen.hu, nosalty.hu, sobors.hu, kiskegyed.hu és gastrohobbi.hu oldalakról' + - 'Hozzávalók, elkészítési lépések, képek és címkék automatikus felismerése' + - 'Egyedi és tömeges importálás Mealie-be és/vagy Tandoor-ba' + - 'Importálás előtti szerkesztés - hozzávalók, lépések módosítása, címkék kezelése' + - 'Ismeretlen oldalak esetén schema.org JSON-LD alapú fallback feldolgozás' + + first_steps: + - 'Nyisd meg a rimport.DOMAIN címet a böngészőben' + - 'Menj a Beállítások oldalra és add meg a Mealie és/vagy Tandoor URL-t és API kulcsot' + - 'Állíts be felhasználónevet és jelszót a hozzáférés védelméhez' + - 'Illeszd be egy recept URL-jét az importálás oldalon és kattints a Feldolgozás gombra' + + prerequisites: + - 'Mealie és/vagy Tandoor Recipes telepítve és elérhető a hálózaton' diff --git a/templates/recipe-importer/docker-compose.yml b/templates/recipe-importer/docker-compose.yml new file mode 100644 index 0000000..9cf4223 --- /dev/null +++ b/templates/recipe-importer/docker-compose.yml @@ -0,0 +1,50 @@ +# Recipe Importer - Hungarian recipe scraper for Mealie & Tandoor +# Domain: ${SUBDOMAIN}.${DOMAIN} +# Database: None (file-based JSON config) +# RAM: ~30MB (mem_limit: 128M) | Pi-compatible: Yes +# +# Environment variables: +# DOMAIN - Your domain (e.g., demo-felhom.eu) +# SECRET_KEY - Flask session secret +# +# First-time setup: +# Open ${SUBDOMAIN}.${DOMAIN}, go to Settings, configure Mealie/Tandoor URL + API key. + +services: + recipe-importer: + image: gitea.dooplex.hu/admin/recipe-importer:v0.8.0 + container_name: recipe-importer + restart: unless-stopped + environment: + - TZ=Europe/Budapest + - SECRET_KEY=${SECRET_KEY} + - MEALIE_INTERNAL_URL=http://mealie:9000 + - TANDOOR_INTERNAL_URL=http://tandoor:8080 + volumes: + - recipe_data:/data + networks: + - traefik-public + deploy: + resources: + limits: + memory: 128M + healthcheck: + test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 10s + labels: + - "traefik.enable=true" + - "traefik.http.routers.recipe-importer.rule=Host(`${SUBDOMAIN}.${DOMAIN}`)" + - "traefik.http.routers.recipe-importer.entrypoints=websecure" + - "traefik.http.routers.recipe-importer.tls=true" + - "traefik.http.routers.recipe-importer.tls.certresolver=letsencrypt" + - "traefik.http.services.recipe-importer.loadbalancer.server.port=8000" + +volumes: + recipe_data: + +networks: + traefik-public: + external: true