13 Commits

Author SHA1 Message Date
admin e746dc10c9 Edit page: auto-expand step textareas, wider layout, image management
- Textareas auto-resize to fit content (min 120px)
- Edit page container widened to 1100px
- Show recipe image with URL input and file upload options
- Add image upload endpoint (POST /api/recipes/<backend>/<id>/image)
- Add upload_image_bytes() to both Mealie and Tandoor clients

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 09:07:56 +01:00
admin 8f4f7f245b Fix KeyError on keyword/tag objects without 'name' field
Tandoor recipe list API may return keyword objects without a 'name'
key, causing KeyError('name'). Use .get() with filtering across all
tag/keyword list comprehensions in both Mealie and Tandoor clients.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 08:36:13 +01:00
admin 19cbd505d4 feat: recipe management page — browse, search, edit, delete recipes
New /recipes page with backend switching (Mealie/Tandoor), full-text
search, tag filtering, multi-select bulk delete, per-recipe edit/delete
buttons, and a full recipe editor reusing the import preview form.

New API client methods: list_recipes, get_recipe, update_recipe,
delete_recipe for both MealieClient and TandoorClient.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 08:30:26 +01:00
admin 3524f372cc Handle quantity ranges (e.g. 2-3) in Mealie and Tandoor clients
Both APIs require numeric quantity/amount fields. When a range like
"2-3" is detected, uses the first number as the quantity and puts
the full range (e.g. "2- 3 ek") in the note field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 16:17:06 +01:00
admin bbd0889471 feat: tag management — scrape, edit, search existing, import to Mealie/Tandoor
- Scraper extracts tags from mindmegette.hu (<a class="tag">) and schema.org keywords
- Tag editor UI with removable chips, search/autocomplete for existing tags, custom add
- Mealie: auto-create tags via POST /api/organizers/tags, include in recipe PATCH
- Tandoor: include keywords in recipe POST (auto-created by name)
- New GET /tags endpoint returns existing tags from both services for search

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:42:54 +01:00
admin f7810ba33d feat: duplicate detection + original URL in description
- Add original recipe URL to Mealie description (appended after blank line)
- Check for duplicate recipes on scrape (match orgURL or URL in description)
- Show warning with link to existing recipe if duplicate found
- User can still import anyway (warning only, not blocking)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:02:53 +01:00
admin a27b322409 fix: group title on first ingredient + multi-site parser registry
- Fix ingredient groups creating empty entries in Mealie: set title
  field on the first ingredient after the group marker instead
- Refactor scraper with @_register decorator for URL-based site dispatch
- Update README with structured ingredients, groups, MEALIE_INTERNAL_URL

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:51:14 +01:00
admin c235d5caa7 fix: image upload (add extension field) + ingredient groups
- Fix Mealie image upload 422: send required `extension` field in form data
- Parse ingredient groups from mindmegette (multiple div.ingredients
  containers with strong.ingredients-group titles)
- Show group headers in UI with dashed-border accent input
- Pass group markers through to Mealie as title-only ingredient entries

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:44:34 +01:00
admin cb669f1861 feat: structured ingredients with unit/food resolution
Scraper returns {quantity, unit, food, extra} dicts instead of flat
strings. UI shows 4-column ingredient editor. Mealie client resolves
unit/food IDs via API (creates missing ones automatically).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:33:24 +01:00
admin 274aaeb0b6 fix: Mealie PATCH 500 — instructions need title and ingredientReferences
Mealie validates that recipeInstructions have title and
ingredientReferences fields. Also use dashed UUID format.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:18:43 +01:00
admin 0192de5177 fix: ingredient parsing — match actual HTML elements and add spaces
The scraper looked for span.quantity/span.unit/span.name which don't
exist. The real HTML uses <strong> for qty, plain <span> for unit,
<a class="ingredients-link"> for name, and <small> for extras like
"(darált)". Also add referenceId to Mealie ingredients (required field).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:11:28 +01:00
admin 9a59b38fd6 fix: add MEALIE_INTERNAL_URL env var for Docker-to-Docker API calls
When deployed behind Cloudflare Tunnel, requests from the container to
the external Mealie URL fail with 530 (hairpin). MEALIE_INTERNAL_URL
lets the container use the Docker-internal address (e.g. http://mealie:9000)
for API calls while keeping the external URL for browser links.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 07:58:59 +01:00
admin f600885b14 feat: initial recipe-importer application
Python/Flask web app that scrapes Hungarian recipe sites (mindmegette.hu)
and imports them into Mealie via its REST API. Includes dark-themed web UI
with editable preview, Dockerfile, build script, and docker-compose.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 21:52:46 +01:00