{
  "id": "mEVrYhK4pVi7R9f2",
  "name": "Email Auto-Triage and Organization Hub",
  "tags": [],
  "nodes": [
    {
      "id": "f93cbe90-5989-4238-8399-e98ba4e491ce",
      "name": "Route by Category",
      "type": "n8n-nodes-base.switch",
      "position": [
        1744,
        416
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Schedule",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "condition-1",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.category }}",
                    "rightValue": "Schedule"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "What to Bring",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "condition-2",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.category }}",
                    "rightValue": "What to Bring"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "condition-3",
                    "operator": {
                      "type": "boolean",
                      "operation": "true"
                    },
                    "leftValue": "={{ $json.output.hasAttachments }}",
                    "rightValue": true
                  }
                ]
              }
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra",
          "renameFallbackOutput": "Notice"
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "0d3421b3-ef46-401e-bf18-806b95488e9e",
      "name": "Prepare Calendar Event",
      "type": "n8n-nodes-base.set",
      "position": [
        1968,
        544
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "calendarEventTitle",
              "type": "string",
              "value": "={{ $('Extract Email Info').item.json.output.eventTitle }}"
            },
            {
              "id": "id-2",
              "name": "calendarEventDescription",
              "type": "string",
              "value": "=={{ `${$json.output.eventDescription || $json.snippet || ''}\\n\\n\u3010\u6301\u3061\u7269\u3011\\n${$json.output.itemsToBring || '\u306a\u3057'}\\n\\n` }}\n"
            },
            {
              "id": "0d52419c-fc83-4b32-ada4-473e3c86c31f",
              "name": "calendarEventEnd",
              "type": "string",
              "value": "={{ $json.output.eventDate     ? $fromISO($json.output.eventDate).plus({ hours: 1 }).toISO()     : $now.plus({ days: 1, hours: 1 }).toISO() }}"
            },
            {
              "id": "id-5",
              "name": "itemsToBring",
              "type": "string",
              "value": "={{ $('Extract Email Info').item.json.output.itemsToBring }}"
            },
            {
              "id": "67b57577-1c5b-42c7-a078-6d004a16a5bb",
              "name": "calendarEventsStart",
              "type": "string",
              "value": "={{ $('Extract Email Info').item.json.output.eventDate }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "dcdd41b0-3349-4068-9821-852c5f2b68d4",
      "name": "Add to Calendar",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        2192,
        544
      ],
      "parameters": {
        "end": "={{ DateTime.fromISO($json.output.eventDate).plus({ hours: 1 }).toISO() }}",
        "start": "={{ $json.output.eventDate }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "additionalFields": {
          "allday": "no",
          "summary": "={{ $json.calendarEventTitle.trim() }}\n",
          "description": "={{ $json.calendarEventDescription.trim() }}"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "3eafaa8b-1158-479d-a78e-2980acd5cd78",
      "name": "Get Email Attachments",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1744,
        144
      ],
      "parameters": {
        "simple": false,
        "options": {
          "downloadAttachments": true
        },
        "messageId": "={{ $('Get a message').item.json.id }}",
        "operation": "get"
      },
      "typeVersion": 2.1
    },
    {
      "id": "2c6e2c70-77e7-45a5-8787-c81c30228e28",
      "name": "Filter Photos Only",
      "type": "n8n-nodes-base.filter",
      "position": [
        1968,
        144
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $binary.attachment_0.mimeType }}",
              "rightValue": "image"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "aa422c97-6bb7-45c7-8652-3ba149ad2b44",
      "name": "Save Photos to Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        2192,
        144
      ],
      "parameters": {
        "name": "={{ $json.fileName }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "1mrFvUmNddLow3i1ZIBOSg9r2R3K2L67m",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1mrFvUmNddLow3i1ZIBOSg9r2R3K2L67m",
          "cachedResultName": "n8n"
        },
        "inputDataFieldName": "attachment_0"
      },
      "typeVersion": 3
    },
    {
      "id": "d66732f4-2251-438a-8693-865c4a21394a",
      "name": "Save Notice to Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1968,
        352
      ],
      "parameters": {
        "name": "=Notice - {{ $json.output.eventTitle }}.txt",
        "content": "=Title: {{ $json.output.eventTitle }}\nDate: {{ $json.output.eventDate }}\nCategory: {{ $json.output.category }}\nItems to Bring: {{ $json.output.itemsToBring }}\n\nDescription:\n{{ $json.output.eventDescription }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').item.json.noticesFolderId }}"
        },
        "operation": "createFromText"
      },
      "typeVersion": 3
    },
    {
      "id": "72d7e4b4-5110-4df9-82c5-70fe40cd992b",
      "name": "Daily Reminder Check",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        720,
        976
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "9ca581e9-0399-4faf-8450-d105565eefd4",
      "name": "Get Tomorrow's Events",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        944,
        976
      ],
      "parameters": {
        "options": {},
        "timeMax": "={{ $now.plus({days: 1}).endOf('day').toISO() }}",
        "timeMin": "={{ $now.plus({days: 1}).startOf('day').toISO() }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "operation": "getAll",
        "returnAll": true
      },
      "typeVersion": 1.3
    },
    {
      "id": "b18f3f5b-b5f2-421b-b953-e3560795491d",
      "name": "Filter What to Bring Events",
      "type": "n8n-nodes-base.filter",
      "position": [
        1168,
        976
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.description }}",
              "rightValue": "\u6301\u3061\u7269"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "402fe57d-f3da-4176-9fc8-da7b440dd1ba",
      "name": "Send Reminder Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1392,
        976
      ],
      "parameters": {
        "sendTo": "={{ $('Get Tomorrow\\'s Events').item.json.creator.email }}",
        "message": "=={{ `\u3010\u660e\u65e5\u306e\u4e88\u5b9a\u3011\\n${$json.summary}\\n\\n\u958b\u59cb: ${$json.start.dateTime || $json.start.date}\\n\u7d42\u4e86: ${$json.end.dateTime || $json.end.date}\\n\\n${$json.description}` }}\n",
        "options": {},
        "subject": "=={{ $json.summary || '\u660e\u65e5\u306e\u4e88\u5b9a\u306e\u304a\u77e5\u3089\u305b' }}\n"
      },
      "typeVersion": 2.1
    },
    {
      "id": "37e129a5-501c-4e0d-b4ef-531da3dbc060",
      "name": "Extract Contacts",
      "type": "n8n-nodes-base.set",
      "position": [
        1744,
        752
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "contactInfo",
              "type": "string",
              "value": "={{ $('When Email Arrives').item.json.From }}"
            },
            {
              "id": "id-2",
              "name": "emailSubject",
              "type": "string",
              "value": "={{ $('Get a message').item.json.Subject }}\n"
            },
            {
              "id": "id-3",
              "name": "extractedDate",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "d95d5309-873d-43b5-aab2-2be78cf97d33",
      "name": "Save Contacts to Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        2192,
        752
      ],
      "parameters": {
        "name": "=Contact - {{ $json.emailSubject }}.txt",
        "content": "=Contact Information:\n\n{{ $json.contactInfo }}\n\nExtracted from: {{ $json.emailSubject }}\nDate: {{ $json.extractedDate }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').item.json.contactsFolderId }}"
        },
        "operation": "createFromText"
      },
      "typeVersion": 3
    },
    {
      "id": "fbd6e801-94e0-44b7-aa8d-aebf946807c9",
      "name": "When Email Arrives",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        720,
        448
      ],
      "parameters": {
        "filters": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "8c2b443a-c0c3-46d7-a33c-fbacb85714fa",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        1168,
        448
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "photosFolderId",
              "type": "string",
              "value": "1mrFvUmNddLow3i1ZIBOSg9r2R3K2L67m"
            },
            {
              "id": "id-2",
              "name": "noticesFolderId",
              "type": "string",
              "value": "1mrFvUmNddLow3i1ZIBOSg9r2R3K2L67m"
            },
            {
              "id": "id-3",
              "name": "contactsFolderId",
              "type": "string",
              "value": "1mrFvUmNddLow3i1ZIBOSg9r2R3K2L67m"
            },
            {
              "id": "id-4",
              "name": "reminderEmail",
              "type": "string",
              "value": "user@example.com"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "7f170c94-8112-4688-8e30-fe044ee89d2e",
      "name": "Extract Email Info",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        1392,
        448
      ],
      "parameters": {
        "text": "=={{ $json.textPlain || $json.textHtml || $json.snippet }}\n",
        "options": {
          "systemPromptTemplate": "Analyze this school-related email and extract structured information.\n\nFirst, categorize the email into exactly ONE of the following:\n- \\\"Schedule\\\" (\u4e88\u5b9a\u30fb\u30a4\u30d9\u30f3\u30c8\u30fb\u884c\u4e8b\u306e\u6848\u5185\u3001\u65e5\u6642\u3068\u5834\u6240\u304c\u66f8\u3044\u3066\u3042\u308b\u3082\u306e)\n- \\\"What to Bring\\\" (\u6301\u3061\u7269\u30ea\u30b9\u30c8\u3001\u6e96\u5099\u7269\u306e\u304a\u77e5\u3089\u305b)\n- \\\"Notice\\\" (\u9023\u7d61\u4e8b\u9805\u30fb\u304a\u77e5\u3089\u305b\u3060\u304c\u3001\u7279\u306b\u65e5\u6642\u3084\u6301\u3061\u7269\u304c\u30e1\u30a4\u30f3\u3067\u306f\u306a\u3044\u3082\u306e)\n- \\\"Contacts\\\" (\u5148\u751f\u3084\u5b66\u6821\u3001\u9023\u7d61\u5148\u60c5\u5831\u304c\u30e1\u30a4\u30f3\u306e\u30e1\u30fc\u30eb)\n\nField rules:\n- category: One of \\\"Schedule\\\", \\\"What to Bring\\\", \\\"Notice\\\", or \\\"Contacts\\\".\n- hasAttachments: true if the email mentions attachments or clearly refers to attached files/images, otherwise false.\n- eventTitle: Short title for the event (e.g., \u904b\u52d5\u4f1a, \u500b\u4eba\u9762\u8ac7, \u6388\u696d\u53c2\u89b3).\n- eventDescription: A short natural language summary of what the event is about.\n- eventDate: If any date/time is mentioned, convert it to full ISO 8601 with timezone, e.g. \\\"2024-12-25T12:30:00+09:00\\\".\n  - If the year is missing (e.g., \\\"12\u670825\u65e5\\\"), assume the next upcoming occurrence of that date.\n  - If only a date (no time) is given, use 09:00 as a default time.\n- itemsToBring: A concise Japanese list of things to bring (e.g. \\\"\u4f53\u64cd\u670d, \u4e0a\u5c65\u304d, \u8d64\u767d\u5e3d\u5b50\\\"). If no items are required, use an empty string.\n- contacts: Any phone numbers, email addresses, or named contacts (\u5148\u751f\u306e\u540d\u524d\u3001\u5b66\u6821\u306e\u9023\u7d61\u5148\u306a\u3069). If none, use an empty string.\n- subject: The subject of the email as written in the original message.\n- id: The email ID passed in the input.\n\nIMPORTANT:\n- If the email includes both schedule information AND items to bring, you may choose \\\"What to Bring\\\" as category but STILL fill eventDate and eventTitle.\n- Always try to fill eventDate when a date can be inferred from the text.\n- Do NOT invent information that is clearly not in the email.\n\nCRITICAL OUTPUT INSTRUCTION:\nOutput ONLY valid raw JSON for the defined attributes.\nDo NOT use markdown code blocks (no ```json).\nDo NOT add any explanation or extra text.\nReturn just the JSON object.\n"
        },
        "attributes": {
          "attributes": [
            {
              "name": "category",
              "required": true,
              "description": "Email category: Schedule, What to Bring, Notice, or Contacts"
            },
            {
              "name": "hasAttachments",
              "type": "boolean",
              "required": true,
              "description": "True if email has attachments"
            },
            {
              "name": "eventTitle",
              "description": "Title of the event if this is a schedule email"
            },
            {
              "name": "eventDescription",
              "description": "Description of the event"
            },
            {
              "name": "eventDate",
              "description": "Date of the event in ISO format"
            },
            {
              "name": "itemsToBring",
              "description": "List of items to bring if this is a What to Bring email"
            },
            {
              "name": "contacts",
              "description": "Contact information extracted from email"
            },
            {
              "name": "subject",
              "required": true,
              "description": "Email subject"
            },
            {
              "name": "id",
              "required": true,
              "description": "Email ID"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "028be05b-de27-4aca-a994-ce94aa79e11a",
      "name": "Filter",
      "type": "n8n-nodes-base.filter",
      "position": [
        1968,
        752
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "755fd1a8-6452-4c5f-be2e-3105d0b05f35",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.contactInfo }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "669b3499-d3cc-4178-8366-02c26efeb97d",
      "name": "Get a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        944,
        448
      ],
      "parameters": {
        "messageId": "={{ $json.id.toString().trim() }}",
        "operation": "get"
      },
      "typeVersion": 2.1
    },
    {
      "id": "840b1bb1-63f5-4e45-89ba-35adf3cdea2a",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1456,
        672
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "46f84a53-367a-46b2-aede-c7f1c4b7292e",
      "name": "Sticky Note - Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        224
      ],
      "parameters": {
        "color": 6,
        "width": 608,
        "height": 808,
        "content": "## Email Auto-Triage and Organization Hub\n\nThis workflow reads school-related emails, uses AI to classify them, and keeps everything organised across Google Calendar and Google Drive. It focuses on schedules, what-to-bring lists, general notices, and contact details so you never miss an important event.\n\n## Who is it for\n- Parents or caregivers who receive many school emails\n- Busy families who often forget dates or \u6301\u3061\u7269\n- Anyone who wants school communication in a structured, searchable format\n\n## How it works / What it does\n1. Listens for new emails in Gmail.\n2. Uses an AI model to detect the email type (Schedule / What to Bring / Notice / Contacts).\n3. Saves notices and contacts as text files in Google Drive.\n4. Creates calendar events for schedules and what-to-bring notices.\n5. Optionally saves attached photos in a Drive folder.\n6. Sends a daily reminder email for tomorrow\u2019s events that include \u6301\u3061\u7269.\n\n## How to set up\n- Connect Gmail, Google Calendar, and Google Drive credentials.\n- Update folder IDs and your reminder email address in **Workflow Configuration**.\n- Turn on the workflow and test with a few real school emails.\n\n## How to customize the workflow\n- Adjust the AI prompt and categories in **Extract Email Info**.\n- Change how events are created or how files are named and stored.\n- Extend the flow to log data into Google Sheets or other tools.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3f3fb7a8-49be-492b-b838-a3ff8a9e0ceb",
      "name": "Sticky Note - Step 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        816,
        48
      ],
      "parameters": {
        "width": 520,
        "height": 376,
        "content": "## Step 1 \u2013 Capture and classify new school emails\n\n- **When Email Arrives** watches Gmail for new school-related messages.\n- **Get a message** fetches subject, body, and metadata for each email.\n- **Workflow Configuration** stores shared settings like folders and calendar IDs.\n- **Extract Email Info** pulls dates, child names, and \u201cwhat to bring\u201d phrases.\n- **OpenAI Chat Model** classifies the email (Schedule / What to Bring / Notice / Contacts).\n- **Route by Category** sends each type into its own processing branch."
      },
      "typeVersion": 1
    },
    {
      "id": "87c44ad8-4b10-4665-89ff-2f51af605608",
      "name": "Sticky Note - Step 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2384,
        192
      ],
      "parameters": {
        "width": 552,
        "height": 360,
        "content": "## Step 2 \u2013 Save notices, events, photos, and contacts\n\n- **Save Notice to Drive** stores the email text and subject as a note in Drive.\n- **Prepare Calendar Event** builds title, date, and \u6301\u3061\u7269 description.\n- **Add to Calendar** creates school events in your Google Calendar.\n- **Get Email Attachments** pulls attached files from the email.\n- **Filter Photos Only** keeps only image attachments.\n- **Save Photos to Drive** archives photos in your school folder.\n- **Extract Contacts** parses teacher or school contact details.\n- **Save Contacts to Drive** writes them into a structured contact file."
      },
      "typeVersion": 1
    },
    {
      "id": "f9b9633c-b1b2-4142-8130-3eddf489e801",
      "name": "Sticky Note - Step 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1600,
        976
      ],
      "parameters": {
        "width": 520,
        "height": 328,
        "content": "## Step 3 \u2013 Daily reminder for tomorrow\u2019s \u201cWhat to Bring\u201d events\n\n- **Daily Reminder Check** starts each morning on a schedule.\n- **Get Tomorrow's Events** searches your calendar for events happening tomorrow.\n- **Filter What to Bring Events** keeps events whose description includes \u6301\u3061\u7269 or similar cues.\n- **Send Reminder Email** sends you a concise list of tomorrow\u2019s events and required items so you can prepare bags and supplies in advance."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "b83482d3-05fc-4236-ab17-b44b0c6a5742",
  "connections": {
    "Filter": {
      "main": [
        [
          {
            "node": "Save Contacts to Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get a message": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Contacts": {
      "main": [
        [
          {
            "node": "Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Extract Email Info",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Route by Category": {
      "main": [
        [
          {
            "node": "Save Notice to Drive",
            "type": "main",
            "index": 0
          },
          {
            "node": "Prepare Calendar Event",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Save Notice to Drive",
            "type": "main",
            "index": 0
          },
          {
            "node": "Prepare Calendar Event",
            "type": "main",
            "index": 0
          }
        ],
        [],
        [
          {
            "node": "Save Notice to Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Email Info": {
      "main": [
        [
          {
            "node": "Route by Category",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get Email Attachments",
            "type": "main",
            "index": 0
          },
          {
            "node": "Extract Contacts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Photos Only": {
      "main": [
        [
          {
            "node": "Save Photos to Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Email Arrives": {
      "main": [
        [
          {
            "node": "Get a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Reminder Check": {
      "main": [
        [
          {
            "node": "Get Tomorrow's Events",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Email Attachments": {
      "main": [
        [
          {
            "node": "Filter Photos Only",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Tomorrow's Events": {
      "main": [
        [
          {
            "node": "Filter What to Bring Events",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Calendar Event": {
      "main": [
        [
          {
            "node": "Add to Calendar",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Extract Email Info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter What to Bring Events": {
      "main": [
        [
          {
            "node": "Send Reminder Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}