# Meal Planner

Self-hosted meal planning system that integrates with Lucky California grocery store, sends weekly meal proposals via email to family members, generates shopping lists, and learns from feedback.

## Background

This project was born out of frustration with meal kit services (Blue Apron → EveryPlate → HungryRoot → Sunbasket) that:
- Escalate costs to 3x ingredient markup
- Fall into repetitive meal rhythms
- Force users to log into apps to manage selections
- Don't integrate with home pantry items

## Features

- **Grocery Integration**: Scrapes Lucky California weekly ads and sales
- **Family Approval Workflow**: Email proposals with approve/deny; one denial swaps the meal
- **Shopping List Generation**: Weekly list grouped by store aisles, highlighting sales, with interactive checkboxes to track purchased items
- **Pantry Integration**: Specify home items to incorporate into suggestions
- **Web UI**: Modern interface for the whole family
- **Learning**: Feedback-based meal recommendations, with weekly auto-discovery of new recipes from external APIs when family preferences are signaled
- **Recipe Images**: Scraped from public recipe sites, AI fallback available
- **Unit Conversion**: Converts recipe quantities (cups, tbsp, lb) to grocery units for accurate cost estimates

## Architecture

- **Backend**: Python/FastAPI
- **Database**: PostgreSQL
- **Frontend**: React + Tailwind CSS
- **Email**: SendGrid
- **Hosting**: Docker Compose with nginx reverse proxy

## Documentation

- [Project Specification](docs/SPEC.md)
- [Architecture](docs/ARCHITECTURE.md)
- [Database Schema](docs/database-schema.md)
- [Implementation Plan](docs/implementation-plan.md)
- [Running Guide](docs/RUNNING.md)

## Quick Start

```bash
# Clone and start
docker-compose up -d

# View logs
docker-compose logs -f

# Stop
docker-compose down
```

## Family Profile

Household: 2 adults, 2 children
- One adult likes mushrooms, one child OK with them
- Three family members do NOT like mushrooms
- No allergies
- Calorie, budget, and health conscious eating

## Approval Workflow

1. System generates 7-day meal plan based on sales, dietary constraints, budget, variety
2. Email sent to both adults with meal previews
3. One denial = meal swapped; no denials = auto-approved
4. Shopping list generated after approval

## Tech Stack

| Component | Technology |
|-----------|------------|
| Backend | Python 3.11, FastAPI |
| Database | PostgreSQL 15 |
| Frontend | React 18, TypeScript, Tailwind |
| Scraping | Playwright, BeautifulSoup |
| Email | SendGrid |
| Hosting | Docker Compose, nginx |
