Files
Meal-Planner/meal-planner-plan.md
T
admin 0c5b0aa5ed docs: add complete project documentation
- SPEC.md: project specification and goals
- ARCHITECTURE.md: system design and component descriptions
- database-schema.md: PostgreSQL schema with all tables
- implementation-plan.md: 12-phase implementation guide
- RUNNING.md: deployment and troubleshooting guide
- ORIENTATION.md: context compaction recovery guide
- README.md: project overview and quick start

Family profile: 2 adults, 2 children. Mushroom avoidance for 3/4.
Approval workflow: email proposals, one denial swaps meal.
Tech stack: FastAPI, PostgreSQL, React, Playwright, SendGrid.
2026-05-04 19:27:22 -07:00

96 lines
4.5 KiB
Markdown

# Meal Planner System
## Goal
Self-hosted meal planning system that sources ingredients from Lucky California sales, generates weekly meal plans, sends approval requests to you and your wife via email, and creates actionable shopping lists.
## Architecture
```
┌─────────────────────────────────────────────────────────┐
│ MealPlanner App │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Scraper │ │ Recipe │ │ Meal │ │ Notif. │ │
│ │ Service │ │ Engine │ │ Planner │ │ Service │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │ │
│ ┌────┴─────────────┴─────────────┴─────────────┴────┐ │
│ │ PostgreSQL Database │ │
│ └───────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
Lucky California SendGrid Email Web UI (React)
(scraper) / Twilio WA (local + reverse proxy)
```
## Tech Stack
- **Backend**: Python/FastAPI
- **Database**: PostgreSQL
- **Frontend**: React + Tailwind CSS
- **Scraping**: Playwright for Lucky California
- **Email**: SendGrid
- **Image Gen**: AI (on-demand fallback only)
- **Hosting**: Docker Compose + reverse proxy
## Project Structure
```
mealplanner/
├── docker-compose.yml
├── backend/
│ ├── app/
│ │ ├── main.py
│ │ ├── scraper/
│ │ │ ├── lucky_ca.py
│ │ │ └── recipe_scraper.py
│ │ ├── models/
│ │ ├── api/
│ │ └── services/
│ └── requirements.txt
└── frontend/
├── src/
└── package.json
```
## Tasks
### Phase 1: Foundation
- [ ] Set up Docker Compose with PostgreSQL, backend, frontend services
- [ ] Create PostgreSQL schema (recipes, meal_plans, family_profiles, home_items, feedback)
- [ ] Build FastAPI skeleton with basic CRUD endpoints
- [ ] Set up reverse proxy (nginx or Caddy) for local + remote access
### Phase 2: Scraping
- [ ] Build Lucky California scraper (weekly ad + product catalog)
- [ ] Scrape recipe images from public recipe sites (NYT, AllRecipes, etc.) as primary image source
- [ ] Store scraped data in PostgreSQL
### Phase 3: Recipe & Meal Engine
- [ ] Recipe database with ingredient tags, dietary info, cuisine types
- [ ] Meal planner that selects meals based on: family profile (mushroom avoidance), budget, seasonal ingredients, variety
- [ ] "Never suggest" and rating feedback loop to train preferences
- [ ] Incorporate home pantry items as constraints
### Phase 4: Notifications & Approval
- [ ] SendGrid email integration for weekly meal approval
- [ ] Approval workflow: meal proposed → email to both → one deny = swap meal
- [ ] Email contains: meal name, image, ingredients, cooking time
- [ ] Store approval/denial history for learning
### Phase 5: Shopping List & UI
- [ ] Generate weekly shopping list grouped by Lucky California aisle/sales
- [ ] React web UI for family members to: view meals, approve/deny, adjust home pantry items, view recipes
- [ ] Print-friendly recipe view
- [ ] Feedback mechanism ("Never suggest this", "Loved it", etc.)
### Phase 6: Polish
- [ ] AI image generation as fallback when scraped images unavailable
- [ ] Meal variety analysis (sauce/ingredient rhythm detection)
- [ ] Budget tracking and optimization
## Done When
- [ ] Family receives email each week with proposed meals
- [ ] Shopping list reflects actual Lucky California sales and in-season items
- [ ] Home pantry items influence meal suggestions
- [ ] Web UI accessible to non-technical family members
- [ ] System learns from feedback over time