Commit Graph

47 Commits

Author SHA1 Message Date
admin 23f0fc5549 updated favicon 2026-02-26 10:37:30 +01:00
admin da6dd007d9 Fix image centering with display:block + margin:auto
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 09:19:45 +01:00
admin 8f76ca0b31 Center only the image, keep label left-aligned
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 09:17:52 +01:00
admin a6844e3ab2 Center recipe image on edit page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 09:15:24 +01:00
admin 41ab4564dc Fix Tandoor image URLs: rewrite internal API URLs to public base URL
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>
2026-02-26 09:12:26 +01:00
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 ae2f0e062f Move btn-danger style to base.html so it works on all pages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 08:57:48 +01:00
admin 6aa7ed3c71 Search dropdown: keyboard navigation, edit/delete actions; edit page delete
- 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>
2026-02-26 08:55:43 +01:00
admin bb89d97716 Fix Tandoor pagination: use page/page_size instead of limit/offset
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>
2026-02-26 08:50:49 +01:00
admin 4a1ebfaf4e UI improvements: search dropdown, layout fixes, taller step fields
- 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>
2026-02-26 08:45:11 +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 98d1e3b45a feat: env var overrides for Mealie/Tandoor connection settings
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>
2026-02-26 07:46:44 +01:00
admin d8ca4f1336 logo change 2026-02-25 08:28:30 +01:00
admin e922822286 v0.8.3: prefer h1 for mindmegette title, strip trailing "recept" globally
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>
2026-02-24 20:43:24 +01:00
admin 76846eb427 fix(mindmegette): use meal name h2 as title for alt-format pages
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>
2026-02-24 20:36:31 +01:00
admin 6f12cc06a4 v0.8.1: fix mindmegette alt page format (wysiwyg ingredients/instructions)
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>
2026-02-24 20:30:47 +01:00
admin 0ec9ce0c6d v0.8.0: gastrohobbi.hu parser, fix ingredient fraction parsing
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>
2026-02-24 19:17:13 +01:00
admin bab59753f3 Fix kiskegyed ingredient parsing: spaces around links, multi-word units
- 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>
2026-02-24 18:47:41 +01:00
admin 20fabb84bf v0.7.0: kiskegyed.hu parser, dual measurements, site links as URLs
- 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>
2026-02-24 18:45:25 +01:00
admin 2408984421 Extract ingredient comments from food field, add import-to-both button
- 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>
2026-02-24 18:27:58 +01:00
admin 4467265168 Detect redirect-like instructions and show warning
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>
2026-02-24 18:22:19 +01:00
admin baa63a43b2 v0.6.1: follow linked recipes on sobors.hu, white favicon
- 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>
2026-02-24 18:18:54 +01:00
admin 45534391f0 favicon 2026-02-24 18:13:13 +01:00
admin a0bcb62588 v0.6.0: Sobors.hu parser, HTTP auth, recipe validation, UI polish
- 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>
2026-02-24 18:07:05 +01:00
admin 76290770f4 examples 2026-02-24 18:00:10 +01:00
admin ca863e4118 v0.5.1: Design overhaul — felhom.eu branding, blue/cyan color scheme
- 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>
2026-02-24 17:21:54 +01:00
admin 8e45d647fd Add bulk import feature and supported sites display
- 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>
2026-02-24 17:06:02 +01:00
admin 00b097566a Fix nosalty tag extraction: scope to recipe attribute list
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>
2026-02-24 16:41:29 +01:00
admin 73a2319f5a Add nosalty.hu parser
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>
2026-02-24 16:40:16 +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 4dde7bd8b5 Extract parenthesised notes from food name to extra field
E.g. "fehérborecet (ízlés szerint)" → food="fehérborecet", extra="ízlés szerint"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 16:10:42 +01:00
admin bef4b9978d Add streetkitchen.hu parser with ingredient groups and multiple instruction formats
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>
2026-02-24 16:02:39 +01:00
admin 6e7ad11933 Make section dividers more visible (remove opacity)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:23:15 +01:00
admin 56f1bc84a3 Add subtle section dividers to import page for visual clarity
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:21:37 +01:00
admin f8772b20b7 fix: tag UI — two-field design with active/inactive toggle
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>
2026-02-24 12:49:53 +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 458b1e362a feat: Tandoor integration — settings, test connection, import, duplicate detection
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>
2026-02-24 09:29:58 +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 92912c5890 fix: test connection reads form values instead of saved config
The "Kapcsolat tesztelése" button sent an empty POST to /settings/test,
which read from the (possibly empty) config file on disk. Now sends the
current form values so testing works before clicking Save.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 07:53:11 +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