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>
Add TandoorClient (app/tandoor.py) with full recipe creation, image upload,
and duplicate detection via the Tandoor REST API. Settings page now has
separate Mealie and Tandoor sections. Import page shows both send buttons
based on which services are configured.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>