{"id":"7","name":"Daily Language Learning","nodes":[{"name":"Daily trigger","type":"n8n-nodes-base.cron","position":[620,750],"parameters":{"triggerTimes":{"item":[{"hour":8}]}},"typeVersion":1,"id":"adcfc2d7-1bdb-4c31-b428-a98e6e827e81","notes":"This cron node performs automated tasks as part of the workflow."},{"name":"Get top 3 articles","type":"n8n-nodes-base.hackerNews","position":[820,750],"parameters":{"limit":3,"resource":"all","additionalFields":{"tags":["front_page"]}},"typeVersion":1,"id":"381436ec-2040-456d-a9b4-156f6b55d376","notes":"This hackerNews node performs automated tasks as part of the workflow."},{"name":"Extract words","type":"n8n-nodes-base.function","position":[1020,750],"parameters":{"functionCode":"const words = [];\nconst regex = /\\d/g;\nconst newItems = [];\n\n// Splits titles into words and removes numbers\n// using regular expressions\n\nfor(let i=0; i < items.length; i++) {\n  let split_titles = []; \n  split_titles = items[i].json.title.split(' ');\n  for(let j=0; j < split_titles.length; j++) {\n    if(regex.test(split_titles[j])) {\n      continue;\n    } else {\n      words.push(split_titles[j]);\n    }\n  }\n}\n\n// Removes all duplicate words by converting the\n// array into a set and then back into an array\n\nconst uniqueWords = [...new Set(words)];\n\n// Transform the array to the data structure expected\n// by n8n\n\nfor(let k=0; k < uniqueWords.length; k++) {\n  newItems.push({json: { words: uniqueWords[k] }});\n}\n\nreturn newItems;"},"typeVersion":1,"id":"89af0b05-ce15-46d2-ba08-dacc65050801","notes":"This function node performs automated tasks as part of the workflow."},{"name":"Translate","type":"n8n-nodes-base.lingvaNex","position":[1220,750],"parameters":{"text":"={{$node[\"Extract words\"].json[\"words\"]}}","options":{},"translateTo":"de_DE"},"credentials":{"lingvaNexApi":"LingvaNex"},"typeVersion":1,"id":"71381c9b-0dbc-4873-b8e9-0ee3abb4141f","notes":"This lingvaNex node performs automated tasks as part of the workflow."},{"name":"Filter data ","type":"n8n-nodes-base.set","position":[1420,750],"parameters":{"values":{"string":[{"name":"English word","value":"={{$node[\"Translate\"].json[\"source\"]}}"},{"name":"Translated word","value":"={{$node[\"Translate\"].json[\"result\"]}}"}]},"options":{},"keepOnlySet":true},"typeVersion":1,"id":"c47db68d-9d82-4314-b535-65ca00fd652d","notes":"This set node performs automated tasks as part of the workflow."},{"name":"Save today's words","type":"n8n-nodes-base.airtable","position":[1620,850],"parameters":{"table":"Table 1","options":{},"operation":"append","application":"app4Y6qcCHIO1cYNB"},"credentials":{"airtableApi":"Airtable"},"typeVersion":1,"id":"7d1820f4-799e-4941-b97e-ebedb6507e20","notes":"This airtable node performs automated tasks as part of the workflow."},{"name":"Craft message","type":"n8n-nodes-base.function","position":[1620,650],"parameters":{"functionCode":"const number_of_words = 5;\nconst words = [];\n\n// Crafts the words to be sent in en_word : translated_word format\n// and adds them to an array\n\nfor(let i=0; i < number_of_words; i++) {\n  words.push(items[i].json['English word'] + ' : ' + items[i].json['Translated word']);\n}\n\n// Takes all the items from the array and converts them into a comma\n// separated string\n\nconst words_of_the_day = words.join(', ');\n\nreturn [{json: {words_of_the_day: words_of_the_day}}];"},"typeVersion":1,"id":"8ca74025-c1f0-4d40-8215-947aa40f8552","notes":"This function node performs automated tasks as part of the workflow."},{"name":"Send SMS","type":"n8n-nodes-base.vonage","position":[1820,650],"parameters":{"to":"+4915225152610","from":"Vonage APIs","message":"=Good morning, here are your words for today\n{{$node[\"Craft message\"].json[\"words_of_the_day\"]}}","additionalFields":{}},"credentials":{"vonageApi":"Vonage"},"typeVersion":1,"id":"53f73364-3410-4f39-9e21-a8811eba0e17","notes":"This vonage node performs automated tasks as part of the workflow."},{"id":"error-9e09eded","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"active":false,"settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"connections":{},"description":"Automated workflow: Daily Language Learning. This workflow processes data and performs automated tasks.","meta":{"instanceId":"workflow-018dc257","versionId":"1.0.0","createdAt":"2025-09-29T07:07:42.073803","updatedAt":"2025-09-29T07:07:42.073846","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"notes":"Excellent quality workflow: Daily Language Learning. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}