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>
This commit is contained in:
@@ -18,6 +18,7 @@ Docker container for importing recipes from Hungarian websites into [Mealie](htt
|
||||
│ ├── /scrape → AJAX: parse recipe HTML │
|
||||
│ ├── /send → AJAX: push to Mealie API │
|
||||
│ ├── /send-tandoor → AJAX: push to Tandoor API │
|
||||
│ ├── /tags → AJAX: list tags from both │
|
||||
│ └── /health → Health check │
|
||||
│ │
|
||||
│ Modules: │
|
||||
@@ -37,10 +38,10 @@ Docker container for importing recipes from Hungarian websites into [Mealie](htt
|
||||
|
||||
## Supported Sites
|
||||
|
||||
| Site | Ingredients | Instructions | Image |
|
||||
|------|:-----------:|:------------:|:-----:|
|
||||
| mindmegette.hu | Yes | Yes | Yes |
|
||||
| *Other sites* | Fallback (schema.org JSON-LD) | Fallback (schema.org JSON-LD) | Yes (og:image) |
|
||||
| Site | Ingredients | Instructions | Image | Tags |
|
||||
|------|:-----------:|:------------:|:-----:|:----:|
|
||||
| mindmegette.hu | Yes | Yes | Yes | Yes |
|
||||
| *Other sites* | Fallback (schema.org JSON-LD) | Fallback (schema.org JSON-LD) | Yes (og:image) | Fallback (schema.org keywords) |
|
||||
|
||||
### Mindmegette.hu Parser
|
||||
|
||||
@@ -52,11 +53,12 @@ Extracts data from the Angular-rendered HTML:
|
||||
- **Ingredients**: `div.ingredients` → `div.ingredients-meta` rows, each containing `<strong>` (qty), `<span>` (unit), `<a class="ingredients-link">` (food), `<small>` (extra)
|
||||
- **Ingredient groups**: Multiple `div.ingredients` containers; group title via `<strong class="ingredients-group">`
|
||||
- **Instructions**: `mindmegette-wysiwyg-box` → `ol > li` elements
|
||||
- **Tags**: `<a class="tag">` elements inside `div.desktop-wrapper`
|
||||
|
||||
### Generic Fallback Parser
|
||||
|
||||
For unsupported sites, attempts extraction via:
|
||||
1. Schema.org JSON-LD `@type: Recipe` blocks (`recipeIngredient`, `recipeInstructions`)
|
||||
1. Schema.org JSON-LD `@type: Recipe` blocks (`recipeIngredient`, `recipeInstructions`, `keywords`)
|
||||
2. OpenGraph meta tags for title, description, image
|
||||
|
||||
### Adding a New Site Parser
|
||||
@@ -90,6 +92,17 @@ The importer uses the Tandoor REST API:
|
||||
|
||||
Authentication uses an API token (Bearer header), created in Tandoor at *Settings → API Browser → Auth Token*.
|
||||
|
||||
## Tag Management
|
||||
|
||||
Tags are scraped from recipe pages and shown as editable chips in the UI. Users can:
|
||||
- **Remove** scraped tags that are irrelevant
|
||||
- **Search** existing tags from Mealie and Tandoor (fetched via `GET /tags` endpoint)
|
||||
- **Add** custom tags by typing and pressing Enter
|
||||
|
||||
Tags are sent to both services on import:
|
||||
- **Mealie**: Tags are created via `POST /api/organizers/tags` if they don't exist, then attached to the recipe in the PATCH payload
|
||||
- **Tandoor**: Keywords are auto-created by including `keywords: [{"name": "..."}]` in the recipe POST
|
||||
|
||||
## Configuration
|
||||
|
||||
All settings are persisted to `/data/config.json` (mounted as a Docker volume).
|
||||
@@ -108,7 +121,7 @@ All settings are persisted to `/data/config.json` (mounted as a Docker volume).
|
||||
```yaml
|
||||
services:
|
||||
recipe-importer:
|
||||
image: gitea.dooplex.hu/admin/recipe-importer:0.1.9
|
||||
image: gitea.dooplex.hu/admin/recipe-importer:0.2.0
|
||||
container_name: recipe-importer
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
@@ -149,7 +162,7 @@ The UI is in Hungarian and uses a dark theme. The workflow is:
|
||||
|
||||
1. **Settings** (`/settings`) — Configure Mealie and/or Tandoor connection (URL + API key), test each connection
|
||||
2. **Import** (`/import`) — Paste a recipe URL, click "Beolvasás" (Scrape)
|
||||
3. **Review** — Edit structured ingredients (4-column: quantity, unit, food, note), add/remove ingredient groups, edit instructions
|
||||
3. **Review** — Edit structured ingredients (4-column: quantity, unit, food, note), add/remove ingredient groups, edit instructions, manage tags (add/remove/search existing)
|
||||
4. **Send** — Click "Importálás Mealie-be" and/or "Importálás Tandoor-ba" to push to your configured services
|
||||
|
||||
## Tech Stack
|
||||
|
||||
Reference in New Issue
Block a user