Images returned by Tandoor API use the internal service URL when
api_url differs from base_url. Now rewritten to public URL so
browser can display them.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 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>
- Search dropdown now supports arrow up/down to highlight items,
Enter navigates to edit page of highlighted recipe
- Each dropdown item shows edit (pencil) and delete (trash) buttons
- Edit page now has a "Recept törlése" button with confirmation modal
- Successful delete on edit page redirects back to /recipes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tandoor's /api/recipe/ endpoint uses Django REST Framework's
PageNumberPagination (page + page_size), not LimitOffsetPagination.
The limit/offset params were silently ignored, returning all recipes
on every page.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Recipe search now shows dropdown suggestions while typing;
full results load on Enter or clicking "Keresés" button
- Search field moved above tag filter; active filter tags below input
- Instruction textarea doubled in height (60px → 120px) on both
import and edit pages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
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>
MEALIE_URL, MEALIE_API_KEY, TANDOOR_URL, TANDOOR_API_KEY env vars
now take priority over config.json values when set. Useful for
Kubernetes deployments where secrets are injected as env vars.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mindmegette regular pages: use h1 element (clean meal name like
"Sajtkrémes csirkés leves") instead of og:title (which has "receptje"
suffix). Also add global post-processing to strip trailing recept/
receptje/receptek from titles across all parsers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Alt-format pages (e.g. /alapetelek/) have the meal name in an h2
element above the Hozzávalók header, which is more useful than the
long article title from og:title.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Support alternative mindmegette.hu pages (e.g. /alapetelek/) where
ingredients are in <ul> after h3 "Hozzávalók" and instructions in <ol>
after h3 "Elkészítés" inside the wysiwyg box, instead of structured
div.ingredients containers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add gastrohobbi.hu parser (WPBakery page builder layout): ingredients
with groups, instructions with embedded lists, tags from JSON-LD
articleSection, prep time extraction.
Fix ingredient line parser: fractions like "1/2" no longer split due to
regex backtracking, en-dash ranges normalized, unicode fractions (½¼¾)
recognized as quantity start across all parsers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use get_text(" ") with whitespace normalization to preserve spaces
between text nodes and <a> tag content in ingredient lines
- Use non-greedy .+? for unit in dual measurement regex to handle
multi-word units like "kis fej"
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New parser for kiskegyed.hu: ingredients (with groups, dual measurements),
instructions (ol > li > div), tags (section.tags)
- Dual measurement handling: "3 ek (70 g)" extracts alternate measurement
to comment field
- Cross-site linking: kiskegyed→sobors links are followed to get full recipe
(mirrors existing sobors→kiskegyed support)
- Supported sites now shown as clickable URLs in the import page
- supported_sites() returns dicts with name and url
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Global post-processing in scrape() extracts trailing (comment) from
ingredient food names into the extra/comment field. Works for all parsers.
- Added "Importálás mindkettőbe" button on single import page when both
Mealie and Tandoor are configured.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When recipe instructions are just a link to another site (e.g.
"ide kattintva, a Kiskegyed oldalán találod"), display a warning
instead of silently accepting non-useful instruction text.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Sobors.hu parser: detect external links in instructions and follow them
to scrape real recipe content (e.g. kiskegyed.hu linked recipes)
- Article-style ingredient fallback for sobors.hu pages without structured
ingredient containers (h4 + ul > li plain text)
- Favicon changed to logo_notext_white.svg
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New sobors.hu parser with ingredient groups and section headers
- Incomplete recipe warnings (missing ingredients/instructions)
- Optional HTTP Basic Auth (configurable on settings page)
- Brand text: "Recept" in white, "Importáló" in blue
- Larger logo (36px), favicon using logo_notext.svg
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New color palette matching felhom.eu/controller templates (blue/cyan accent)
- Plus Jakarta Sans font, 12px border radius, accent glow on focus
- felhom.eu logo in navbar, "Powered by felhom.eu" footer
- Settings page: documentation about external vs internal Docker URLs
- Fixed version double "v" prefix display
- Cleaned up example HTML files from development
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document bulk import feature, nosalty.hu parser, streetkitchen
parser, and quantity range handling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Two-tab UI: single import (existing) and bulk import
- Bulk mode: paste multiple URLs, choose review-each or auto-import
- Review mode: edit each recipe before importing, option to switch
to auto mid-way
- Auto mode: scrape and import all without manual review
- Tag option for auto mode: import all tags or none
- Progress table with per-recipe status tracking
- Import targets: Mealie, Tandoor, or both
- Supported sites shown on both tabs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The m-tags__tagItem class is used site-wide for SEO/navigation links.
Scope tag extraction to div.p-recipe__attributeList to only get
actual recipe tags.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extracts ingredients (with groups), instructions (with section
headers), tags, and story-as-description from nosalty.hu recipe pages.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
Handles three instruction layouts: ol steps, ul steps, and paragraph-style.
Parses merged qty+unit strings (e.g. "200g" → qty=200, unit=g).
Deduplicates ingredients by targeting the specific grid container.
Tags extracted from JSON-LD recipeCategory.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Scraped tags default to inactive (won't be added). Click a tag to move
it between active (green, will be imported) and inactive (muted, from
webpage). Manually added/searched tags go directly to active.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 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>