# 🍽️ **Meal Planner & Grocery Master Template** – Premium Edition  

> **Designed for busy families, health‑conscious professionals, and anyone who wants a complete, end‑to‑end meal‑planning system in Notion.**  
> All databases are fully relational, include ready‑to‑use formulas, and come with polished views that turn a weekly plan into a grocery‑free, budget‑tracked, and nutrition‑aware routine.

---

## 1️⃣ Dashboard Overview (Full‑page)

| Widget | Description | Notion Setup |
|--------|-------------|--------------|
| **Weekly Meal Snapshot** | Linked **Table** view of *Weekly Meal Planner* filtered to the current week. Shows day, meal type, recipe thumbnail, and status icons. | `Add a linked database → Weekly Meal Planner → Filter: Date is within this week → Hide unnecessary columns → Rename “Weekly Meal Snapshot”. |
| **Grocery List Summary** | Linked **Board** view of *Master Grocery List* filtered to “Needed”. Columns = Category (Produce, Protein, etc.). Shows quantity, unit, and “In Stock?” checkbox. | Same steps as above, filter `In Stock? = unchecked`. |
| **Prep Timer** | Embedded timer widget for batch‑cooking (e.g., **Timer for Notion**). | `/embed → Paste widget URL`. |
| **Budget Tracker** | Inline **Formula** showing total projected grocery spend for the week. | Add a **Formula** block: `prop("Weekly Grocery Spend")`. |
| **Nutrition Dashboard** | Quick‑look at total calories, protein, carbs, and fat for the week. | Use rollups from *Master Grocery List* (see Section 4). |
| **Quick Links** | Buttons to duplicate the weekly planner, add a new recipe, or open the inventory. | Use **Template Buttons** (see Section 9). |

> **Tip:** Pin this page to the sidebar and set it as your workspace “Home” for one‑click access each morning.

---

## 2️⃣ Weekly Meal Planner *(Database – Full‑page)*  

| Property | Type | Description | Example |
|----------|------|-------------|---------|
| **Date** | Date | Day of the meal (use “Date” with no time). | `2024‑07‑01` |
| **Meal Type** | Select | `Breakfast`, `Lunch`, `Dinner`, `Snack`. | `Dinner` |
| **Recipe** | Relation → **Recipe Library** (many‑to‑many) | Links to the recipe(s) used for this slot. | *One‑Pot Chili* |
| **Servings** | Number | Number of servings you intend to make. | `4` |
| **Prep Time** | Number (min) | Estimated prep minutes. | `15` |
| **Cook Time** | Number (min) | Estimated cooking minutes. | `30` |
| **Status** | Select | `Planned`, `Shopping`, `Cooking`, `Done`, `Skipped`. | `Planned` |
| **Leftovers?** | Checkbox | If checked, automatically creates a duplicate entry for the next day’s lunch. | ✅ |
| **Notes** | Text | Quick notes (e.g., “use leftover quinoa”). | `Add extra cilantro` |
| **Total Cost** | Rollup (from Recipe → Ingredients → Quantity × Avg Price) | Auto‑calculated weekly cost per meal. | `$12.45` |
| **Total Calories** | Rollup (from Recipe → Ingredients → Quantity × Calories) | Auto‑calculated calories per meal. | `850 kcal` |

### Views (create in Notion)

| View | Type | Filters / Sorts | Columns displayed |
|------|------|----------------|-------------------|
| **Calendar** | Calendar | – | Date, Meal Type, Recipe (thumbnail), Status |
| **Board – Status** | Board | – | Group by **Status** (Planned, Shopping, Cooking, Done) |
| **Table – All Meals** | Table (default) | Sort by **Date** ↑, **Meal Type** ↑ | Date, Meal Type, Recipe, Servings, Status, Total Cost |
| **Weekly Summary** | Table (filtered) | Filter: `Date` within this week | Date, Meal Type, Recipe, Servings, Status |
| **Leftovers Queue** | List | Filter: `Leftovers?` = checked | Date, Meal Type, Recipe, Servings |

> **Automation Hint:** Set a Notion **Automation** (via Zapier or Make) that watches the **Status** property. When it changes to **Shopping**, copy the linked ingredients into *Master Grocery List* (see Section 4).

---

## 3️⃣ Recipe Library *(Database – Full‑page)*  

| Property | Type | Description | Example |
|----------|------|-------------|---------|
| **Name** | Title | Recipe title. | `One‑Pot Chili` |
| **Photo** | Files & media | Dish photo (optional). | 📎 |
| **Category** | Multi‑select | `Comfort`, `Vegetarian`, `Low‑Carb`, etc. | `Comfort` |
| **Source URL** | URL | Link to original recipe (blog, PDF). | `https://example.com/chili` |
| **Ingredients** | Relation → **Ingredient Master** (many‑to‑many) | List of ingredients needed. | *Chicken breast*, *Black beans* |
| **Ingredient Qty** | Number (per serving) | Quantity per single serving (same unit as Ingredient Master). | `0.25` |
| **Unit** | Select | Unit of measure (lb, oz, cup, tbsp, etc.). | `lb` |
| **Instructions** | Text (or toggle list) | Step‑by‑step cooking directions. | `1. Sauté onions…` |
| **Prep Time** | Number (min) | Total prep minutes (auto‑filled from planner). | `15` |
| **Cook Time** | Number (min) | Total cook minutes. | `30` |
| **Total Servings** | Number | Default yield of the recipe. | `4` |
| **Nutrition – Calories** | Number | Calories per serving. | `250` |
| **Nutrition – Protein** | Number | Grams of protein per serving. | `20` |
| **Nutrition – Carbs** | Number | Grams of carbs per serving. | `30` |
| **Nutrition – Fat** | Number | Grams of fat per serving. | `8` |
| **Avg Price per Unit** | Rollup → **Ingredient Master** → `Avg Price per Unit` (average) | Shows average cost for the ingredient list. | `$3.99 / lb` |
| **Rating** | Select | `★`, `★★`, `★★★`, `★★★★`, `★★★★★`. | `★★★★` |
| **Tags** | Multi‑select | Dietary tags: `Gluten‑Free`, `Vegan`, `Dairy‑Free`, etc. | `Gluten‑Free` |

