# HelloFresh → Mealie import notes Lessons from processing the chowder recipe. Use as a checklist when adding another HelloFresh recipe. ## 1. Shipped quantities ≠ recipe quantities HelloFresh ships fixed packets, and the recipe usually uses only part of them. - Keep ingredient amounts as the **shipped amount**. Do not "correct" them to match the steps. - Leftovers are expected, not a data-entry error. - Examples from this session: - `1 tbsp Old Bay Seasoning` — step uses "half" + `¼ tsp`; remainder is left over. - `1 tsp sugar` — step uses `¼ tsp`; remainder is left over. - Stock concentrate ships as packets ("2 unit Veggie Stock Concentrate"). If packets are unavailable, recording it as `2 tablespoons` is intentional and fine. **Rule:** before touching a quantity, ask/confirm whether it is the shipped amount. ## 2. Servings - Mealie stores **one base serving count** (`recipeServings`). There is no native "2 or 4" option. - Set the base (HelloFresh recipes here are usually **2**). Use Mealie's built-in servings selector to scale to 4. - Mealie scales **structured ingredient quantities only**, not instruction text. - Also set the yield text (`recipeYield`, e.g. `"2 servings"`). `recipeYieldQuantity` may stay `0`; the MCP tool does not expose it. ## 3. Strip hardcoded multi-serving notes from instructions HelloFresh instructions embed scaling clauses. Remove them so the built-in scaler doesn't conflict: - `(... 4 TBSP for 4 servings)` - `(... 2½ cups for 4 servings)` - `(For 4 servings, use ½ tsp Old Bay and ½ tsp sugar.)` Keep the tips and the rest of the step text. The 2-serving amounts are the base and can stay. ## 4. Times - HelloFresh gives **Total** and **Prep**; derive `cook = total − prep`. - In this Mealie instance the UI showed **`performTime` as "Cook time"**, not `cookTime`. That is why setting only `cookTime` still displayed 10m. - Set **all four**: `totalTime`, `prepTime`, `cookTime`, and `performTime` (perform = cook duration) so every view agrees. - Sanity check: `prep + cook = total`. ## 5. Link ingredients to steps - Structured ingredients already carry a `referenceId` (UUID v4). - Add `ingredientReferences: [{ referenceId }]` to each instruction step, reusing the **exact** existing referenceId. - This is what "organize ingredients under steps" means in Mealie: cook-mode highlighting and per-step ingredient lists. - Do not regenerate referenceIds; that breaks the link. ## 6. Watch parser/unit artifacts The NLP parser can map `unit` inconsistently (`item`, `can`, `tablespoon`). - Verify units against the source text (`originalText`). - Confirm intentional choices (e.g. tbsp for stock concentrate) before "fixing" them. - Clean food names: remove trailing spaces (e.g. `green/poblano pepper `), normalize odd capitalization. ## 7. Sanity checks before finishing - [ ] Every listed ingredient is used by at least one step. - [ ] Step quantities are consistent with the list **or** explainable as shipped leftovers. - [ ] Times add up (prep + cook = total) and `performTime` is set. - [ ] Servings set; yield text set. - [ ] No hardcoded "for 4 servings" clauses left. - [ ] Every step has the right `ingredientReferences`. - [ ] Don't "fix" source-recipe quirks (e.g. description says "cheddar" while the ingredient is Monterey Jack) — that's HelloFresh copy, not a data-entry error. ## 8. Tool behavior (Mealie MCP) - `update_recipe` **replaces** ingredient/instruction lists when provided; content changes use read-merge-write to preserve other fields. - Omitted or `null` fields are unchanged. - `recipeYieldQuantity` is not exposed by the tool. - Unicode fractions and curly quotes round-trip fine. ## 9. Suggested workflow 1. `get_recipes(search=...)` → `get_recipe(slug)`. 2. Confirm name, source URL, and base servings. 3. Cross-check each ingredient against the steps (used / unused / shipped leftover). 4. Fix genuine errors: units, food names, times, yield — confirming shipped amounts first. 5. Remove `for 4 servings` clauses. 6. Add `ingredientReferences` to every step. 7. Re-fetch and verify times, servings, ref counts, and display strings.