# 🍽️ Premium Recipe Box & Meal Planner – Full‑Feature Notion Template  

> **All sections are ready‑to‑copy‑paste.** After importing, click **Turn into database** on each table, add the listed properties, and create the views exactly as shown. The template works out‑of‑the‑box for single‑user or family teams.

---  

## 1️⃣ Dashboard – Live Insights & One‑Click Actions  

| Widget | Type | Formula / Embed | Description |
|--------|------|----------------|-------------|
| **Weekly Budget Tracker** | Progress Bar (Formula) | `if(prop("Weekly Budget") == 0, 0, (prop("Weekly Budget") - prop("Spent")) / prop("Weekly Budget"))` | Shows remaining grocery budget (green → red). |
| **Calorie Target** | Progress Bar (Formula) | `if(prop("Daily Calorie Goal") == 0, 0, (prop("Daily Calorie Goal") - prop("Today Calories")) / prop("Daily Calorie Goal"))` | Auto‑updates from the **Weekly Planner** rollup. |
| **Cuisine Diversity Heat‑Map** | Embedded Google Sheet (read‑only) | `https://docs.google.com/spreadsheets/d/…/pub?output=html` | Visual heat‑map of cuisines cooked this month (auto‑filled via Zapier). |
| **Shopping List → Instacart** | Button | `https://www.instacart.com/v3/checkout?list_id={{Shopping List.id}}` | One‑click export of the current **Shopping List** to Instacart (replace `{{Shopping List.id}}` with the page URL). |
| **Import Recipe** | Button (Zapier webhook) | `https://zapier.com/hooks/catch/123456/abcde?url={{url}}` | Paste a URL from Allrecipes, Food.com, etc.; Zapier parses ingredients, nutrition & instructions into the **Recipes** DB. |
| **Team Activity Feed** | Linked view (Comments) | `Comments` (Relation to **Recipes**) | Shows latest comment threads from family members. |
| **Today’s Meal** | Linked view (Weekly Planner) | Filter: `Date = today()` | Quick glance at today’s dinner/lunch. |
| **Upcoming Meals** | Calendar view (Weekly Planner) | Show next 7 days | Visual schedule. |

**How to add the progress‑bar widgets**  
1. Insert a **Formula** property in the **Dashboard** page (e.g., `Budget Progress`).  
2. Set the formula as above.  
3. Turn the property into a **Progress Bar** via the property type dropdown.  

**One‑click Instacart button** – after you create the **Shopping List** page, copy its URL and replace `{{Shopping List.id}}` in the button link.  

---  

## 2️⃣ Recipes Database – Core Repository  

| Column | Type | Formula / Rollup | Notes |
|--------|------|------------------|-------|
| **Name** | Title | – | Primary identifier |
| **Cuisine** | Select | – | e.g., Italian, Indian, Asian |
| **Prep Time** | Number (min) | – | Auto‑calc from instructions (optional) |
| **Cook Time** | Number (min) | – | – |
| **Difficulty** | Select | – | Easy / Medium / Hard |
| **Tags** | Multi‑select | – | Dietary tags (Gluten‑Free, Keto, Vegan…) |
| **Rating (★)** | Number (1‑5) | – | – |
| **Source Link** | URL | – | Original recipe URL |
| **Image** | Files & media | – | Photo of finished dish |
| **Servings** | Number | – | Default portion count |
| **Ingredients** | Relation → **Shopping List** (many) | – | Links each ingredient row |
| **Instructions** | Text (or toggle) | – | Step‑by‑step |
| **Nutrition (per serving)** | Formula (JSON) | `{"cal": prop("Calories"), "prot": prop("Protein"), "carb": prop("Carbs"), "fat": prop("Fat")}` | Stores macro values for easy roll‑up |
| **Calories** | Number | – | kcal per serving |
| **Protein (g)** | Number | – | – |
| **Carbs (g)** | Number | – | – |
| **Fat (g)** | Number | – | – |
| **Macro Scale** | Formula | `if(prop("Servings") == 0, 0, round((prop("Servings") / prop("Base Servings")) * prop("Calories"), 1))` | Auto‑scales macros when **Servings** changes (see **Base Servings** below). |
| **Base Servings** | Number | – | Original recipe’s serving count (set once). |
| **Comments** | Relation → **Comments DB** (many) | – | Enables threaded discussion per recipe. |
| **Permission** | Select | – | Owner / Family / Viewer (used in Notion sharing). |

### Views (create after turning into a DB)

| View | Type | Filters / Sort | Grouping |
|------|------|----------------|----------|
| **All Recipes** | Table | – | – |
| **Favorites** | Table | Filter: `Rating (★) >= 4` | – |
| **By Cuisine** | Gallery | – | Group by **Cuisine** |
| **Macro Summary** | Table | – | Show **Macro Scale** columns |
| **Team Comments** | Table | Filter: `Comments != empty` | – |

---  

## 3️⃣ Weekly Planner – Dynamic Meal Scheduler  

| Column | Type | Formula / Rollup | Notes |
|--------|------|------------------|-------|
| **Date** | Date | – | Calendar day |
| **Meal Type** | Select | – | Breakfast / Lunch / Dinner / Snack |
| **Recipe** | Relation → **Recipes** (single) | – | Links to a recipe |
| **Servings Planned** | Number | – | Overrides recipe default for this slot |
| **Scaled Nutrition** | Rollup (Recipes → Nutrition (per serving)) | `sum(prop("Recipe").prop("Macro Scale") * prop("Servings Planned") / prop("Recipe").prop("Servings"))` | Auto‑calculates total macros for the slot. |
| **Today Calories** | Rollup (Recipes → Calories) | `sum(prop("Scaled Nutrition").prop("cal"))` | Used by Dashboard progress bar. |
| **Notes** | Text | – | Free‑form |
| **Comments** | Relation → **Comments DB** (many) | – | Family discussion per meal. |

### Views

| View | Type | Filters / Grouping |
|------|------|--------------------|
| **Calendar** | Calendar (by **Date**) | – |
| **Table – By Meal Type** | Table | Group by **Meal Type** |
| **Kanban – Upcoming** | Kanban | Group by **Date** (cards) |
| **Macro Tracker** | Table | Show **Scaled Nutrition** columns; sum at bottom. |

---  

## 4️⃣ Shopping List – Smart Aggregation & Unit Normalisation  

| Column | Type | Formula / Rollup | Notes |
|--------|------|------------------|-------|
| **Ingredient** | Title | – | e.g., “Flour” |
| **Quantity** | Number | – | Raw amount entered by recipe |
| **Unit** | Select | – | tsp, tbsp, cup, g, ml, pcs |
| **Conversion to Base** | Formula | `if(prop("Unit") == "cup", prop("Quantity") * 240, if(prop("Unit") == "tbsp", prop("Quantity") * 15, if(prop("Unit") == "tsp", prop("Quantity") * 5, if(prop("Unit") == "g", prop("Quantity"), if(prop("Unit") == "ml", prop("Quantity"), prop("Quantity")))))` | Converts everything to **ml** (liquid) or **g** (dry) for aggregation. |
| **Base Unit** | Formula | `if(prop("Unit") in ["cup","tbsp","tsp","ml"], "ml", "g")` | Helper for grouping. |
| **Aggregated Qty** | Rollup (Relation → **Weekly Planner**) | `sum(prop("Conversion to Base"))` | Sums across all linked meals. |
| **Display Qty** | Formula | `if(prop("Base Unit") == "ml", round(prop("Aggregated Qty")/240,2) + " cup", round(prop("Aggregated Qty")/1000,2) + " kg")` | Human‑readable total after conversion. |
| **Needed For** | Relation → **Weekly Planner** (many) | – | Shows which meals require the ingredient. |
| **Category** | Select | – | Produce, Meat, Dairy, Pantry, Spices, Frozen |
| **Purchased** | Checkbox | – | Tick when bought |
| **Store** | Text | – | Preferred shop (Instacart, Amazon Fresh…) |
| **Comments** | Relation → **Comments DB** (many) | – | Quick notes (e.g., “buy organic”). |

### Views

| View | Type | Filters / Grouping |
|------|------|--------------------|
| **Grouped by Category** | Table | Group by **Category** |
| **To Order** | Table | Filter: `Purchased == false` |
| **Instacart Export** | Table | Show only columns needed for API (Ingredient, Display Qty, Store). |
| **Unit‑Conversion Debug** | Table | Show **Conversion to Base** & **Aggregated Qty**. |

---  

## 5️⃣ Meal Prep & Freezer Inventory  

### 5.1 **Prep‑Day Board** (Kanban)

| Column | Type | Formula |
|--------|------|---------|
| **Task** | Title | – |
| **Recipe** | Relation → **Recipes** | – |
| **Prep Date** | Date | – |
| **Batch Size** | Number | – |
| **Freezer Slot** | Relation → **Freezer Stock** | – |
| **Status** | Select | To‑Do / In‑Progress / Done |
| **Notes** | Text | – |
| **Comments** | Relation → **Comments DB** | – |

**Views**  
- **Kanban – Prep Day** (group by **Status**)  
- **Table – Upcoming Prep** (filter `Prep Date >= today()`)

### 5.2 **Freezer Stock** (Database)

| Column | Type | Formula / Rollup |
|--------|------|------------------|
| **Item** | Title | – |
| **Quantity** | Number | – |
| **Unit** | Select | g / ml / pcs |
| **Source Recipe** | Relation → **Recipes** | – |
| **Stored Since** | Date | – |
| **Best‑Before** | Date | – |
| **Notes** | Text | – |
| **Comments** | Relation → **Comments DB** | – |

**Views**  
- **Grid – Current Stock** (group by **Best‑Before**)  
- **Table – Low Stock** (filter `Quantity < 2`)  

---  

## 6️⃣ Comments & Collaboration Hub  

