# Doris Kitchen Pangolin-protected household recipe queue, search, taste learning, and weekly meal-planning app for John and Leanne. ## Purpose This app gives the household a better recipe intake flow than KitchenOwl's native importer: - search the web for recipe ideas in English-first sources - queue suggestions for approval, rejection, or later review - learn household taste from those decisions - manage soft-blacklisted ingredients and avoid terms - import high-confidence approved recipes into KitchenOwl - build weekly meal-plan suggestions that try to reuse ingredients and reduce waste ## Runtime shape - **Repo source:** `home/doris-kitchen` - **Expected live NOMAD runtime:** `/opt/doris-kitchen` - **Expected public path:** `chef.paccoco.com` behind Pangolin auth Do not run production from an agent workspace. ## Current model This first pass uses a JSON-backed state store under `/data/state`. It keeps: - the household taste profile - suggestion queue and decisions - generated meal plans KitchenOwl remains the canonical recipe store after approval/import. ## Household defaults The app seeds the profile with soft avoid terms for: - lamb - mutton - offal - fish - seafood - spicy / overly spicy These are soft blacklists, not hard bans. Search and suggestion scoring pushes them down or hides them by default, but the household can toggle them on and off later. ## Features ### Suggestion queue - `Yes, add to KitchenOwl` approves the recipe, records the preference signal, and imports it when the recipe is not already present. - `Save for later` keeps the suggestion in the queue without teaching a dislike. - `No thanks` teaches a household dislike signal from the recipe's ingredients and tags. ### Search Search runs through English-first recipe results, then normalizes recipe payloads into a KitchenOwl-friendly structure before showing them in the queue. ### Weekly planning The planner starts from anchor meal ideas and recent approved recipes, then suggests a week that reuses overlapping ingredients where possible. ## Local run ```bash cd /home/fizzlepoof/repos/truenas-stacks/home/doris-kitchen cp .env.example .env bin/run-local.sh ``` ## Deploy shape ```bash sudo mkdir -p /opt/doris-kitchen/data sudo rsync -a --delete --exclude '.env' --exclude 'data/' /home/fizzlepoof/repos/truenas-stacks/home/doris-kitchen/ /opt/doris-kitchen/ cd /opt/doris-kitchen sudo cp .env.nomad.example .env # edit .env sudo docker compose --env-file .env config sudo docker compose --env-file .env up -d --build ``` ## Verification ```bash curl -fsS http://127.0.0.1:8092/api/health curl -fsS http://127.0.0.1:8092/api/dashboard/summary ```