### Views

| View | Type | Filters / Sorts | Columns |
|------|------|----------------|---------|
| **Gallery – All Recipes** | Gallery | – | Photo, Name, Category, Rating |
| **Table – By Category** | Table | Group by **Category** | Name, Prep Time, Cook Time, Rating |
| **Board – Tags** | Board | Group by **Tags** | Name, Rating |
| **Nutrition Summary** | Table (filtered) | Filter: `Nutrition – Calories` > 0 | Name, Calories, Protein, Carbs, Fat |
| **Quick Add** | List | – (used for template button) | Name, Category, Tags |

---

## 4️⃣ Master Grocery List *(Database – Full‑page)*  

| Property | Type | Description | Example |
|----------|------|-------------|---------|
| **Item** | Relation → **Ingredient Master** (many‑to‑many) | Ingredient name. | *Chicken breast* |
| **Category** | Rollup → Ingredient Master → `Category` | Auto‑filled from Ingredient Master. | `Protein` |
| **Quantity Needed** | Formula | `sum(Weekly Meal Planner → Ingredient Qty × Servings)` | `1.5` |
| **Unit** | Rollup → Ingredient Master → `Unit` | Auto‑filled. | `lb` |
| **In Stock?** | Checkbox | Tick when you already have the item at home. | ✅ |
| **Needed By** | Date | Earliest date the ingredient appears in a meal. | `2024‑07‑01` |
| **Avg Price per Unit** | Rollup → Ingredient Master → `Avg Price per Unit` | Shows price for budgeting. | `$3.99 / lb` |
| **Projected Cost** | Formula | `prop("Quantity Needed") * prop("Avg Price per Unit")` (use numeric price only) | `$5.99` |
| **Notes** | Text | Store brand, sale info, etc. | `Buy organic if on sale` |

### Views

| View | Type | Filters / Sorts | Columns |
|------|------|----------------|---------|
| **Table – Needed** | Table | Filter: `In Stock?` = unchecked | Item, Quantity Needed, Unit, Needed By, Projected Cost |
| **Board – By Category** | Board | Group by **Category** | Item, Quantity Needed, In Stock?, Needed By |
| **Calendar – Purchase Dates** | Calendar | – (date = Needed By) | Item, Quantity Needed, Projected Cost |
| **Budget Summary** | Table (grouped) | Group by **Category** | Sum of `Projected Cost` per category |
| **Low‑Stock Alerts** | List | Filter: `Quantity Needed` > 0 AND `In Stock?` = unchecked | Item, Quantity Needed, Needed By |