| Database | Purpose |
|----------|---------|
| **Comments DB** | Stores threaded comments. Fields: **Author** (Person), **Date** (Created time), **Content** (Text), **Linked Item** (Relation → Recipes / Weekly Planner / Shopping List / Prep‑Day). |

*Enable Notion sharing:*  
- Invite family members to the workspace.  
- Set page permissions: **Can edit** for “Family” group, **Can view** for “Guests”.  
- Use the **Comments** relation to keep discussions attached to the right item.  

---  

## 7️⃣ Settings & Templates  

| Property | Type | Default |
|----------|------|---------|
| **Meal Types** | Multi‑select (global) | Breakfast, Lunch, Dinner, Snack |
| **Difficulty Levels** | Multi‑select | Easy, Medium, Hard |
| **Daily Calorie Goal** | Number | 2000 |
| **Weekly Budget** | Number | 150 |
| **Preferred Stores** | Multi‑select | Instacart, Amazon Fresh, Local Market |
| **Template Recipes** | Relation → **Recipes** (many) | Pre‑filled “Quick Weeknight”, “Meal‑Prep Sunday” |

**Template Pages** (duplicate & edit)  

- **Quick Weeknight** – a recipe with < 30 min total time, linked to a one‑day planner entry.  
- **Meal‑Prep Sunday** – a set of 4 recipes, each with a **Prep‑Day** task and freezer slots pre‑filled.  

---  

## 8️⃣ Automation & External Integrations  

| Integration | Trigger | Action | How to Set Up |
|-------------|---------|--------|---------------|
| **Recipe Import (Allrecipes / Food.com)** | Button click → Zapier webhook (`https://zapier.com/hooks/catch/123456/abcde`) | Zapier “Webhooks → Parse Recipe” → Create new **Recipes** entry (fills Ingredients, Nutrition, Instructions). | 1. Create a Zap with **Webhooks by Zapier** (Catch Hook). 2. Add “Parse Recipe” step (use **Parseur** or **Apify**). 3. Map fields to Notion (use **Notion** action). 4. Copy the webhook URL into the **Import Recipe** button. |
| **Shopping List → Instacart** | Button click (Dashboard) | Open Instacart checkout with pre‑filled list (URL includes item & qty). | Replace `{{Shopping List.id}}` in the button link with the actual page URL. |
| **Amazon Fresh Export** | Button click (Dashboard) | Send CSV of **Shopping List** to a Google Sheet; Google Sheet’s script creates an Amazon Fresh order link. | 1. Create a Google Sheet with a script that reads the CSV and builds the URL. 2. Use Zapier “Notion → Google Sheets” to push the list. 3. Button URL points to the Sheet’s “Create Order” link. |
| **Weekly Macro Dashboard Refresh** | Nightly (Zapier) | Roll up **Weekly Planner** macros → update **Dashboard** progress bars. | Use Zapier “Notion → Update Database Item” to write summed macro values to hidden properties on the Dashboard page. |
| **Cuisine Heat‑Map Auto‑Update** | Daily (Make.com) | Count recipes per cuisine → write to Google Sheet → embed in Dashboard. | Build a Make scenario: **Search Objects → Notion**, aggregate by **Cuisine**, write to Sheet, publish embed link. |
| **Unit‑Conversion Script** | On‑demand (Button) | Re‑run the **Conversion to Base** formula for all items (use Notion API + small Node script). | Provide a **Refresh Units** button that calls a hosted script (e.g., Vercel) which PATCHes each row’s **Conversion to Base** property. |

---  

## 9️⃣ How to Import This Template into Notion  

1. **Import** → **Markdown & CSV** → select this `.md` file.  
2. For each table (Recipes, Weekly Planner, Shopping List, Prep‑Day Board, Freezer Stock, Comments DB) click the three‑dot menu → **Turn into database**.  
3. Add **all listed properties** (exact names & types).  
4. Create the **views** exactly as described (type, grouping, filters).  
5. Set up the **Relations**:  
   - Recipes ↔ Shopping List (Ingredients)  
   - Weekly Planner ↔ Recipes (Recipe)  
   - Weekly Planner ↔ Shopping List (Needed For)  
   - Prep‑Day Board ↔ Recipes (Recipe) & ↔ Freezer Stock (Freezer Slot)  
   - Comments DB ↔ any of the above (Linked Item).  
6. **Copy the Dashboard button URLs** (Instacart, Import Recipe) and replace placeholder IDs with your actual page URLs.  
7. **Enable sharing** for family members (top‑right → Share → Invite). Assign the appropriate **Permission** tag in the Recipes DB.  
8. **Connect Zapier / Make** integrations using the webhook URLs provided in the buttons.  
9. **Test**: import a recipe via the **Import Recipe** button, change the **Servings** on a Weekly Planner entry, and watch the macros and Shopping List quantities update automatically.  

Your **Premium Recipe Box & Meal Planner** is now fully functional, collaborative, and ready for professional‑grade meal planning. Enjoy seamless cooking, budgeting, and family teamwork!