# 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
```
