{ "id": "11", "name": "What To Eat", "nodes": [ { "name": "Cron", "type": "n8n-nodes-base.cron", "position": [ 100, 400 ], "parameters": { "triggerTimes": { "item": [ { "hour": 10 } ] } }, "typeVersion": 1, "id": "node-83b522fc" }, { "name": "Search Criteria", "type": "n8n-nodes-base.set", "position": [ 300, 400 ], "parameters": { "values": { "number": [ { "name": "RecipeCount", "value": 3 }, { "name": "IngredientCount", "value": 5 }, { "name": "CaloriesMin" }, { "name": "CaloriesMax", "value": 1500 }, { "name": "TimeMin" }, { "name": "TimeMax", "value": 30 } ], "string": [ { "name": "Diet", "value": "balanced" }, { "name": "Health", "value": "random" }, { "name": "SearchItem", "value": "chicken" }, { "name": "AppID", "value": "Enter Your Edamam AppID Here" }, { "name": "AppKey", "value": "Enter Your Edamam AppKey Here" } ] }, "options": {} }, "typeVersion": 1, "id": "node-9c67d2ca" }, { "name": "Set Query Values", "type": "n8n-nodes-base.function", "position": [ 500, 400 ], "parameters": { "functionCode": "items[0].json.calories = items[0].json.CaloriesMin + \"-\" + items[0].json.CaloriesMax;\nitems[0].json.time = items[0].json.TimeMin + \"-\" + items[0].json.TimeMax;\n\nif (items[0].json.Diet.toUpperCase() == \"RANDOM\") {\n arrDiet = [\"balanced\",\"high-fiber\",\"high-protein\",\"low-carb\",\"low-fat\",\"low-sodium\"];\n intRandomNumber = Math.floor(Math.random() * 6);\n items[0].json.Diet = arrDiet[intRandomNumber];\n}\n\nif (items[0].json.Health.toUpperCase() == \"RANDOM\") {\n arrHealth = [\"alcohol-free\",\"immuno-supportive\",\"celery-free\",\"crustacean-free\",\"dairy-free\",\"egg-free\",\"fish-free\",\"fodmap-free\",\"gluten-free\",\"keto-friendly\",\"kidney-friendly\",\"kosher\",\"low-potassium\",\"lupine-free\",\"mustard-free\",\"low-fat-abs\",\"no-oil-added\",\"low-sugar\",\"paleo\",\"peanut-free\",\"pecatarian\",\"pork-free\",\"red-meat-free\",\"sesame-free\",\"shellfish-free\",\"soy-free\",\"sugar-conscious\",\"tree-nut-free\",\"vegan\",\"vegetarian\",\"wheat-free\"];\n intRandomNumber = Math.floor(Math.random() * 31);\n items[0].json.Health = arrHealth[intRandomNumber];\n}\n\nreturn items;" }, "typeVersion": 1, "id": "node-ce0377b6" }, { "name": "Set Recipe ID Values", "type": "n8n-nodes-base.function", "position": [ 1080, 400 ], "parameters": { "functionCode": "items[0].json.from = Math.floor(Math.random() * items[0].json.RecipeCount) + 1;\nitems[0].json.to = items[0].json.from + items[0].json.ReturnCount;\n\nreturn items;" }, "typeVersion": 1, "id": "node-ea8e1a3b" }, { "name": "Retrieve Recipe Counts", "type": "n8n-nodes-base.httpRequest", "position": [ 700, 400 ], "parameters": { "url": "{{ $env.BASE_URL }}", "options": {}, "queryParametersUi": { "parameter": [ { "name": "q", "value": "={{$node[\"Set Query Values\"].json[\"SearchItem\"]}}" }, { "name": "app_id", "value": "={{$node[\"Set Query Values\"].json[\"AppID\"]}}" }, { "name": "app_key", "value": "={{$node[\"Set Query Values\"].json[\"AppKey\"]}}" }, { "name": "ingr", "value": "={{$node[\"Set Query Values\"].json[\"IngredientCount\"]}}" }, { "name": "diet", "value": "={{$node[\"Set Query Values\"].json[\"Diet\"]}}" }, { "name": "calories", "value": "={{$node[\"Set Query Values\"].json[\"calories\"]}}" }, { "name": "time", "value": "={{$node[\"Set Query Values\"].json[\"time\"]}}" }, { "name": "from", "value": "1" }, { "name": "to", "value": "2" } ] } }, "typeVersion": 1, "id": "node-04f8e0f3" }, { "name": "Retrieve Recipes", "type": "n8n-nodes-base.httpRequest", "position": [ 1260, 400 ], "parameters": { "url": "{{ $env.BASE_URL }}", "options": {}, "queryParametersUi": { "parameter": [ { "name": "q", "value": "={{$node[\"Search Criteria\"].json[\"SearchItem\"]}}" }, { "name": "app_id", "value": "={{$node[\"Search Criteria\"].json[\"AppID\"]}}" }, { "name": "app_key", "value": "={{$node[\"Search Criteria\"].json[\"AppKey\"]}}" }, { "name": "from", "value": "={{$node[\"Set Recipe ID Values\"].json[\"from\"]}}" }, { "name": "to", "value": "={{$node[\"Set Recipe ID Values\"].json[\"to\"]}}" }, { "name": "ingr", "value": "={{$node[\"Search Criteria\"].json[\"IngredientCount\"]}}" }, { "name": "diet", "value": "={{$node[\"Search Criteria\"].json[\"Diet\"]}}" }, { "name": "calories", "value": "={{$node[\"Set Query Values\"].json[\"calories\"]}}" }, { "name": "time", "value": "={{$node[\"Set Query Values\"].json[\"time\"]}}" } ] } }, "typeVersion": 1, "id": "node-911fc972" }, { "name": "Set Counts", "type": "n8n-nodes-base.set", "position": [ 880, 400 ], "parameters": { "values": { "number": [ { "name": "RecipeCount", "value": "={{$node[\"Retrieve Recipe Counts\"].json[\"count\"]}}" }, { "name": "ReturnCount", "value": "={{$node[\"Search Criteria\"].json[\"RecipeCount\"]}}" } ] }, "options": {}, "keepOnlySet": true }, "typeVersion": 1, "id": "node-bfbd449d" }, { "name": "Send Recipes", "type": "n8n-nodes-base.emailSend", "position": [ 1660, 400 ], "parameters": { "html": "={{$node[\"Create Email Body in HTML\"].json[\"emailBody\"]}}", "options": {}, "subject": "={{$node[\"Set Query Values\"].json[\"RecipeCount\"]}} {{$node[\"Set Query Values\"].json[\"Diet\"]}}, {{$node[\"Set Query Values\"].json[\"Health\"]}} {{$node[\"Set Query Values\"].json[\"SearchItem\"]}} recipes under {{$node[\"Set Query Values\"].json[\"CaloriesMax\"]}} calories ready in under {{$node[\"Set Query Values\"].json[\"TimeMax\"]}} minutes", "toEmail": "Enter Your Email Address Here", "fromEmail": "Enter Your Email Address Here" }, "credentials": { "smtp": "Gmail Creds" }, "typeVersion": 1, "id": "node-22c10aee" }, { "name": "Create Email Body in HTML", "type": "n8n-nodes-base.function", "position": [ 1460, 400 ], "parameters": { "functionCode": "arrRecipes = items[0].json.hits;\nitems[0].json = {};\n\nstrEmailBody = \"Here are your recipes for today:
\";\n\nitems[0].json.emailBody = strEmailBody\n\nreturn items;" }, "typeVersion": 1, "id": "node-d7d7a9b9" }, { "id": "error-94e451dc", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [ 1000, 400 ], "parameters": { "message": "Workflow execution error", "options": {} } } ], "active": true, "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3 }, "connections": {}, "meta": { "instanceId": "workflow-08068628", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:45.641429", "updatedAt": "2025-09-29T07:07:45.641442", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "description": "Production-ready workflow: What To Eat. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }