{
  "name": "Generate Weather-Based Date Itineraries with Google Places, OpenRouter AI, and Slack",
  "nodes": [
    {
      "id": "6630f4ed-c7e1-4f96-90e3-ba09ad5fb82d",
      "name": "Run Workflow Manually",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -2160,
        848
      ]
    },
    {
      "id": "f9a75e8b-d993-4de0-8fa3-c9325d54aedd",
      "name": "Note: Set Parameters",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2032,
        576
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## Node: Set Parameters\nConfigure the starting point and constraints.\n- `startLat`, `startLng`, `radius`, `timeLimitMin`\n- Optional: `placeType`, `language`, `minRating`.\n**Tip:** Keep API keys in **C"
      }
    },
    {
      "id": "18fc0230-da4f-4554-bdc3-f0ec6306d66d",
      "name": "Note: Get Nearby Spots",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1840,
        1040
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## Node: Get Nearby Spots\nCall **Google Places Nearby Search**.\n- Endpoint: `/maps/api/place/nearbysearch/json`\n- Use a **Google credential** (no inline `key=`).\n- You can change `type` (default `cafe"
      }
    },
    {
      "id": "3011df46-a5d8-4f24-b3f7-30a7cd57e28f",
      "name": "Note: Select Top 3 Spots",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1616,
        544
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## Node: Select Top 3 Spots\nRank and filter places.\n- Sort by rating (desc), optionally by reviews.\n- Keep top 3; drop duplicates/unrated.\n- Keep total time within `timeLimitMin` (walking)."
      }
    },
    {
      "id": "087b797c-7901-4c10-9e9b-cea34aac0b17",
      "name": "Note: Create Google Maps Link",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1296,
        1168
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## Node: Create Google Maps Link\nBuild a **walking route URL** for Google Maps.\n- origin → waypoints (top spots) → destination\n- Embed as: `🗺️ <https://…|View the route on Google Maps>`"
      }
    },
    {
      "id": "a60fc744-b76c-48e1-bf1c-5b949c24c7b7",
      "name": "Note: Merge Chat + Map",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        1008
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## Node: Merge Chat + Map\nCombine the itinerary text with the route link.\n- Ensures the Slack message contains both contents."
      }
    },
    {
      "id": "ca58d64e-9656-4d9f-a4e9-ee2dc6e190a3",
      "name": "Note: Slack Output",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        592
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## Node: Slack Output\nPost to Slack.\n- Set the channel (e.g., `#general`).\n- Enable `mrkdwn`, disable link/media unfurling.\n- Message = itinerary text(s) + route link."
      }
    },
    {
      "id": "5509f466-b357-41b0-8a5e-0f1121f4fd56",
      "name": "Note: OpenRouter Chat Model",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1280,
        368
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## Node: OpenRouter Chat Model\nLanguage model used by **Thinking Date Plan**.\n- Set your **OpenRouter credential**.\n- Keep prompts lightweight; avoid secrets in text."
      }
    },
    {
      "id": "75a671f0-ef1d-4027-a069-e2b5249f0a32",
      "name": "Note: Thinking Date Plan",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1280,
        112
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## Node: Thinking Date Plan\nGenerate a friendly itinerary in Markdown with an LLM.\n- Include: order, stay time, one-line tip.\n- Output should be Japanese; Markdown only.\n- No Google Maps URL here (add"
      }
    },
    {
      "id": "5dc8fa19-8d00-4f4e-9b3e-2bf1d54e2430",
      "name": "Note: Run Workflow Manually",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2272,
        1008
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## Node: Run Workflow Manually\nTest the workflow with a manual trigger first.\n- Good for validation and screenshots.\n- You can later replace it with **Schedule** or **Webhook**."
      }
    },
    {
      "id": "f84ce2b7-d8f9-4946-9a63-d2faaab0cc27",
      "name": "Note: Format Message for Slack",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -208,
        592
      ],
      "parameters": {
        "width": 288,
        "height": 208,
        "content": "## Node: Format Message for Slack\nPrepare a clean JSON structure for Slack.\n- Keep `text` (EN) / `text_ja` (JA) and `mapsUrl`.\n- Use concise, readable Markdown."
      }
    },
    {
      "id": "c4c1a586-a48d-46c0-9705-b5927142932e",
      "name": "Note: Translate Plan (EN ↔ JA)",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        1056
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## Node: Translate Plan (EN ↔ JA)\nTranslate with **DeepL**.\n- Target: `EN-US` (you can change locale).\n- Credential required; keep **mrkdwn** rendering in mind."
      }
    },
    {
      "id": "ba7edab9-f196-4fdf-a80d-fcb4b03511c0",
      "name": "Set Parameters1",
      "type": "n8n-nodes-base.set",
      "position": [
        -1936,
        848
      ]
    },
    {
      "id": "c799de6c-ac35-4b6e-90ea-c39d74dae838",
      "name": "Get Nearby Spots1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1712,
        848
      ]
    },
    {
      "id": "6d19cd88-2da3-44de-9d44-8bec779adee7",
      "name": "Select Top 3 Spots1",
      "type": "n8n-nodes-base.function",
      "position": [
        -1488,
        848
      ]
    },
    {
      "id": "11767a3b-3396-4c0b-b195-b77e69ee5c0b",
      "name": "Merge Chat + Map1",
      "type": "n8n-nodes-base.merge",
      "position": [
        -912,
        848
      ]
    },
    {
      "id": "06c7cd4a-2c3f-4f0a-bc74-6cf2f5d16c7a",
      "name": "Slack Output1",
      "type": "n8n-nodes-base.slack",
      "position": [
        336,
        848
      ]
    },
    {
      "id": "e165a610-9c00-40e0-967e-07edd24abe49",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2784,
        448
      ],
      "parameters": {
        "width": 384,
        "height": 1504,
        "content": "## 🧩 What this template does\n\nThis workflow builds a 120-minute local date course around your starting point by querying Google Places for nearby spots, selecting the top candidates, fetching real-tim"
      }
    },
    {
      "id": "97a1ba3e-9bfb-484d-b27f-b3a851f00e85",
      "name": "Translate Plan (EN ↔ JA)1",
      "type": "n8n-nodes-base.deepL",
      "position": [
        112,
        848
      ]
    },
    {
      "id": "862eb4aa-3ec0-4a11-a65b-bcdd6ecff1a8",
      "name": "Thinking Date Plan1",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -1264,
        592
      ]
    },
    {
      "id": "2b87cd1c-3c95-4eb5-ad53-eb69c2e5441a",
      "name": "OpenRouter Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        -1200,
        816
      ]
    },
    {
      "id": "96bb07b3-4297-4bf6-a2ea-2ca4bf2abf58",
      "name": "OpenRouter Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        -400,
        1072
      ]
    },
    {
      "id": "348a72b1-2474-4ef6-8934-bb63e7fe982d",
      "name": "AI Weather Emoji Generator",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -464,
        848
      ]
    },
    {
      "id": "6b309f6e-1d95-42fd-a0be-b6ea9a9ef8c4",
      "name": "Get Current Weather",
      "type": "n8n-nodes-base.openWeatherMap",
      "position": [
        -688,
        848
      ]
    },
    {
      "id": "b0522365-69cb-4b2d-b865-253a38d1b6a8",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        560
      ],
      "parameters": {
        "width": 320,
        "height": 256,
        "content": "## Get Current Weather\n🌦️ Fetch current weather data from OpenWeatherMap.\n\n- Input: Coordinates (lat, lon)\n- Output: JSON (weather[0].main, weather[0].description, weather[0].icon)\n- Used for: Emoji g"
      }
    },
    {
      "id": "3ad9d0b8-4961-4b47-a6f4-03cdf1d21e64",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        1248
      ],
      "parameters": {
        "width": 320,
        "height": 304,
        "content": "## AI Weather Emoji Generator\n\n🤖 Convert weather text into a matching emoji.\n\n- Input: weather[0].main or description\n- Model: OpenRouter Chat (gpt-4o / gpt-4o-mini)\n- Output: Emoji representing the c"
      }
    },
    {
      "id": "2309d554-5378-48a2-a443-83c36a2491c1",
      "name": "Create Google Maps Link",
      "type": "n8n-nodes-base.function",
      "position": [
        -1200,
        992
      ]
    },
    {
      "id": "198c0819-c27d-4bcb-9226-927cd16c28a0",
      "name": "Format Message for Slack",
      "type": "n8n-nodes-base.code",
      "position": [
        -112,
        848
      ]
    }
  ],
  "connections": {
    "Set Parameters1": {
      "main": [
        [
          {
            "node": "Get Nearby Spots1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Nearby Spots1": {
      "main": [
        [
          {
            "node": "Select Top 3 Spots1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Chat + Map1": {
      "main": [
        [
          {
            "node": "Get Current Weather",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Current Weather": {
      "main": [
        [
          {
            "node": "AI Weather Emoji Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Select Top 3 Spots1": {
      "main": [
        [
          {
            "node": "Create Google Maps Link",
            "type": "main",
            "index": 0
          },
          {
            "node": "Thinking Date Plan1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Thinking Date Plan1": {
      "main": [
        [
          {
            "node": "Merge Chat + Map1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run Workflow Manually": {
      "main": [
        [
          {
            "node": "Set Parameters1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Thinking Date Plan1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "AI Weather Emoji Generator",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Create Google Maps Link": {
      "main": [
        [
          {
            "node": "Merge Chat + Map1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Format Message for Slack": {
      "main": [
        [
          {
            "node": "Translate Plan (EN ↔ JA)1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Weather Emoji Generator": {
      "main": [
        [
          {
            "node": "Format Message for Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Translate Plan (EN ↔ JA)1": {
      "main": [
        [
          {
            "node": "Slack Output1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}