{
  "name": "Smart break recommendation system using Google Calendar, weather data, and GPT-4 to Slack",
  "nodes": [
    {
      "id": "7b8e3b87-3383-46b0-9cd6-49ea0e9d357f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        16
      ],
      "parameters": {
        "width": 420,
        "height": 788,
        "content": "## ☕ Gap Time Concierge - Smart Break Spot Recommender\n\n**What this workflow does:**\nAutomatically finds the perfect café or spot to visit during gaps between your calendar appointments. It checks you"
      }
    },
    {
      "id": "917b3df4-1ff8-42bc-a9fc-5f9530c2cef1",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        416
      ],
      "parameters": {
        "width": 300,
        "height": 232,
        "content": "### ⚙️ Step 1: Configuration\n\nSet your configuration values here:\n- `currentLocation`: Your starting point\n- `minGapTimeMinutes`: Minimum free time to trigger recommendations\n- API keys for Google Map"
      }
    },
    {
      "id": "7d36bc0c-9a25-4367-ab0e-45e99f9fecc0",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        416
      ],
      "parameters": {
        "width": 300,
        "height": 136,
        "content": "### 📅 Step 2: Fetch Calendar & Preferences\n\nRetrieves your next calendar event and user preferences from Notion database."
      }
    },
    {
      "id": "64549032-c64c-441a-938d-52582cc7352e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        752,
        416
      ],
      "parameters": {
        "width": 300,
        "height": 136,
        "content": "### 🌤️ Step 3: Weather & Travel Time\n\nGets current weather at destination and calculates travel time via Google Maps Directions API (transit mode)."
      }
    },
    {
      "id": "1e6589f4-5008-42ac-b6c5-860465baaaaa",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1280,
        416
      ],
      "parameters": {
        "width": 280,
        "height": 188,
        "content": "### ⏱️ Step 4: Gap Time Calculation\n\nCalculates available free time:\n`Gap Time = Time until event - Travel time`\n\nOnly proceeds if gap time exceeds minimum threshold."
      }
    },
    {
      "id": "cd582fdb-18d6-4e83-8dfa-7e21429af41c",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1952,
        464
      ],
      "parameters": {
        "width": 280,
        "height": 188,
        "content": "### 🌧️☀️ Step 5: Weather-Based Routing\n\nRoutes to different search queries:\n- **Rain/Snow** (ID < 700): Indoor spots\n- **Clear/Cloudy** (ID ≥ 700): Outdoor spots"
      }
    },
    {
      "id": "6b1291d1-c3ad-4541-8e57-6be7b0a95276",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2400,
        416
      ],
      "parameters": {
        "width": 280,
        "height": 276,
        "content": "### 🤖 Step 6: AI Recommendation\n\nGPT-4.1-mini analyzes:\n- Your available time\n- Weather conditions\n- User preferences from Notion\n- Nearby spot options\n\nGenerates a friendly Slack message with top 3 r"
      }
    },
    {
      "id": "cb3d1e56-5b0d-4c59-9e01-8887eaaed515",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2752,
        416
      ],
      "parameters": {
        "width": null,
        "height": 164,
        "content": "### 📱 Step 7: Slack Notification\n\nSends the AI-generated recommendation to your configured Slack channel."
      }
    },
    {
      "id": "d4eb07b5-27f6-4dc9-b2bf-22f149423342",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        64,
        224
      ]
    },
    {
      "id": "99f75d5c-1fca-418a-aac9-888801be1bab",
      "name": "Set Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        224,
        224
      ]
    },
    {
      "id": "187a33f6-8e41-4e6f-b717-a1c1e38dca53",
      "name": "Get Next Calendar Event",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        576,
        224
      ]
    },
    {
      "id": "3d6678dc-42f5-48e1-8393-905b01c51abd",
      "name": "Get User Preferences from Notion",
      "type": "n8n-nodes-base.notion",
      "position": [
        400,
        224
      ]
    },
    {
      "id": "d03c7278-b35f-42f1-a269-afacdd1914dc",
      "name": "Get Weather at Destination",
      "type": "n8n-nodes-base.openWeatherMap",
      "position": [
        768,
        224
      ]
    },
    {
      "id": "54e09e95-6eef-4711-a296-be09c77d5423",
      "name": "Get Travel Time via Google Maps",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        976,
        224
      ]
    },
    {
      "id": "020dd272-b2cf-4c95-b71a-129cd8d1a316",
      "name": "Calculate Available Gap Time",
      "type": "n8n-nodes-base.code",
      "position": [
        1296,
        224
      ]
    },
    {
      "id": "d234d4e7-55ac-4c7f-b6b6-61608f7a1b76",
      "name": "Has Sufficient Gap Time?",
      "type": "n8n-nodes-base.if",
      "position": [
        1520,
        224
      ]
    },
    {
      "id": "0e0eb752-8c39-4c67-adb1-904e8cacb85f",
      "name": "Route by Weather Condition",
      "type": "n8n-nodes-base.switch",
      "position": [
        1968,
        224
      ]
    },
    {
      "id": "c5aa5a59-38e3-4134-8fa3-94ec06c043bb",
      "name": "Search Indoor Spots",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2192,
        128
      ]
    },
    {
      "id": "a1c7e6cc-6196-4aa1-8a9b-c35b5b9b9cdb",
      "name": "Search Outdoor Spots",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2192,
        320
      ]
    },
    {
      "id": "cb0cb5bb-967c-4eaf-8e6b-bc082b6f1462",
      "name": "AI Generate Recommendations",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2416,
        224
      ]
    },
    {
      "id": "4939276b-6a7e-4b2c-974d-57f894ae8b41",
      "name": "Send Slack Notification",
      "type": "n8n-nodes-base.slack",
      "position": [
        2768,
        224
      ]
    },
    {
      "id": "abdd7ed9-b06d-4ea6-b9b3-0c189f7d00ce",
      "name": "Merge All Context Data",
      "type": "n8n-nodes-base.code",
      "position": [
        1744,
        224
      ]
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Set Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Configuration": {
      "main": [
        [
          {
            "node": "Get User Preferences from Notion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Indoor Spots": {
      "main": [
        [
          {
            "node": "AI Generate Recommendations",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Outdoor Spots": {
      "main": [
        [
          {
            "node": "AI Generate Recommendations",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge All Context Data": {
      "main": [
        [
          {
            "node": "Route by Weather Condition",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Next Calendar Event": {
      "main": [
        [
          {
            "node": "Get Weather at Destination",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has Sufficient Gap Time?": {
      "main": [
        [
          {
            "node": "Merge All Context Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Weather at Destination": {
      "main": [
        [
          {
            "node": "Get Travel Time via Google Maps",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route by Weather Condition": {
      "main": [
        [
          {
            "node": "Search Indoor Spots",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Search Outdoor Spots",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Generate Recommendations": {
      "main": [
        [
          {
            "node": "Send Slack Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Available Gap Time": {
      "main": [
        [
          {
            "node": "Has Sufficient Gap Time?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Travel Time via Google Maps": {
      "main": [
        [
          {
            "node": "Calculate Available Gap Time",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get User Preferences from Notion": {
      "main": [
        [
          {
            "node": "Get Next Calendar Event",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}