1a5fb23dfd
feat: add slug/icon/descriptor to AssemblyTemplate and get_templates_for_api()
...
Extends AssemblyTemplate dataclass with slug, icon, descriptor, and
role_hints fields. Updates all 13 template instantiations with
appropriate values. Adds _TEMPLATE_BY_SLUG lookup dict and
get_templates_for_api() serialiser for the templates endpoint.
2026-04-14 10:36:58 -07:00
793df1b5cf
feat: saved recipes, recipe browser, and recipe detail panel
...
- Saved recipes: save/unsave, star rating, notes, tags, collections (migrations 018-020)
- Recipe browser: domain/category browsing with pantry match badges, pagination
- Recipe detail panel: full directions, ingredient checklist, swap candidates, prep notes
- Grocery links: affiliate links for missing ingredients
- Nutrition filters and display chips on recipe cards
- Bookmark toggle persisted to saved_recipes table
- Tier gates on saved recipes (paid) and collections (premium)
- Browser telemetry for domain/category click tracking
- Cloud compose: CLOUD_DATA_ROOT volume mount for per-user SQLite trees
- manage.sh: cf-orch agent sidecar in local stack
- README: updated feature list and stack description
2026-04-08 14:35:02 -07:00
1a493e0ad9
feat: recipe engine — assembly templates, prep notes, FTS fixes, texture backfill
...
- Assembly template system (13 templates: burrito, fried rice, omelette, stir fry,
pasta, sandwich, grain bowl, soup/stew, casserole, pancakes, porridge, pie, pudding)
with role-based matching, whole-word single-keyword guard, deterministic titles
via MD5 pantry hash
- Prep-state stripping: strips 'melted butter' → 'butter' for coverage checks;
reconstructs actionable states as 'Before you start:' cooking instructions
(NutritionPanel prep_notes field + RecipesView.vue display block)
- FTS5 fixes: always double-quote all terms; strip apostrophes to prevent
syntax errors on brands like "Stouffer's"; 'plant-based' → bare 'based' crash
- Bidirectional synonym expansion: alt-meat, alt-chicken, alt-beef, alt-pork
mapped to canonical texture class; pantry expansion covers 'hamburger' from
'burger patties' etc.
- Texture profile backfill script (378K ingredient_profiles rows) with macro-derived
classification in priority order (fatty → creamy → starchy → firm → fibrous →
tender → liquid → neutral); oats/legumes starchy-first fix
- LLM prompt: ban flavoured/sweetened ingredients (vanilla yoghurt) from savoury
- Migrations 014 (nutrition macros) + 015 (recipe FTS index)
- Nutrition estimation pipeline script
- gitignore MagicMock sqlite test artifacts
2026-04-02 22:12:35 -07:00