> **Formula Note:** To keep the price numeric for calculations, store `Avg Price per Unit` in the **Ingredient Master** as a **Number** (e.g., `3.99`) and keep the unit (lb, oz) in a separate **Select** property.

---

## 5️⃣ Ingredient Master *(Database – Full‑page)*  

| Property | Type | Description | Example |
|----------|------|-------------|---------|
| **Name** | Title | Ingredient name. | `Chicken breast` |
| **Category** | Select | `Protein`, `Produce`, `Grains`, `Dairy`, `Pantry`, `Spices`, etc. | `Protein` |
| **Unit** | Select | Primary purchase unit (lb, oz, kg, piece, can, etc.). | `lb` |
| **Avg Price per Unit** | Number | Average market price (numeric). | `3.99` |
| **Price Source** | URL | Link to price reference (e.g., store flyer). | `https://store.com/flyer` |
| **Calories per Unit** | Number | Calories per unit (same unit as **Unit**). | `165` |
| **Protein per Unit** | Number | Grams of protein per unit. | `31` |
| **Carbs per Unit** | Number | Grams of carbs per unit. | `0` |
| **Fat per Unit** | Number | Grams of fat per unit. | `3.6` |
| **Allergen Info** | Multi‑select | `Dairy`, `Gluten`, `Nuts`, `Shellfish`, etc. | `None` |
| **Notes** | Text | Storage tips, brand preferences. | `Free‑range preferred` |

### Views

| View | Type | Filters / Sorts | Columns |
|------|------|----------------|---------|
| **Table – Master** | Table (default) | – | Name, Category, Unit, Avg Price per Unit |
| **Board – By Category** | Board | Group by **Category** | Name, Avg Price per Unit |
| **Gallery – Quick Lookup** | Gallery | – | Name, Photo (optional), Category |
| **Nutrition Rollup** | Table (filtered) | Filter: `Calories per Unit` > 0 | Name, Calories per Unit, Protein per Unit, Carbs per Unit, Fat per Unit |

---

## 6️⃣ Inventory Tracker *(Database – Inline on Dashboard)*  

| Property | Type | Description |
|----------|------|-------------|
| **Item** | Relation → **Ingredient Master** |
| **Quantity On Hand** | Number |
| **Unit** | Rollup → Ingredient Master → `Unit` |
| **Last Purchased** | Date |
| **Expiration** | Date |
| **In Use?** | Checkbox (auto‑checked when linked to a meal) |
| **Notes** | Text |

> **Rollup Formula:** `if(prop("Expiration") < now(), "⚠️ Expired", "✅ Fresh")` (add as a **Formula** column).

### Views

| View | Type | Filters |
|------|------|---------|
| **Current Stock** | Table | Filter: `Quantity On Hand` > 0 |
| **Expiring Soon** | List | Filter: `Expiration` ≤ dateAdd(now(), 7, "days") |
| **Low Stock** | List | Filter: `Quantity On Hand` < `Quantity Needed` (from Master Grocery List) |

---

## 7️⃣ Meal Prep Scheduler *(Database – Inline on Dashboard)*  

| Property | Type | Description |
|----------|------|-------------|
| **Meal** | Relation → **Weekly Meal Planner** |
| **Prep Date** | Date (date only) |
| **Start Time** | Date (time) |
| **End Time** | Formula: `dateAdd(prop("Start Time"), prop("Prep Time") + prop("Cook Time"), "minutes")` |
| **Timer Embed** | URL (embed widget) |
| **Status** | Select: `Scheduled`, `In‑Progress`, `Completed` |
| **Notes** | Text |

### Views

| View | Type | Filters |
|------|------|---------|
| **Today’s Prep** | Calendar | Filter: `Prep Date` = today |
| **Week‑wide Timeline** | Timeline | Group by **Meal** → Show start/end times |
| **Completed** | List | Filter: `Status` = `Completed` |

---

## 8️⃣ Meal Archive & Notes *(Database – Full‑page)*  

| Property | Type | Description |
|----------|------|-------------|
| **Date** | Date |
| **Recipe** | Relation → **Recipe Library** |
| **Rating** | Select (`★`‑`★★★★★`) |
| **Modifications** | Text |
| **Photo** | Files & media |
| **Leftovers Used?** | Checkbox |
| **Total Cost** | Rollup → *Master Grocery List* → `Projected Cost` (sum) |
| **Total Calories** | Rollup → *Master Grocery List* → `Calories` (sum) |
| **Week Ref** | Relation → **Weekly Meal Planner** (link to the week it belonged to) |

