What Can You Automate With n8n?
with Harshil Agrawal
Used wisely, automation is a huge time saver. In this episode, we'll learn about all the incredible things we can automate using n8n from Harshil Agrawal!
Resources & Links
Captions provided by White Coat Captioning (https://whitecoatcaptioning.com/). Communication Access Realtime Translation (CART) is provided in order to facilitate communication accessibility and may not be a totally verbatim record of the proceedings.
JASON: Hello, everyone. And welcome to another episode of Learn with Jason! Today on the show, we have Harshil Agrawal. Thank you so much for joining us. How are you doing?
HARSHIL: I'm doing wonderful. Thank you so much for having me. I'm excited.
JASON: This is gonna be a great show, I think. We're doing something that I think is one of the hottest topics for developers, rights? But before we talk about that, let's talk a little bit about you. For folks who aren't familiar with you, do you want to give us a bit of background on yourself and your work?
HARSHIL: Hello, everyone, my name is Harshil Agrawal. And I work in the developer relations team at n8n. I enjoy trying to automate as much as I can. And I have been now been trying to get into writing as much less code as I can. Because that sounds very interesting and it's been more fun for me. That is what I have been doing. And you might have come across a project, GitHub Wrap, which I created along with n8n, Cloudinary and Cloudflare which was a POC for how you can create your useful app. I wouldn't call it useful, but how you can create apps with low code which has been fantastic.
JASON: Yeah. And that GitHub Wrap was cool. Similar to Spotify wrap, it was how many repos you created and pull requests, all those things and made a little sharable thing for that this which is really fun. You're saying that you did all that without writing much code?
HARSHIL: The code that I wrote was the HTML page.
HARSHIL: And just to make sure that the requests go properly, I did some -- I wrote some code for Cloudflare workers.
JASON: I didn't realize that. I presumed that was a custom-coded project. I'm gonna try to find the link to that. Wrapped.run. Is that yours?
HARSHIL: No, let me get that for you.
JASON: Oh, got it, lowcodeland/ghwrap. We'll put that in the show notes. For some reason, that's not showing up.
HARSHIL: You might have to --
JASON: Got it. There it is. Oh, hello, Ben, and thank you for the sub. GitHub Wrap. That was a really cool project. And you say that you built that through some automation. And that is that hot topic that I want to talk about today. I feel like every developer is so motivated by automation. I think that at the bottom of everything, every developer wants to show up to work, press a button, and then take an 8 hour nap and then collect a paycheck. Start the automation, call it done and you're good to go. How -- and, you know, you're clearly you're in this space of automation. So, how -- I mean, I have a million questions about automation. But I guess let's ask the first one. How did you end up in this space? What drove you to take it on?
HARSHIL: That's a good question. I have always been interested in trying out different stuff, experimenting with them and, you know, talking about that with people. And when I came across n8n, I was like, this is interesting. I am, you know, allowed to work. But not work at the same time. All my work is being taken care of by our domain team, automated workflows. This is something I'm interested in and I want to get more involved into this, learn more about how automation is -- how automation can help, you know, the people across the broad spectrum.
JASON: Yeah, absolutely. And so, automation is one of those things that, you know, there's that old XKCD joke that if you have a task to do, you'll talk about how much time you can save by automating that task and then, you know, you'll spend so much more time building and debugging and maintaining the automation than it would have taken you to just do the task. And so, how do you proposal automation? Like what -- what are tasks that you -- you see as being like prime automation targets?
HARSHIL: For developers, if I talk about automation, it can be in handling the CI/CD pipeline. Because that I feel is what takes a lot of time. And being -- working for a company that has the source code publicity available, managing the pull requests and the issues is also something I see can be a help -- automation can be very helpful. So, those are the sectors that I feel automation can really make an impact and not just help the company or the developers working for that. But also keep the maintainers a peace of mind. And also, I encourage contributors to contribute more because they now get the response in time. They are not waiting for your response forever. So, I think that is where automation can be really helpful.
JASON: Yeah. So, and, you know, I think the part I'm always curious about with automation is one of the biggest pitfalls that I've seen developers fall into is automating too early. I think there's a maturity curve when it comes to automation. A task needs to have reached a certain point before it's a candidate to be automated. How do you think about that? Like it -- what are the heuristics that you're applying when you're looking at a task to say, this one is ready for automation? You know, what has to be true for you?
HARSHIL: Yeah. For me, the approach they take is whenever I get a new task I always do it manually to understand the whole process. Document that process. Because I don't know if I might, you know, want to automate it someday. And also keep track of how many times I'm doing that task in a week. So, that gives me an idea. Okay. I'm spending too much time on such a small task which I should not do. Which is not being -- it's not giving so much impact. And that's where I realize, okay, that is now time to automate it and put some time off and work on the automation workflow for this task. So, just to give you an example, every time we make a new release, we have a new graphic which we use to send out on the social media post. Now, earlier that was done manually by our designer who would take those icons of each and every node, add it to that graphic and share it with us. This was a long process and we kind of have a release every week. It didn't make sense to ping the designer to do that and, you know, wait for him to give us back the graphic and then share it on social media. So, we created an automation workflow that would just do that for us.
JASON: Yeah. That's a good point. I think when you see yourself doing something repetitive. And GrahamAtDesk in the chat, it's important automating important things that you don't do very off. Not because you save time, but because you guarantee consistency. Sometimes guaranteeing safety makes the time and money spent worth the investment. I think I would agree with that. I think that, you know, a big challenge they see -- and actually, I would say this was maybe the original argument for why you would automate CI/CD. At Netlify, we worked hard at automating a lot of the CI/CD process because what we found is the level of the complexity to do a manual deploy when you have a big frontend and all these things, it's high enough that you get inconsistency. People miss a step, they forget to check a box. And then you accidently deploy something broken because, you know, the manual review process didn't work. So, building out automated testing. Building out the automation of rolling -- being able to just push to Git and all the things that need to happen automatically run and then it deploys when it passes all the test. Like, that sort of thing is -- I mean, now it's because you save a ton of time. But at first it really is a safety measure of, you know, like, well, the robots are gonna check the list perfectly every time. Humans may cut some corners.
JASON: So, I -- what is the -- this is always kind of an interesting one. And... I love what people come up with. What is the oddest thing that you have automated?
HARSHIL: That's a good one. Like I am currently playing with a Twitter API. And I have somehow managed to hook up the Twitter webhook API with n8n. Like I was assuming it was -- I will be able to describe to particular events. But that's not how the Twitter webhook API works. It's gonna send you everything that happens related to your account. Even if you Tweet, someone retweets, someone likes, someone follows you. That's a chaos. It's a chaos.
JASON: I like a that.
HARSHIL: But it's fun.
JASON: Chat, I would like to hear from you too. What are you automating? What's the weirdest thing that you have automated? For me, I think the weirdest thing I have ever automated is I once automated my meals. what I mean by that, when I was in the beginning stages of my agency, I didn't have a ton of money. I couldn't order in all of my meals. But I didn't have time and I wasn't a very good cook. So, I needed to figure out a way to do it. So, I found a friend who worked in a kitchen and he was a cook in a restaurant. And I figured out that for like he didn't want a ton of money. But for barely more than I was spending on groceries, he would bring me like Tupperwares are re-heatable meals. He would show up at my house with a cooler. I would open the Tupperware and that was my meal automation service. I completely outsourced. I didn't choose the menu or the portion sizes. I can't think about any of this. I'm trying to bootstrap this company. And granted, my work/life balance was not good at that point. I would not recommend that. But I did really like having this whole category of things disappear from my life. Not having to go grocery shopping or think about any of those things. That's an interesting automation.
HARSHIL: That's interesting.
JASON: That's not weird, that's just great food. I agree. It was something I hadn't heard of a lot of people doing at the time. It's a lot more normal now with stuff like GrubHub and services like Blue Apron and things that do more of the meal delivery service. I don't think Blue Apron existed at the time I did this. I knew somebody who cooked, they were looking for extra cash. I was looking to cook less. Can I give you an extra hundred bucks on top of my grocery bill and do this thing. I was severely underpaying this friend in retrospect. Should have cost so much more. But it was great for me at the time.
HARSHIL: Yeah, this reminds me, one of my colleagues does something similar. He wants to go to a particular gym to do particular classes. But that is quite popular and they get booked so quickly. So, he has this automation which would -- will find the time in the calendar, see if he's available or not. And if also that class is available or not and he will get that booked automatically for himself.
JASON: Oh, that's really cool. I'm gonna run through some of the ideas that came in from the chat. Ben says one time I automated notifications to the updates to the menu for the tap at the local bar. Putting tables in my thesis. That's pretty wild. Let's see... what else is in here. I think people making fun of my food habits. That's fine. That's fine. Automated sending a good morning SMS to my girlfriend in the morning while I was slipping. She figured it out when it glitched. Awww... I would say that's a good example of using automation for evil. Don't do that. No, but actually, that's a good follow-up question. When are -- what are things that you shouldn't automate? Like I would argue -- and not to call you out, BigJim, I'm not meaning to make fun of you directly. I'm not a big fan of not automating human connection. I try not to do that. What are some things that you don't automate?
HARSHIL: I would agree with you, whenever it comes to interacting with people. That process should not be automated. Because like you can automate a certain part of it, I would say. But always have -- it should not be completely automated. So, always have kind of a man in the middle process. So, before sending out a message, maybe get a notification on your phone, check if it's correct or not. And then hit the send button so that it gets sent to them. Search processes where you are communicating with someone should not be automated. But if you want, make sure the content is correct and you're not sending anything wrong to them.
JASON: Yeah. Yeah. That's actually -- so, I have a lot of automations in place for Learn with Jason. And each of them has a manual review step before it goes live. Yeah, I think every one of them has a manual review step before it goes live. But I do the starting soon image is automatically generated using my Sanity API. And I have a wrapper on top of Sanity and Cloudinary, right? And then the -- the text here in this section, all of that stuff is brought in through an API. And, this automatically updates for every episode. And I have, you know, different automations to send calendar invites to the people on my team who update the website and do the like live captioning is being done. And that invite is automatically sent. Lots of those automations. But each of those is intercepted by a person. Either I'm looking at the, you know, the image that was generated before we go live. Or like Brenda, who helps with all the scheduling for White Coat Captioning is looking at the invites and making sure we all clarified it and all that stuff. I think it's really, really fun. But that human review step is really important. At least at first. You got to work the kinks out. When something is so automated that it never changes. Like my air-conditioning, for example, is on an automation schedule where it warms up in the morning and cools down at night. And all those things. No one ever reviews that. Maybe once a year I'll bump that around and decide that I want it to be a half a degree warmer or something. But it's really not a -- that's not a process you need to look at. Right?
JASON: But that's because it's been -- we tested it so much and we decided that this was where we were comfortable and now we can ignore it. But there was that human review step at first.
HARSHIL: Exactly, yeah.
JASON: Let's see here. But, yeah. Lots of -- lots of things like that. Let's see... oh, we got one. The -- I had a senior developer that found out the coffee maker had IoT, scripted out the perfectly hot cup of coffee based on how long it took to walk from his desk to the coffee maker. I love -- you know, one of my favorite things about -- about being in a community with a bunch of nerds is that people will figure stuff out, like how long it takes to walk to the coffee maker and time their coffee that way. Just genius. Okay. So, let's talk a little bit about n8n specifically. So, what is n8n? Like what -- what problem is it trying to solve?
HARSHIL: So, it's trying to solve the problem of giving everyone, you know, an ability to automate workflows or create automated workflows. Now, oftentimes as developer because we have the technical and coding knowledge, we can go easily with that. But people who are not so good at coding or lack a certain kind of knowledge around programming or coding, it becomes difficult for them to get into the space there. Have to, you know, learn coding which becomes a kind of a hurdle for them. Because they cannot spend too much time and do that. So, what n8n does, it gives them the power. So, it basically gives them a nice UI which they can use to integrate different things and create their own automation workflows. So, it's -- and like think of it as you are creating -- you are writing code. But you are using flow charts.
JASON: Nice, nice, I like that. And there's a question in the chat from Chris. Is n8n like is it a shortened word like a11y is shortened for accessibility? Is n8n short for something?
HARSHIL: Yep. N8n is short for nodemation.
JASON: Nodemation. Okay. All right.
HARSHIL: So, n8n, all the integrations in n8n we call Node. And n8n is built using Node.js. That's why the name Nodemation.
JASON: Got it. Little history there. I think I could ask you a bunch of abstract questions about n8n, but I think it will be easier to show how it works. Let's do the switch now. And we'll jump over and do a little bit of code. So, bear with me while I switch over to the pair programming screen.
HARSHIL: Let's do it!
JASON: Hello, everyone, we're back. It's time for pair programming. Before we do that, a quick shoutout to the sponsors and captioning. We've got Amanda from White Coat Captioning here writing down everything. If you want to follow along in text format, you can do that. That's right on the home page of the site at learnwithjason.dev. That live captioning is made possible through the sponsorship of Netlify, Fauna and Auth0. All of them are kicking in to make this show more accessible. Which means a lot for me, and I hope it means a lot to you. I'm on the hunt for new sponsors. If you and the company are interested in making this show more accessible hit me up. Get in my DMs. Talking to Harshil today, right at the link there, or Harshil.dev. And talking about n8n, which is at n8n.io which you can find there. All of these links will be in the show notes as well. And this is this GitHub Wrap as well. You can check that out and give that a try. This is one of the many XKCDs on automation that we were referencing today. If I want to do some work with n8n, I want to automate something, where should I start?
HARSHIL: Right. So, it depends on how you want to do it. You can run it locally on your machine via the npm package.
HARSHIL: You can sign up in the cloud if you don't to want manage your own servers. We recently launched n8n job app, empowering people who don't want to sign up on cloud or run it via the npm package. They can download it and use it on their own machine.
JASON: Oh, interesting. Cool. You know what? This is a coding show. Let's do it locally through some code here. So, let me get into the Learn with Jason. Am I gonna write these workflows locally. Is there a repo I can share at end?
HARSHIL: No, but you can share the workflows. It gives a JSON file at the end.
JASON: I'll put the workflows in there. A new directory called n8n workflows -- I'll call it automation. And then we'll move in here. All right. Okay. So, I -- I have an empty folder. And I want to use the n8n package. So, where do I start?
HARSHIL: So, you can install n8n globally if you want. It's like npm install-g, n8n.
JASON: Do I need a certain Node version or anything like this?
HARSHIL: Currently the code is Node version 14. You have to make sure that you are using that.
JASON: Okay. Node 14. So, I'm using 14.8.3. Then I'm gonna npm install-g, and you said n8n?
JASON: Okay. So, we're gonna get that installed. I see -- oh, what's up, Hojo. Welcome to the chat. Actually, Hojo was on the show when Ben did a takeover. So, we'll go here, and then we'll go to the search. And then we're gonna search for Hojo. And there it is. So, this was a show when Ben took over and Hojo came and did a whole thing on n8n. If you want to dig in deeper, this is a great one to watch. Hojo's got some wild animation put together with n8n. That's a good one to see some of the really cool stuff that you can do and really dig in deeper. Let's see. Are we installed? We're installed, hey! All right. So, we've got n8n. There it is. And if I do a n8n-v, we're at 158.0.
HARSHIL: That's perfect. And now start n8n by running n8n start.
JASON: N8n start.
HARSHIL: And it will start on the server for us. Yep.
JASON: Okay. And I can press O to open in browser.
JASON: I love it. All right. Let me drag this window on over here. There it is. Is it gonna let me skip this? Yes. Okay. So, I have -- I have skipped the onboarding. Sorry to your marketing people who have no idea who I am now. And I see a node. So, this is kind of what you were talking about what you said it was Node-based. I have a start button.
HARSHIL: A start, yep.
JASON: Nothing happens.
HARSHIL: nothing happens.
JASON: Kind of a workflow thing here.
HARSHIL: Every time you start a new workflow, there is a starting point of the workflow. You might want to run the workflows based on events. We would use different kinds of nodes called trigger nodes. We will get into that later on.
HARSHIL: If you click on the plus button, it will open the nodes panel and you can figure out all the different kinds of nodes that you want. We have categorized the nodes so it's a bit easy to find out what kind of function you want to run.
JASON: Wow. Okay. There's a lot in here. All right. So, we've got communication stuff... okay. So, like I said, I have not looked at n8n before. I was not expecting it to be this comprehensive. Like -- like -- and I realize that sounds like I was -- I had low expectations. But honestly, I didn't expect to see quite so many services hooked in here. This is a ton of stuff that you can mess with. This is fun. This is really cool. All right. So, what's a good place to start, I guess?
HARSHIL: The good place is to start up at what do we want to do today? What do we want to automate today?
JASON: So, I think we had talked about doing kind of -- let's roll our own newsletter. So, if I want to roll my own newsletter, what should I start? Or how should I start?
HARSHIL: So, the first step is we want to get some tables, right? Maybe have a form where people can fill out their information. We can do this in two different ways. Number one, we can have Netlify functions, sorry, Netlify forms. And the Netlify trigger flow which would trigger our workflows whenever someone submits that information. Or have n8n sub that page for us. That's something that's really cool and I really like, you can show your own HTML pages with n8n. When someone hits that endpoint, it gives you that page and people can sign up on that page.
JASON: Interesting. So, given that we have just about an hour. What's the fastest way to get here? I am confident that I can code a form really quickly. So, depending on how much additional automation we're gonna do later on, I'll let you make the call on which is the faster way to go.
HARSHIL: Let's do it with the webhook approach.
HARSHIL: All right. So, the first thing we would want to do is add a webhook. Now, there is something we need to know is whenever we are using any kind of trigger nodes, we want to make sure that we start the n8n tunnel. Because that is how it will make the webhook accessible on the Internet. So, you can start n8n running n8n start--tunnel.
JASON: We are tunneling.
HARSHIL: Perfect. Now we can go back to n8n instance. So, let's go to the URL that we will be using.
HARSHIL: And now click on again the plus icon on the top. And search for webhook.
HARSHIL: Yeah. Exactly. And let's keep it as a get request because we want to serve our page. And if you can scroll down. Now, we can also select HTTP method. It can be get, post, or head. For now, we're just going to leave it to get. And we can also customize the path. This can be something like sign-up. So, your URL will then change.
HARSHIL: So, if you now scroll a bit up, you will see that the URL and then sign-up. And we want to respond to this not exactly immediately. We want to show a page. We would see like when last node finishes.
HARSHIL: Yep. And let's select Add Option. Okay. So --
JASON: Add option. Got it.
HARSHIL: And we will select property name. In that, we can label that as data. It's completely fine.
HARSHIL: And we can close this. And we can add another node which will be a set node.
HARSHIL: This is the one where we'll be setting up the HTML page. The first thing we want to make sure is we only send out the HTML page and not the input coming on from the webhook.
HARSHIL: What you want to do is toggle key set to true.
HARSHIL: And then we can add value, select string. And now over here, the property name, we need to change it to data. Because that's what we were referencing earlier.
HARSHIL: And in the value, this is where we will paste the code for the HTML form.
JASON: The code for the HTML form?
HARSHIL: Yeah. So, if you click on --
JASON: All of --
JASON: Okay. So, I'm gonna do a really quick and dirty. And to keep it really simple, I'm not going to put in a name. I'm just going to use email. Is that okay?
JASON: So, we're gonna do label for email. And we'll say email. And then do an input type email, id, email, name, email. And then we'll send a button -- whoops. button type, submit. And we'll make that say subscribe. Do I need to add anything else here? Do I have to tell it where to submit to?
HARSHIL: We do. But right now we don't have that endpoint here. So, we can sort that in the next step.
JASON: Okay. And this is autosaving, I assume. So I can just close it.
HARSHIL: Yeah, you can close it.
HARSHIL: Close this one as well.
HARSHIL: We'll save the workflow first so our webhook gets distributed.
HARSHIL: Now you can copy the work -- webhook links if you open the webhook node. And click on, yeah, the test URL.
JASON: Got it.
HARSHIL: And click on the execute node button on the top. And now in the browser, just make a request with this URL.
HARSHIL: So, now we have the HTML form running here. So, what happened is we sent the request to n8n. N8n gave us back the information that we asked for. Now, the next thing we want to do is make this form work. So, if you send the request, nothing is gonna happen.
JASON: Right. It will be -- it should I think just submit to itself. So, let's do this. I'm gonna hit the button and we should just see the email come up in the query string.
HARSHIL: It's gonna give --
JASON: And it does, and it doesn't like it. Because we didn't hook it up.
HARSHIL: We didn't, yeah. Because we in the test mode, n8n is gonna listen to the request only once. So, we will have to again start the tests over so they can listen to the request.
JASON: Got it. Okay. Got it.
HARSHIL: Perfect. Let us have another webhook which would listen to this incoming request. So, what I would do is, hover over the webhook node.
JASON: Hover over.
HARSHIL: And there is a duplicate option. Duplicate this.
HARSHIL: Change the end point, sign-up, maybe we call it register.
HARSHIL: And do we want to send a user a success message? Maybe thank you -- something like that.
JASON: I think so. Do I need to get the email out or anything?
HARSHIL: We will do that later on.
JASON: Okay. Great. So, then I can duplicate this. And can I just like connect it?
JASON: Oh, that was very intuitive. I like that. So, let's dig in here. And I want this to be... I was just watching Brooklyn Nine-Nine again so I'm thinking about Die Hard constantly. That will be our success message.
HARSHIL: And the last thing we want to do is change the form submission action.
JASON: Change the form submission action. And that needs to be -- oops.
HARSHIL: In the set node.
JASON: This one, right?
JASON: Okay. So, I was taking this one and then I go in here and I need my form, action. Is that right?
JASON: Okay. So, now I go to this one. And I'm gonna execute.
JASON: And then I need this one to be executed -- oh, they're both executing.
HARSHIL: No, they're both executing.
JASON: Got it. So, let me go back here? All right.
HARSHIL: Yep. Now before submitting, just make sure that you execute the workflow again. Because the workflow has executed and stopped.
HARSHIL: Now, if you subscribe, it should send us a message.
JASON: Hey! And there's our email.
HARSHIL: And now what we want to do is in this webhook, if you click on JSON response, right after table.
JASON: Here, yep, got it.
HARSHIL: In the center, yep. If you scroll down a bit, you will also see the response here. Now, what we can do is we can set it -- we can add it to a database. You know, it can be any kind of database that we want. Is this a Google sheet or add table, whatever you prefer. Once we have that information stored in a database, we can send the user a verification email so we can generate a verification code. Send them that unique link. Once they click on it, another webhook runs. It checks the verification box alongside that user email. And then we can send them an email.
JASON: Okay. Let's maybe skip the database part because we don't have time for that. But let's -- let's do the verification email. Does that seem good?
HARSHIL: Good. Yeah. Let's do that. Perfect. Now we can close this node.
HARSHIL: And we are getting the response in the webhook, one node. And remember in the webhook 1 node, we set the response coming in from the last node. So, all the nodes that we are now gonna add has to be the webhook 1 node and the set1 node.
JASON: Got. So, I need to put a new node in here.
JASON: And I do that by this button.
HARSHIL: Clicking on --
HARSHIL: We need to send an email. Which one do you want to use for that? You can use the send email node itself, which is the send email node. But for email, one thing we need to do is we need to create credentials.
HARSHIL: No. If you open the send email node.
JASON: Oh, email.
HARSHIL: Yeah. Select the Send Email one. And if you see, we will have to set up the credentials for that.
JASON: Which we don't have.
HARSHIL: Which we don't have.
HARSHIL: Right now... hm.
JASON: I have a SendGrid account. Can we connect with that?
HARSHIL: We can do that.
JASON: Okay. So, let me add SendGrid. And if I want to create new -- is this -- okay. So, this isn't something that you can like pull in? All right. Let me get over to SendGrid. Probably gonna have to do some of this off-screen to not show that API key. I can't remember -- actually, I can't remember if SendGrid shows that if you log in. I'm gonna login offscreen to make sure that I don't accidently have to go roll all of my keys. Because I really don't want to do that. Emailing me a key? Oh, there it is. Okay. Hold on. Two-factor auth... there we go. And where is my key?
HARSHIL: Yeah. So, it would be under settings.
JASON: Okay. So, I'm going to -- I'm in SendGrid here. I'm gonna go to settings and API keys, I'm not gonna do that on-screen because I don't remember if they are hidden or not. They are hidden. So, I can -- that's the public one. But this is the actual key. So, I need to get that. And I'm gonna actually have to create a new one, I think. So, let's create a new one. This is gonna be called n8n. So, I -- fine. Yeah. We'll create this new key. I've got the key.
HARSHIL: Just for anyone who is new to SendGrid or any of the services, we also document all the steps so that you know how you can create those credentials. So, in the credentials window it says, there is an open docs link. It will take you directly to the documentation page where you can follow the docs and then create the credentials.
JASON: Great. So, I hooked up my SendGrid account, I have an API key. We are ready to do stuff. I don't know how this works. Maybe we go mail?
HARSHIL: Mail, yes.
HARSHIL: Send a email.
JASON: Yes. And I need to double check what the email is that I've set up here. Sender authentication. I have -- I have JamstackConf.com set up as a valid email. So, let's do that. We'll do a email@example.com. And sender name will be here. This one I want to pull out of --
HARSHIL: Yep. We click on the calls icon and add expression. Now this is coming in from the previous node, so, your current node. Input data.
JASON: Input data.
HARSHIL: JSON, query, and then the email.
JASON: That was easier than I expected. That was really nice.
JASON: Very cool. That did exactly what I wanted. So, that's wonderful.
HARSHIL: And the subject here...
JASON: The subject, we can be like, confirm your email address. And we could use a dynamic template, but I'm not gonna do that. So, then our message body -- how do we get a verification link in here?
HARSHIL: So, we can do -- we can concentrate our own -- so, once we store it in the database, we can give them a unique ID. And ask them to go to that unique -- to that link. This can be another webhook URL with the query parameter of that unique ID. It will then go to that database, check if that unique ID exists or not and then, you know, update that. So, that, if you want to do the database, if you want to include the database. I think for now you can have the same URL and just share verified.
JASON: Okay. So, do we... are we setting up another webhook for that? Or what's the --
HARSHIL: Yeah. Let's set up another webhook.
HARSHIL: We'll call it as slash verified.
JASON: Okay. Please verify your email address by clicking this link. And we need to set that up. So, we'll set this one up. Okay. We'll go here. Then I need to duplicate this one. And this one is going to be verify. And that... this all stays the same?
JASON: Okay. And then I need to -- I mean, really just send a message, right? So, I can just truncate this one.
JASON: And this is going to return -- I'm keeping it simple so we can get it done within the time that we have. So, we'll just post a message that says you're verified. I'm gonna hook that up. That's so slick. Okay. And then --
HARSHIL: And we want to copy the link.
JASON: That's right. So, I'm gonna copy this one. Head out to here. Go into my body... good. K.
HARSHIL: And you can execute this need, directly. Just execute the SendGrid node. You can do it from scratch.
JASON: Execute it directly? I can execute it directly.
HARSHIL: Now we will have to execute the whole work flow because there is no data in there.
JASON: Okay. I'm signing up. I'm going to do this again.
HARSHIL: We have to make --
JASON: All right. We'll start it. I'm gonna reload. Okay. And then I should --
HARSHIL: It already sent you the message.
JASON: All right. So, I can now see that I have an email here. And it says, please verify. We've got this link here. Looks like SendGrid obfuscated it for us. Which is fine. And now I'm going to...
HARSHIL: We have to execute the workflow again.
JASON: Okay. So, let's execute the workflow again and then I'm gonna come out here.
HARSHIL: You executed the node.
JASON: Ah! Okay. All right. Let me execute the workflow. And we'll click that again and now we're verified.
HARSHIL: You're verified.
JASON: All right. This is slick!
HARSHIL: So, what we did is we created the sign-up -- the whole sign-up process for a newsletter. But I am saying it for the newsletter. But it can be implemented for almost anything.
JASON: Yeah. I mean, this is -- and this is really nice because, you know, I'm seeing here like there's -- there's a lot of glue code that we would need to make this stuff work, you know? We would have to go in and, you know, and we can make it simple. Like you could set up a serverless function for this and it's not that much glue code. But, you know, this -- this UI-driven side of things is pretty nice. Where, you know, the code we're writing is like the actual messages. The form you see. It's the message you should see. That is -- that's pretty slick. So, good! Okay. All right. What... what should we do next?
HARSHIL: Now that we have the subscribers, we want to send them some good content, right? So, I had this crazy idea that I always wanted to try out but I could not. It's to, you know, create a space where I -- whatever I read, I make notes of that and then share it with the people. So, based on how -- what kind of process you use, if you use a table, notion, rain drop, whatever. You get that information. Hook it up in, you know, if you're using SendGrid, create a template and hook it up in that and then send the people those emails.
HARSHIL: I want this to be completely automatic so I don't have to go ahead and do this every time. So, for that, there is another node which is a trigger node which is called the cron node. We can use the cron node to tell n8n, hey, you should run this workflow at this particular time of the day, month, year, whenever you want to do.
JASON: What was it called? Sorry?
HARSHIL: Cron node. C-r-o-n. Yeah.
JASON: Okay. So, I have a -- an add cron time.
HARSHIL: And we can --
JASON: I need to run this every minute so we don't have to wait very long to see it work.
HARSHIL: But because it's in test mode, we can select whatever time we want.
JASON: Every week on Wednesday at noon I want to send out my --
JASON: Yeah. And we could do it more than once too. We could do it every Wednesdays and Fridays or something like that.
JASON: Okay. That's cool. And there's a whole -- yeah. Retry on fail. Continue on -- this is all very cool. All right. So, that makes sense. So, we've got our cron node. Then what?
HARSHIL: Then what? Let's see... because we don't have any data right now in our table or anywhere, what we can do is maybe get some information from the Pokemon API and send that in the newsletter?
HARSHIL: So, now if you search for Pokemon, you definitely are not gonna find a node.
HARSHIL: But there is a node that's called HTTP request node.
JASON: All right.
HARSHIL: So, with this node you can make any kind of HTTP calls.
JASON: Actually, you know what I have is I have the API for the schedule. So, that's an easy one. It gives us some data that I'm familiar with and it's not super-big. So, it's a pretty light amount of data to grab. So, we can go in here and we'll do a get request to the schedule. We're gonna get a response in JSON. There is no authentication required. Do we need anything else?
HARSHIL: No. We might need something, but let's just execute and see how this works.
JASON: Required -- okay. Let's execute. There it goes.
HARSHIL: There it goes. Now, if you -- what we are seeing on the top is it says one item. But your error can't be multiples. This is something that n8n does. All the data it's coming in, it wraps it up into an error. And we don't want to do that. What we can do is go to options and then add option and then split into items. And then toggle it to true. And now if you execute this node again... we see six different items.
JASON: Perfect. Okay.
HARSHIL: Great. So, now we have this -- assuming we have a template already created, what we can do is we can send this to subscribers. And we can again, yeah, just go with SendGrid.
JASON: Okay. And we're gonna mail, send. Okay. Let's see. So, we called that firstname.lastname@example.org. And the sender name was Learn with Jason. Recipient domain -- should I hard code this, or is this gonna come through on the rest of the workflow?
HARSHIL: What we should do is we should first get the contact information. So, instead of selecting the mail resource, I would select the contact resource first.
JASON: So, we don't have that just yet.
HARSHIL: Yeah, we don't have that yet.
JASON: So, in the ideal flow what would happen is we would use SendGrid to store our contact.
JASON: And then we would use this contact resource which would let us find one.
HARSHIL: Find one or get all.
JASON: Or get all. And then we would be able to -- yeah. Get all of them and then send on each one. But we don't have that set up. So, instead we're going to send an email. And dang it, it got rid of my stuff. Okay. Noreply@jamstackconf.com. And the sender name is Learn with Jason. And the subject, upcoming Learn with Jason episodes. Okay. And we don't have a dynamic template. But we could grab one out if we needed it. So, then we get a message body. Can we do formula stuff in here? Add expression? Oh, cool. Okay. So, nodes. And then I get --
HARSHIL: HTTP request.
JASON: Output data, JSON. Then -- oh, this is cool. Okay. So, I want the title and then -- can I make this into like custom stuff? Like can I do a... a thing like -- or I guess it would be like here. And then because it's... this is plain text, right?
JASON: So, we would just kind of put this out here. And then I would be able to put in the slug. Current. Right? And then that gives us that. And then can I loop through these? Or is it automatically going to loop through these?
HARSHIL: So, what is gonna happen right now, because the previous node items, it is gonna send out six different emails for each of those items.
JASON: Oh, okay. I got you. I got you. Whatever, that's fine. We'll live with that for now. We would change that in the future. But then I can put in the -- do I have a description in here? Yeah, let's put the description in here. So, yeah. Seems okay.
HARSHIL: It's good. Looks nice.
HARSHIL: Anything else we want to add over here?
JASON: I don't think so. I think this is fine. It's good enough for a demo.
HARSHIL: All right. Let's test it out, then.
JASON: Okay. So, I'm gonna execute just this node I think, right?
JASON: Okay. So, I'm executing the node. Going over to here. I'm going to have... well, that's a verification. Let me get this off-screen so that it's not showing all my business. And... oh. Bad request.
HARSHIL: We don't have the subject in there.
JASON: Oh! Oh, you know what I can do? I can add an expression. And I can say, New Episode Scheduled. And then we can put input data. I can already see how useful this is. Okay. So, we've got that. Now I'm gonna execute the node. It did the thing. There's my six emails. And I'm gonna try to shrink this box so that we only see those ones. Yeah. Let's check this out. Here are our emails. And each one of these, that's a little gross, but that's fine. And then we get a date, we get --
JASON: Yeah. This is awesome! And then if I click this, I'm gonna copy it so that it opens in this browser. It picked up my parentheses. So, I need to fix that. But otherwise it worked. This is slick. Like, this is really cool that this -- this just works. And like how quickly we were able to put all of that together. This is -- this is powerful stuff. Like we -- I'm kind of honestly kind of at a loss as to how quickly this all happened.
HARSHIL: I know. Like honestly, I hope my colleagues aren't watching. But most of my work is being handled by the Internet itself.
JASON: No, this is the dream, right? We all -- as developers, we want this stuff to be, you know, we want this to work. And what I think is cool about this, like what we've -- what we've got here is -- so, for example, we could do something like a weekly email that checks the schedule and checks like the previous instance of the schedule from last week and grabs anything that's new. And I could send out a digest of here are the episodes that got published last week, and here are the episodes that got scheduled last week. I could get all of that information and send it in one email all automatically using this format.
JASON: Okay. There is a really high likelihood that I am actually going to do that. Because it's just really nice. Like I have meant to do that sort of thing where we send out like a digest of what's new in Learn with Jason. Nobody has time to write that. And I would love to have it. But we just -- I think we've sent it out maybe twice. Which is not great when you're like, oh, yeah, I'm gonna start doing this thing and then you do it and you're like, crap, I was very inconsistent on that. This is really, really slick. So, you know, when we started, like before we actually opened the show, we were talking about everything we wanted to accomplish and how it was really ambitious and we were gonna run out of time. We're now 30 minutes ahead schedule.
JASON: So, what else should we look at? What else can we -- clearly we've got dozens of things that we can do with n8n. So, with the 30 minutes we have left, what else do you want to show off here?
HARSHIL: Maybe like we can try to be ambitious over here and see if we can hook up Twitch with n8n. Because you do a lot of livestreams and you might want to do that.
JASON: Yeah. Let's... oh, no Twitch.
HARSHIL: That's the thing, we don't have a Twitch node yet.
JASON: Okay. All right.
HARSHIL: But we can easily hook up n8n with Twitch. Which involves a couple of steps. So, we are basically what we are basically gonna do is subscribe to the Twitch API. Or the Twitch webhook in a way.
JASON: Okay. So, this would be...
HARSHIL: What --
JASON: Start the workflow when it's called.
HARSHIL: Let's create a new workflow from scratch because we don't want to mess with this one. We save it. You can save this workflow.
JASON: This one.
HARSHIL: On the left-hand side. That is a new option. Yeah.
JASON: Okay. So, this is going to be --
HARSHIL: All right. Let's do this.
JASON: K. So, I'm saving that.
HARSHIL: Let's do this. Before moving to the new workflow, let's show how you can download it and how you can share it with others.
HARSHIL: So, there is an option you see that says download. If you will click on that, it will download the workflow and this is a JSON file.
HARSHIL: The cool thing is, it does not download the credentials. Your credentials are still saved for you. But you can share it with others. They just have to set up their own credentials and then they can use the workflow out of the box.
JASON: Great. Okay. So, I have downloaded this. And I just set it up. And so, now we have that automation there. So, let's do a GitHub repo create. And then I'm gonna copy this. All right. Make it public. Yes. Okay. And then I'm going to get add all, great. I want to look at this before we do it. Let's pop this open here. And here we have our list of nodes. So, we've got our base start. And like I should probably be -- so, this base start we're actually not using, right?
JASON: Then we've got a sign-up through webhook. Webhook ID is here. Parameters are data. We've got that. Here's that form we wrote. That's the set node. So -- and these are the things like, I should change these. I didn't do this before. And we'll see if this explodes. I could have named each of these steps. And said like, you know, setup, sign-up form and like handle submission and send email and all that stuff. But we just didn't do that. So, then I've got all my nodes here. And let's get down to... here is my SendGrid. And it says which credentials to use, but they're not included.
HARSHIL: Yeah, they're not included.
JASON: Okay. So, I'm gonna do a quick just find for SendGrid. Right? And at no point does the SendGrid API show up. And like if I check credentials... there's no API keys here. So, this is all -- this is nice. Like I like this. I can send this around to my team. You know, we can use whatever service we need to share those credentials with each other securely. And theoretically publish this stuff out. And what's also exciting about this, here's something that I think is cool. If I am a company, for example, and I want to create some easy ways for people to use my service with other things, I could publish this as a workflow and say, if you want to set up your SendGrid account to have a sign-up flow and then send whatever this thing is from your API, here is a starter that will get you like 90% of the way there and you just have to go mess with this template for what goes into the email and add your --
HARSHIL: Exactly. Exactly.
JASON: That's cool.
HARSHIL: And we also have a workflows repository where people who have their own workflows who create the workflows, share there. So, if you go to n8n.io/workflows. Yep. So, this list, I don't know how many workflows. But there are some cool workflows in there. And you can search those workflows based on the nodes that you are interested in. You see what people are building with such particular nodes.
JASON: Very, very, very cool. So, here's I mean, just tons and tons and tons of things in here. And are these curated? Do I submit to these? Or how does this work?
HARSHIL: Yeah. So, people submit these workflows. You have to create an account on n8n.io to submit this.
JASON: Nice. Really cool. Okay. So, we've got all that. Let me commit and... say feature: Add a newsletter workflow. Okay. So, then I'm gonna... push that up. And now we go here. That's the wrong window. We're in this window. We've got our newsletter JSON. So, if anybody wants to go check that out, there you go. This will also be in the demo of the -- the demo option for the episode details. Okay. So, we've got that. And then we were gonna do another one. And so, I need to restart n8n. Do I need a tunnel because we're doing n8n start...
JASON: Tunnel. And we're gonna grab that out.
HARSHIL: What we did right now is we -- while we were building this, we were testing it and that's why we always had to run the workflows manually. But onces that complete, what we can do is we can activate the workflow. And once the workflow is activated, instead of using the test URL from the webhook, all we have to do is use the production URL.
JASON: Yeah. And I just -- I can't test this anymore because I just went and deleted that SendGrid API key because somebody -- let me go check -- Madriax warned us a second ago, because the tunnel was live, somebody could have gone in and grabbed that API key. So, I have now deleted the API key. So, it's no longer valid. But! That's fine because we already did that part. We're on to the next thing. So, I'm gonna create a new workflow. And for this workflow, we're not gonna use the start. So, I'm gonna -- let's do this one a little bit cleaner, right? So, I'm gonna delete this -- can I not delete this one without creating --
HARSHIL: Started, cannot be deleted.
JASON: Okay. Even if I have a different one like a webhook trigger or whatever.
HARSHIL: Yeah. You cannot delete the start node.
JASON: Oh, I understand. Gotcha.
HARSHIL: But you can base on it if you want to.
JASON: Okay. So, I've got a webhook and we wanted to hook this up to Twitch. So, what -- yeah. I'm actually -- now I'm at a loss. I'm not sure what to do.
HARSHIL: Yeah. So, what we can do is we will have to create an application on Twitch. You also need to have the Twitch CLI installed.
JASON: Oh, we might not enough time to do that.
HARSHIL: That's what I say. That's why I say like we can be ambitious.
JASON: Yeah, let's maybe get a little more conservative and maybe do something that doesn't require -- I just -- whenever I get into the Twitch developer stuff, it always takes longer than I want it to. So, I think for the sake of not ending on a mid -- a halfway-finished project. Let's maybe not do the Twitch thing. So --
HARSHIL: So, go ahead.
JASON: Well, there are a few things that are kind of interesting in here. So, what might be worth talking about are the -- the high-level flows. So, one flow that we just looked at is the webhook. Another one that is kind of interesting is when something happens from a -- an external source. Like, for example, we've got, you know, in app.netlify.com if I want to rebuild a site, I can... let's grab one of here's like an Eleventy site. And I go into my build and deploy. And we can do build hook. So, if I create one of these, then calling this causes the site to build. But what if I want to listen -- what if I want to listen for like a build to start? Or something like that? If I don't have the ability to call an n8n webhook, is there a way for it to listen for events?
HARSHIL: It has. So, if we go back to n8n. There is a Netlify trigger node. If you search for Netlify.
JASON: Oh, wow.
HARSHIL: You can see, we have two different nodes. If you want to listen to events, use trigger node. And then if you click on the event, yeah, we can see, you know, what we want to do.
JASON: That's cool. Okay. So, it does all this for us. That's slick. And so, as a... like with other services here, I assume you've got kind of similar setups where depending on what we're doing, we can listen for certain events. Assuming there's a node for that thing.
JASON: So, this is huge, then. So, what this could do is I can -- I can kick off a workflow like if my deploy fails, I can page someone.
JASON: Or post to Slack. Or send an email. Or send a text message or whatever it is that I want to do. Or even like Tweet, right? Like I could have something where whenever -- here's an idea for an open source project. Whenever the site builds for production, we could kick off something that would go through the commits, build a change log, and so you could run something like conventional commits or the change log CLI. And then you could email that change log to everybody who is on the mailing list. And you could Tweet and say, you know, whatever version just got released, like docs are updated. Click here for details. And that could link to the change log.
HARSHIL: So, we kind of had that process. So, we have the -- have this quarterly hackathon we call Hack Mission, which is hackathon plus automation. And one of my colleagues did exactly the same.
HARSHIL: They created a workflow that would automatically do through the commits after every release. Create the change log and send it in Mattermost.
JASON: So cool. Click on the trigger tab. Okay. So, here's stuff that can be triggered. So, yeah. We can listen to -- god. Just so many services here. Form.io, get scout, Mailchimp, what else? SurveyMonkey. I can see -- okay. Here's a use case where I see this being really, really powerful. We have a lot of folks on our team who can code. But they prefer not to. And we have folks who are like if you put their feet to the fire, they will code. But it's not really their comfort zone and they always feel like they're doing it in a way that -- they just feel like they're doing something that's not really their job. Like our UX research team, for example. They can code, but they wish they didn't have to. And -- and so, in a situation like this, if they're running a -- a survey, they want to do something like when results come in, they want to post those results in Slack. Or when results come in, they want to send a daily digest to the research team that says this is all of the submissions that we got today. Or just any of those sorts of wrap-ups or roll-ups of data. Right now, if the service offers that, they will use it. But if they need to do anything custom, they're kind of frustrated because they -- they don't really want to try to custom code anything. They don't really have the bandwidth to go ask for another team to come in and help. So, this suddenly unlocks a lot of potential here because now if they're using, for example, SurveyMonkey, they can just say whenever -- okay. Whenever the collector gets an event of response completed, I want to send an email. And they can just build this from drop downs instead of -- instead of stuff like that. That's really, really cool. And I'm assuming that we've also got -- yeah. We can do Slack things in here. I can -- I'm gonna skip the credential part. But I can do a message. So, I can -- ah, dang. So, we can send things. Ephemeral -- that's cool. I need to get somebody from the Slack API team or somebody in the Slack API to show the potential of Slack Ops. Because my goodness, there is some potential. But just some really incredible stuff here. I'll give you another example. I as in any management role, I need to collect and share data with other people around the company. To say, all right. We have -- here are some metrics for the team. Here are some of the things we accomplished. Here are some of our upcoming projects. Here's where to go if you need information, et cetera, et cetera. That type of information needs to be aggregated. And I am so horribly, terribly bad at it. So, it's inconsistent. I, you know, when I get it put together, it's usually like junky notes that aren't formatted very well. I'm now kind of imagining like if I figure out a way to collect those things in say a notion database or an Airtable database or a Google Sheet, then I could set up cron job that will just pull each of those sections, pull them into a formatted, bulleted list with a heading and send that to a Slack channel. As a here's the digest of what happened in the developer experience org in the last month.
HARSHIL: You could take it a step further. And what we -- we do almost exactly the same. But we have built a dashboard on top of that with the tool. So, we now have some pretty-looking charts with all that data. So, we have workflows running every day, every month. Gets those datas. Put them in a postgres database and then we have retool where we have created those charts.
JASON: Okay. Okay. And you're talking about Retool.com?
JASON: Great. Okay. Unbelievable. Yeah. Exactly. Like these are the things that, you know, I -- one of the things that I wasn't ready for when I transitioned out of individual contributor work and into leadership work was how much of the job transitions away from creating. And instead transforms into aggregating and sharing. Your job is no longer to create things. Your job is to, you know, collect values. And then share that context. You're trying to make sure that people are plugged into the right things, that people aren't doing duplicate work. That everybody has connections to the resources they need to get the best outcomes. There's a lot of moving parts in the company, and our function as leadership is to make sure they're not moving independently, they're aware of each other. You as a developer, if you have to check with everybody in the company you're never going to get everything done. It's my job to know what you're doing and know others are working on similar things and go share the contexts to be aware of those things early.
JASON: It takes me so freakin' long to get all that stuff done. And the challenge is you collect some context, but you don't always know where to send it. You're trying to figure out these centralized places and all those sorts of things. And I'm kind of imagining the capabilities that we can put together by using a tool like this. Because I always want to build a tool. Oh, yeah, I could stand up a serverless function and use this API and put all that together and send it to Slack. I don't have time to build that. More so, I shouldn't build that because I don't have time to maintain it. Right? Even if I build it, as soon as something goes wrong or needs to change, I can't -- I won't be able to go fix it. And beyond that, if I do fix it, if I ever change roles, the person who takes my role, they don't necessarily have the same skill-set or the same tools or anything like that. So, they would have to dig into my most likely undocumented, most likely spaghetti-ish, most likely kind of commit messages like damn it. It's not gonna be an easy system to step into. But this is -- this is visual. Being able to look at a workflow like this and see, this one doesn't make any sense because I just put nonsense together. But if I switch so the newsletter, if I named them properly, I have this, I don't have to know how the code works. I don't have to look through 500 lines of code. I can get at least the gist of what's going on. And that is really, really powerful.
HARSHIL: And I have actually talked to users and I have seen that happening in real -- real world scenario. So, one of our users, he was an active user of n8n and he was using n8n in his organization. But he had to change jobs and move to a different company. The whole process of moving -- off-boarding and onboarding a new person was very easy for them because as you know, they had the visual representation out there. For the other person also it became really easy to understand what this flow does. What is happening in each of these nodes. And it really helped them with the whole process.
JASON: Yeah, yeah. So, I've got a question from American2050. Talking about code, does this also generate a code version or does it run through the UI?
HARSHIL: So, we are working. There is a POC already created. But it's not tested out yet with all the features. But we are working on the -- on it so that people can run this workflows without having to spin up the UI.
JASON: Nice. Okay. Yeah. I mean, I -- I think this is -- like I said when we started this show, automation is one of those things that developers get really excited about. I am clearly demonstrating that with the fact that I'm like giddy over all the things I can automate. I think, you know, so it's maybe worth taking a quick step back and just adding a reminder. Automation is one of those things that should happen when you have repeatable tasks. Like start automating when the things are actually repetitive. Don't start out by trying to predict what should be automated and automating things that are not automatable yet. Do it manually and figure out where the parts are that are actually repetitive. Because that is a hell of a trap to fall into when you're trying to predict behavior and automate it at the same time. It's not gonna work out. You're gonna spend a lot of time fixing your automation. It's way more work than just doing the thing repetitively before you get the rhythm. I manually managed Learn with Jason for a hundred episodes before getting to the stable place to automate safely. The format is stable. We're working on a podcast version, for example. There are a lot of things I got to think through and I probably won't automate them for a long time. Until we figure out what format should the podcast be? How are we actually gonna publish it? What's the editing gonna look like? What do we need to create on my side? What do we need to create on Chris, my editor's side? All the things that are in motion there, I can't automate that until we've actually locked those things down.
HARSHIL: Exactly. Exactly. And what I have found really useful is just try to document the steps. It does not have to be detailed enough. But just try to document and see what steps you are doing. Because not everything can be automated. But maybe one or two steps of that whole process can be automated. And that can actually save you a lot of time.
JASON: Absolutely. Well, Harshil -- I think we are probably at a pretty good stopping point here. We were able to demonstrate so much stuff. I can't believe how fast we got through what we said we wanted to do with this newsletter setup. I am -- I am truly impressed with the -- just kind of the speed and ease. Like it was very intuitive to use n8n. Which is not always the case with automation tools. A lot of times you kind of have to learn the way the automation tool thinks in order to use the automation tool. And in this case, like there's always a learning curve. But it felt like it was pretty shallow. So, thank you very, very much for kind of spending some time with us today. Let's do a quick round of links here. So, make sure, everyone, you go and follow Harshil on Twitter. Make sure you go and check out n8n.io on the website. And remember that you've got a local version which is what we used today. And then there are also options like n8n Cloud where this is hosted for you. What else do we need? We needed to -- yeah, here's an episode if you want to go deeper. Where else should someone go if they want to go deeper. I'm gonna share that one and the workflows. Any other resources that you want people to be aware of for the n8n work?
HARSHIL: If you want to interact with the community and what other are building, the community forum is the best place for that.
JASON: Okay. Here is a link to the forum. Yeah. This was -- this was wonderful. So, why don't I do a quick round of shoutouts for the sponsors. We have had Amanda with White Coat Captioning with us all day. Thank you so much for spending time with us, Amanda. That's made possible through our sponsors, Netlify, Fauna and Auth0 making this show more accessible to more people. And covering the costs. It takes people, and that's why I pay for it and appreciate the sponsors and what they put into it. Wouldn't be possible without them. While you're checking out things on the site. Make sure you go and look at the schedule. We've got a really, really good setup coming up. We're gonna do a week on music next week. We've got Dan Gorelick is gonna teach us how to code music. We're gonna live code some music. Not just put it together and let it go. We're going to algorithmically generate it. I have seen Dan do performances. They're incredible. I'm really nervous I'm not a good enough programmer to make this go. And we're going to try it. And Char is going to join us and take the music from house and build a live visualization for it. For those that know me, I used to play music and was a musician. This is near and dear to my heart. I think these are gonna be a lot of fun. And Ben Holmes, who is in the chat today, is going to be teaching us about Slinkity. And debuting new features. And tRPC, I don't know a lot about. And planning and content. You should come and learn from Stephanie. And there's more. I have more in my inbox that I need to add to the site. Stay tuned. Let's definitely go click this Google Calendar button. Maybe hit the follow button on Twitch. Whatever it is you do to make sure things are saved and available you. You can also subscribe on YouTube if you want to get the replays of show. Follow on YouTube. Whatever you want to do. I'm not gonna tell you how to live your life online. Maybe hang out. Harshil, any parting words for anybody?
HARSHIL: This is always the difficult session, I feel, of a livestream. But first of all, thank you so much for having me. It was fun to show out n8n and talk about automation and share some ideas. And I am looking forward to all of those upcoming streams. They look really cool. So, looking forward to that. And if anyone is creating any workflows or doing any kind of automation and you want to talk about it or, you know, just chat about automation or n8n in general, just hit me up on Twitter and I would love to talk to you.
JASON: Absolutely. All right, Harshil, thank you so much. Chat, as always, thanks for hanging out. We're going to find somebody to raid, looks like Henri Helvetica is live, thanks for spending time with us, Harshil. We will see you all next time.