### Views

| View | Type | Filters / Sorts |
|------|------|-----------------|
| **Gallery – Top Rated** | Gallery | Sort by **Rating** ↓ |
| **Table – All** | Table | Sort by **Date** ↓ |
| **Nutrition Log** | Table | Show **Total Calories**, **Total Cost** |
| **Leftovers** | List | Filter: `Leftovers Used?` = checked |

---

## 9️⃣ Automation & Template Buttons  

### 9.1 Weekly Planner Duplicate Button (placed on Dashboard)

```
/template
Button: “Create New Week”
Create a new page → Duplicate → Weekly Meal Planner
Set the page title to “Week of {dateAdd(now(), 7, "days")}”
Copy the linked views (Snapshot, Grocery Summary) to the new page automatically.
```

### 9.2 New Recipe Button (on Dashboard)

```
/template
Button: “Add New Recipe”
Create a new page → New entry in Recipe Library
Pre‑fill fields: Category = “Uncategorized”, Tags = empty.
```

### 9.3 Leftovers Automation (via Notion Formula)

In **Weekly Meal Planner** → **Leftovers?** checkbox triggers a **Formula** in a hidden “Next Lunch” relation:

```
if(prop("Leftovers?"),
   relation("Weekly Meal Planner").filter(
      date(prop("Date")) + 1 day && prop("Meal Type") == "Lunch"
   ),
   empty
)
```

*(If you use Zapier/Make, you can also copy the recipe to the next day automatically.)*

### 9.4 Grocery Auto‑Populate (Zapier example)

1. **Trigger:** When a **Weekly Meal Planner** row changes to **Status = Shopping**.  
2. **Action:** For each linked **Recipe → Ingredients**, create (or update) a row in **Master Grocery List** with the calculated `Quantity Needed`.  
3. **Result:** No manual entry – the grocery list always reflects the upcoming meals.

---

## 🔧 Setup Guide – Import & Configure (Step‑by‑Step)

1. **Create a new page** in your workspace → name it **Meal Planner & Grocery Master**.  
2. Click **Import → Markdown & CSV**, select this `.md` file. Notion will generate headings and plain tables.  
3. For each table: click the three‑dot menu ► **Turn into → Database – Full‑page** (or **Inline** where noted). Rename them exactly as listed above.  
4. **Add the properties** exactly as shown (type matters – use **Select**, **Multi‑select**, **Relation**, **Rollup**, **Formula**, **Checkbox**, **Number**, **Date**, **Files & media**, **URL**, **Text**).  
5. **Create the Views**: use the “Add a view” button, select the view type, then apply the filters/sorts/columns described in each section.  
6. **Set up Relations & Rollups**:  
   - *Weekly Meal Planner* → **Recipe** (Relation to **Recipe Library**).  
   - *Recipe Library* → **Ingredients** (Relation to **Ingredient Master**).  
   - *Master Grocery List* → **Item** (Relation to **Ingredient Master**).  
   - Add Rollups for **Avg Price per Unit**, **Calories**, **Protein**, etc., pulling from the related ingredient rows.  
7. **Configure Formulas**: copy the exact formula strings from the tables (e.g., `dateAdd(prop("Start Time"), prop("Prep Time") + prop("Cook Time"), "minutes")`).  
8. **Add the Dashboard Widgets**: on the Dashboard page, type `/linked` to add each linked database view, then hide unwanted columns.  
9. **Insert the Timer widget**: `/embed` → paste the URL from your preferred timer service (e.g., https://timer.notion.site).  
10. **Create the Template Buttons** (Section 9) by typing `/template` and following the prompts.  
11. **Test the workflow**:  
    - Set a Monday dinner’s **Status** to *Shopping* → verify ingredients appear in **Master Grocery List**.  
    - Mark items **In Stock?** → ensure they disappear from the “Needed” view.  
    - Run a batch prep session → check the **Meal Prep Scheduler** timeline updates.  
12. **Duplicate the Dashboard** for each new week using the “Create New Week” button.  

> **You’re all set!** This template now handles meal planning, grocery budgeting, inventory management, nutrition tracking, and recipe archiving—all with a single click. Enjoy stress‑free meals and smarter grocery spending.