[{"data":1,"prerenderedAt":457},["ShallowReactive",2],{"footer-primary":3,"footer-secondary":93,"footer-description":119,"the-changelog-3-october-2024":121,"the-changelog-3-october-2024-next":187,"sales-reps":205},{"items":4},[5,29,49,69],{"id":6,"title":7,"url":8,"page":8,"children":9},"522e608a-77b0-4333-820d-d4f44be2ade1","Solutions",null,[10,15,20,25],{"id":11,"title":12,"url":8,"page":13},"fcafe85a-a798-4710-9e7a-776fe413aae5","Headless CMS",{"permalink":14},"/solutions/headless-cms",{"id":16,"title":17,"url":8,"page":18},"79972923-93cf-4777-9e32-5c9b0315fc10","Backend-as-a-Service",{"permalink":19},"/solutions/backend-as-a-service",{"id":21,"title":22,"url":8,"page":23},"0fa8d0c1-7b64-4f6f-939d-d7fdb99fc407","Product Information",{"permalink":24},"/solutions/product-information-management",{"id":26,"title":27,"url":28,"page":8},"63946d54-6052-4780-8ff4-91f5a9931dcc","100+ Things to Build","https://directus.io/blog/100-tools-apps-and-platforms-you-can-build-with-directus",{"id":30,"title":31,"url":8,"page":8,"children":32},"8ab4f9b1-f3e2-44d6-919b-011d91fe072f","Resources",[33,37,41,45],{"id":34,"title":35,"url":36,"page":8},"f951fb84-8777-4b84-9e91-996fe9d25483","Documentation","https://docs.directus.io",{"id":38,"title":39,"url":40,"page":8},"366febc7-a538-4c08-a326-e6204957f1e3","Guides","https://docs.directus.io/guides/",{"id":42,"title":43,"url":44,"page":8},"aeb9128e-1c5f-417f-863c-2449416433cd","Community","https://directus.chat",{"id":46,"title":47,"url":48,"page":8},"da1c2ed8-0a77-49b0-a903-49c56cb07de5","Release Notes","https://github.com/directus/directus/releases",{"id":50,"title":51,"url":8,"page":8,"children":52},"d61fae8c-7502-494a-822f-19ecff3d0256","Support",[53,57,61,65],{"id":54,"title":55,"url":56,"page":8},"8c43c781-7ebd-475f-a931-747e293c0a88","Issue Tracker","https://github.com/directus/directus/issues",{"id":58,"title":59,"url":60,"page":8},"d77bb78e-cf7b-4e01-932a-514414ba49d3","Feature Requests","https://github.com/directus/directus/discussions?discussions_q=is:open+sort:top",{"id":62,"title":63,"url":64,"page":8},"4346be2b-2c53-476e-b53b-becacec626a6","Community Chat","https://discord.com/channels/725371605378924594/741317677397704757",{"id":66,"title":67,"url":68,"page":8},"26c115d2-49f7-4edc-935e-d37d427fb89d","Cloud Dashboard","https://directus.cloud",{"id":70,"title":71,"url":8,"page":8,"children":72},"49141403-4f20-44ac-8453-25ace1265812","Organization",[73,78,84,88],{"id":74,"title":75,"url":76,"page":77},"1f36ea92-8a5e-47c8-914c-9822a8b9538a","About","/about",{"permalink":76},{"id":79,"title":80,"url":81,"page":82},"b84bf525-5471-4b14-a93c-225f6c386005","Careers","#",{"permalink":83},"/careers",{"id":85,"title":86,"url":87,"page":8},"86aabc3a-433d-434b-9efa-ad1d34be0a34","Brand Assets","https://drive.google.com/drive/folders/1lBOTba4RaA5ikqOn8Ewo4RYzD0XcymG9?usp=sharing",{"id":89,"title":90,"url":8,"page":91},"8d2fa1e3-198e-4405-81e1-2ceb858bc237","Contact",{"permalink":92},"/contact",{"items":94},[95,101,107,113],{"id":96,"title":97,"url":8,"page":98,"children":100},"8a1b7bfa-429d-4ffc-a650-2a5fdcf356da","Cloud Policies",{"permalink":99},"/cloud-policies",[],{"id":102,"title":103,"url":81,"page":104,"children":106},"bea848ef-828f-4306-8017-6b00ec5d4a0c","License",{"permalink":105},"/bsl",[],{"id":108,"title":109,"url":81,"page":110,"children":112},"4e914f47-4bee-42b7-b445-3119ee4196ef","Terms",{"permalink":111},"/terms",[],{"id":114,"title":115,"url":81,"page":116,"children":118},"ea69eda6-d317-4981-8421-fcabb1826bfd","Privacy",{"permalink":117},"/privacy",[],{"description":120},"\u003Cp>A composable backend to build your Headless CMS, BaaS, and more.&nbsp;\u003C/p>",{"id":122,"slug":123,"vimeo_id":124,"description":125,"tile":126,"length":8,"resources":8,"people":8,"episode_number":127,"published":128,"title":129,"video_transcript_html":130,"video_transcript_text":131,"content":132,"status":133,"episode_people":134,"recommendations":173,"season":174,"seo":186},"a5361f29-432a-4602-ae17-57da36b48d19","3-october-2024","1019714535","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month's show includes a community showcase of a form builder from David, Carmen taking you through a docs preview and Kevin with a tutorial on AI web scraping API with flows.\n\n","f3b9ac10-251f-4708-ae07-51a29d1868b6",3,"2024-10-16","October 2024","\u003Cp>Speaker 0: Alright. Hello, everyone. Hopefully, you can all hear me, and I am gonna take a pause and just check that that is the case. So if someone could let me know, that would be great. Oh, I was excited.\u003C/p>\n\u003Cp>Carmen's saying hello, and I'm still gonna wait. Loud and clear. Perfect. Thank you so much, Kevin. Welcome to October's version of the change log from Directus.\u003C/p>\n\u003Cp>If you're new here or if you've, joined us before, welcome. I hope you're having the most perfect day. I hope your day is not too hot, not too cold. It's like the crispest, best version of the day because that is what you deserve for joining us. Thank you for for being here.\u003C/p>\n\u003Cp>We have a great show for you planned. We've got some updates from Brian and myself from product and extensions, we've got Carmen with a docs update for what is upcoming and that's super exciting, we have Kevin with a quick connect tutorial. We've got the community showcase, and we've got a whole bunch of different things. I am joining from London. I would love to know, where you are all joining from.\u003C/p>\n\u003Cp>I can see that the chat is already busy. That is great. Please continue. We have team members in there answering all your questions. So, yeah, if you've got anything that you are thinking about, let us know based on anything we are saying.\u003C/p>\n\u003Cp>We also have the general chat in Discord for afterwards if it comes to you and you're like oh I should have said that feel free to keep the conversation moving there as well. Did anyone say where they're joining from so far? I see a lot of hellos. Oh, Netherlands, North Germany. Hello.\u003C/p>\n\u003Cp>Welcome. Welcome. Granada, Spain, Ukraine, Austria, Egypt, Sardinia, Nigeria. Amazing. Welcome, France too.\u003C/p>\n\u003Cp>Hello. Hello. Super happy for you all to be joining us. I am gonna hand over to you, Bryant, with some product updates for the first start of the show. So hope you enjoy them.\u003C/p>\n\u003Cp>Speaker 1: Brian here for Directus, and I've got 2 quick updates for you. Version 11.1.1 dropped last week with a load of bug fixes, optimizations, and a few dependency updates. I just wanted to give a quick shout out to our engineering team and the community members who are on fire at improving the Directus experience for you, for me, and the entire Directus community. There is however one breaking change. The underlying SendGrid package we were using is no longer maintained.\u003C/p>\n\u003Cp>So rather than risk your security or some type of crazy exploit, we've removed it. Now if you're using SendGrid as your direct to email provider, you'll want to switch up your config to use SMTP instead of their API. For the full list of fixes and updates, check the release notes in the Directus repository. Now on to my favorite update, probably because I had a little hand in shipping these. There's no bias here.\u003C/p>\n\u003Cp>I'm super excited to announce Directus cloud templates. These are handcrafted Directus instances with data models, permissions, flows, all the niceties already built out for you. Now, whenever you spin up a new project for your organization or your client inside Directus Cloud, you can get to 80% done by clicking one button. There are currently 3 templates to choose from. Simple CMS, which is great for your next website build.\u003C/p>\n\u003Cp>It's configured with the dynamic page builder, blog posts, menus, and even dynamic forms. Your content editors are going to love this one. Next up, we have simple CRM, which is the perfect starting point for your own custom Salesforce or HubSpot. It includes the standard fare, like organizations and contacts, deals and activities, and a configurable pipeline. Last but not least, we have simple ecommerce, which showcases a small online apparel or t shirt shop build out.\u003C/p>\n\u003Cp>The data model includes products, orders, customers, and it even handles more complex scenarios like product variance, which account for all the color and size combinations automatically. So hop on to Directus Cloud, spin up an instance, check them out, and as always, send us your feedback because we'll be releasing more of these templates in the coming months. And back over to you, Beth.\u003C/p>\n\u003Cp>Speaker 0: I'm going to demonstrate each of the new extensions in Directus Labs this month. As a reminder Directus Labs is our team's experimental org in GitHub which regularly publishes new extensions we think are cool. The Gantt chart layout displays items in a collection in a Gantt chart helping those of you who use Directus for project management and task management. When configuring the layout specify a label that you want displayed on each task, a start date and an end date, and optionally a dependency field which will draw dependency lines in a chart. You can specify the zoom in as granular as an hour and as broad as a year.\u003C/p>\n\u003Cp>You can download it now in the marketplace. A calculated fields interface is the most upvoted open feature request in the directors project and today we are releasing it as an extension. It allows you to write a formula and the value of the interface will be automatically computed and shown. It supports the full set of functions provided by formula. Js and the majority of JavaScript operators that work for numbers and strings.\u003C/p>\n\u003Cp>It also supports relational fields and we pass formulas to ensure they are only running allowed functions which is important for security. A couple of things that are important to note values here are only visible in the interface and not in API responses. We've had this extension in the works for a while, but just a couple of days ago, a community member, Judah Sullivan, released the Directus AutoGen Extension which you might also want to check out as it's similar Both are available in the marketplace The API metric panel can be used to display a value from an external API, for example, that could be the number of docker downloads or sales or followers on social media platforms As you can see here we are making a web request to get docker metrics. We could also provide custom headers or a request body if required. Then you specify the path of the value you want to display.\u003C/p>\n\u003Cp>It's a nice responsive panel that allows you to get an overview of your business. You can download this extension directly from GitHub or NPM. Lastly, one of our core team members, Tim, in his spare time released a pair of flow operations which allows authentication and permission checking. The first operation allows you to check whether the flow was triggered by a user with admin access, user access, or public access. The operation will return true if authenticated or else throw an error.\u003C/p>\n\u003Cp>The second operation allows you to select a collection and it will return true if a user has read permissions in that collection. You can check this out over on github and npm we hope you enjoy using all these extensions Gantt chart layout, calculated fields interface, the API metric panel and tims authentication and permission checks let's bring my camera back up and I'll see how you're doing. I brought my camera back up hopefully you can see me again. Yeah, as I said we are super excited for everything we've just announced. Out of the extensions we've just talked about or if there are any other extensions that you regularly use in the marketplace, now is a good time to let us know in the chat.\u003C/p>\n\u003Cp>I mean for me as someone who really really likes project management efficiency the Gantt chart layout is super exciting and Kevin has just put in the chat as well the extension link for you to check them out for yourself. Tim, I did see you. Brace look also same person, same super ability. We are very excited about the operations as well. So, yeah, if you have any, extensions that you think you're like, this has really changed the game for me, this has changed the way I use direct us, or if you're just like, this is cool and I'm excited to hear more about it, let us know in the chat, and we can have a chat about this right now.\u003C/p>\n\u003Cp>Kevin is saying that Florian's flexible editor interface is the one. Yes. I agree. That one is great too. And, yeah, as we said, shout out to you, Judah.\u003C/p>\n\u003Cp>I'm not sure if you are in the chat, but we were talking about this in Discord earlier, too. So do make sure to check out their contribution as well. Yeah. So those are the, four ones for the extensions this month. Every month, we aim to have more.\u003C/p>\n\u003Cp>And if you are looking at where, to go, the extensions link is the best place. We do also have the extensions channel in Discord too, and the director's extension field, actions from Atomic Media is also a great one. I'm gonna move us along to the next part of the changelog, but feel free to keep the conversation going, via the chats whilst we're there. So I'm handing over to Carmen with a docs preview, which is super exciting. So I will send over to her now.\u003C/p>\n\u003Cp>Speaker 2: Hey, everyone. My name is Carmen. I'm a developer educator at Directus, and part of my role is documentation and that's what I'm going to be showing you today. We are about to launch a beta of our new documentation and I just wanna show you a little bit about what our motivations are, what we've done, and what's next. And, in order to do that, I'm gonna tell you a little bit about what three aspects of our documentation we're aiming to tackle.\u003C/p>\n\u003Cp>1 is content, the other is structure, and finally, the platform. So let's talk about the content. Over the years, starting from a very minimal set of documentation that served our needs, not only have we gotten a lot of feedback and requests for new pieces of documentation, but we've also seen lots of our team, lots of hands touch that documentation. And over time there have been different voices, there have been different tones and we just wanted to completely rewrite that. So everything that you will see in the new documentation, whether it's been brought over or adapted or written from scratch, will have been touched not just by me but by other educators.\u003C/p>\n\u003Cp>Next is structure. And so what we've done is sort of split it into 2 areas. 1 is a reference manual where you're looking at the exact parts of the documentation that you need just so that you can use Directus. But there's also an implementation side of it. You're not just using Directus in isolation.\u003C/p>\n\u003Cp>So we are also bringing in a set of tutorials so that you can work with directives, for example, with a specific framework, with a specific use case, maybe with a specific SSO provider. What we're doing here is hoping that we can make this sort of separation bring a lot of clarity to our documentation. Finally, there's our platform. When we started out, we were using VitePress which fulfilled so many of our needs. It came with a template that we could use and when we hit those limitations, we would extend them, make those parts our own, and adapt them as needed.\u003C/p>\n\u003Cp>But, with the opportunity of rewriting our documentation for scratch, we also wanted to have a brand new platform. We are rewriting our documentation using Nuxt. And I just wanna give a little shout out to one of our engineers, Connor, who's been spearheading this effort in a magnificent way. And finally, let's be honest, maintaining an API reference all in markdown can be quite cumbersome when manually written. So what we've set out to do is to have these API references also be automatically generated from code.\u003C/p>\n\u003Cp>So cool. Those are the 3 parts that we're addressing with our new documentation. But what's next? As I mentioned earlier, later this month, we'll be launching the 1st beta of the documentation. And this is where y'all come in.\u003C/p>\n\u003Cp>I'd love to ask you to please look over them, give us feedback, and tell us what we can do to improve this documentation for when we launch towards the end of the year. The other thing that we're going to be doing as well is to really look over all of our existing tutorials and audit them and bring them over. That does not mean that our old documentation is going to hide them our way. We're not gonna be hiding that old documentation or our tutorials. We're just going to be systematically bringing them over, making sure that they are correct, relevant, that they work with our current version of Directus and making sure that those tutorials stay in lockstep with new releases and new documentation.\u003C/p>\n\u003Cp>So that's it for me. Thank you so much for listening and I'll see you later.\u003C/p>\n\u003Cp>Speaker 0: Alright. As Kevin said in the chat, we are releasing that in the next couple of weeks. He's also put the link where you can find it. Super exciting. And I am also gonna be the 3rd person to say a massive big up to Connor and also a massive thank you to Carmen as well.\u003C/p>\n\u003Cp>We've now come to the my personal favorite part of the changelog which is the community showcase. Love seeing what everyone is building and how they are making directors their own And this month, we have a community showcase from David who is gonna be talking about the form builder project they're currently working on.\u003C/p>\n\u003Cp>Speaker 3: Hi. I'm David from. We are small digital studio based in Montreal. We've been working with directors for the last 2 years. And today, I'm going to talk to you about a small form builder extension that we've built for Dericus and that we're going to open source soon, hopefully.\u003C/p>\n\u003Cp>So let's start. So, the main feature that our clients have been missing since we migrated away from WordPress has been the form builder. Not sure if you're familiar with gravity forms, which is one form, complex form builder that is labeled in their WordPress ecosystem, that allow end users to configure forms, with conditions, with advanced fields, with notification, even integrations with external systems. So all those portions are quite easy to build with Directus apart from the advanced form builder. We were able to build a basic form builder using native features from directives, but they were not as easy for a end user to configure.\u003C/p>\n\u003Cp>In creating a complex form builders with conditions and wizards like features, is quite a big endeavor. So that's why we chose to, we actually started looking into open source project that could help us. And that's where we came across a library called survey gs. Survey so basically, survey gs has 2 main comp 2 main components. One is called survey creator.\u003C/p>\n\u003Cp>The survey creator is what the end user use to create the form or survey. It's quite powerful. And the other important portion is form library, or should I say what libraries? Now form libraries, they basically take in the JSON coming from the survey creator to render a form. They have library for Angular, Vue.\u003C/p>\n\u003Cp>Js, React, vanilla JavaScript, and probably other frameworks that for oh, yeah, and backbone, if they're still user of backbones. But anyway, yeah. So the only when we found that we found that it was basically doing everything we needed from a foreign perspective. So the only thing left was to integrate with Directus. And that's where we created our first extension, actually, our first or should I say first public extension for Directus?\u003C/p>\n\u003Cp>So let me jump into that. I'll do a quick demo of what we've built. The main features that we wanted to implement were, well, of course, integrating the survey creator, the ability to save forms or the form data in any collection, and finally send notification to either internal users or external users after form was filled. So here, as you can see, we have our small form module. So I'll jump into contact us form.\u003C/p>\n\u003Cp>I'll start with the form builder portion. Here, we have the basic form, 2 columns, first name, last name, or email. We have a drop down with some choices, subject of the the form. In here, we have our first condition. So, for example, I have a condition here that say if the subject is product information, then we will display what specific product information are you looking for.\u003C/p>\n\u003Cp>If it shows customer support, then instead, it's going to be what's your issue. I want this I won't demo all the features of, sorry. Js. There's a lot of documentation. You can look it up on their website.\u003C/p>\n\u003Cp>But, yeah, it's fairly powerful from builder. Then afterwards, we have the actual integration with Directus. So if you I go into the configuration of the form. Let me hide that for now. So, yeah, what we do have is the schema that was generated by the form builder.\u003C/p>\n\u003Cp>Technically, you could edit the schema itself, but it's easier to use the form builder instead. Please note, though, that the form builder of Suri. Js does require a license. We we do have the configuration to input your license in the extension, so that's good. But just so you're aware, it does require a license from, Suri.\u003C/p>\n\u003Cp>Js to use a survey creator. Anyway, so what I was saying is here, we have the configuration. So we could we can see that, it's submitting data to form submission collection. You can choose any collection that you want. You can create a new one.\u003C/p>\n\u003Cp>You can have multiple forms submitting to the same collection. It's really depend on your requirements, basically. We also have notification templates. I'll show I'll explain how notification templates work afterwards. And did I forget anything?\u003C/p>\n\u003Cp>No. I think that's pretty much it. So, yeah, actually, let's jump in into notification template first. So if somebody submit or fill in that form, as I mentioned, you can configure 1 or more notification templates. So let's jump into it.\u003C/p>\n\u003Cp>Form templates use like just flows. You can use any fields that was part of the form as as the recipient. For example, if you want them to have more than 1, you can add other recipient. In this case, we're using the field work email. But you could also add an hard coded one for, suppose, someone on your team.\u003C/p>\n\u003Cp>The template is itself is pure HTML, but same thing. There's basic templating, so you can use, variables from the from the form. In this case, the contact us form. So let's try and submit 13. So I'm gonna go back to my form, contact us form.\u003C/p>\n\u003Cp>And I didn't build my preview. Here in this case, it's an XGS application. So it's a React component that we built that is basically reading the schema here and passing the schema to the to the sorry. Js library. And once you're done submitting the form, it's going to call a webhook from Dactors to save the data.\u003C/p>\n\u003Cp>So let's try that. So of course, we do have validation. So let me fill the form. We based in North America. So we want to chat about product information, customer support.\u003C/p>\n\u003Cp>Yes. I'm not sure if this form is going to actually send email. Yeah. This field is not required. So I don't not gonna fill it.\u003C/p>\n\u003Cp>I'm just gonna complete the form. Thanks. No problem. So if we go into our contact us entries, we can see my entry, all the fields that were filled filled in with the data that was passed. And if we look at our notifications that were generated, we can see here we do have the new notification, the email that it was sent to, the actual content of the email.\u003C/p>\n\u003Cp>So you have a and a status, so you know if it it was fully sent or not. It does link back to the entry if needed that generate that that generated that notification. And once the form is submitted, we can see in my email that I received the confirmation template. Yes. So yeah.\u003C/p>\n\u003Cp>So that's pretty much how the, extension work. If we look at our flows, there's a couple of flows that need to be configured, but it's not that complex. Most of the features are built in feature from directors or survey GS. So most of the extension is gluing together the the 2 great products, basically. We do have some configuration that you can pass to the survey JS extension.\u003C/p>\n\u003Cp>So, for example, if you want to show the designer tab, the JSON tab, depending on your users, you might not want them to be able to see the JSON. So first of all, you can disable that, save the settings. And if you go back to the actual form, you see I don't have access to the JSON editor here. So we made that we made sure that we could configure every settings from, survey survey creator directly from directors. So, hopefully, it's an extension that, some of you will find useful.\u003C/p>\n\u003Cp>We're hoping to release the extension in the next month. We just wanna make sure that it come with clear installation instruction. But, yeah, it was the main feature for us that was missing from Directus. Everything else has been great. We're really happy having migrating from WordPress to Directus.\u003C/p>\n\u003Cp>And with that last missing piece of the puzzle, we have we now have a complete toolkit to, finalize our projects. So thank you very much.\u003C/p>\n\u003Cp>Speaker 0: Alright. Thank you so much to you, David, for taking, the time to take us through that. I'm super excited for it to become available hopefully soon. I think it will make a great addition and if you're keen for more community showcases I highly recommend checking out the 'I made this channel'. Specifically people post updates on their projects and how they're going along and I think that's really great to see exactly how things are changing all in the same thread which is super interesting.\u003C/p>\n\u003Cp>Next up, we have Kevin with a quick connect tutorial on AI web scraping API with flows. So I'm gonna hand over to him.\u003C/p>\n\u003Cp>Speaker 4: Hello there. I'm really excited about this tutorial. So on Directus TV, we already have a show called Quick Connect, which shows you how to integrate third party services with Directus using Directus Automate and Flows. And in the spirit of that show, today, I'm gonna show you how to integrate FireCrawl with Directus. Now here they say that they turn websites into LLM ready data, And what that means in practice is you can feed it a URL, provide some options if you want, and it will go and take a look at that web page and return some structured data for you like so.\u003C/p>\n\u003Cp>This is their scrape endpoint, which will take a single web page and scrape some data from it. They also have a couple of other endpoints, crawl and map, but today we're gonna use scrape. Now I've already logged into Firecrawl Cloud and generated an API key, which I'll copy for later. You can also self host Firecrawl, but for ease, I'm just gonna use their cloud product here. Now I have this directors project over here with a new empty collection called companies.\u003C/p>\n\u003Cp>In this collection, there are a few fields, URL, a name, a description, a mission, and a boolean, a true force value, is it open source. And our goal will be to provide the URL and then have FireCrawl automatically populate the rest with flows. So let's go ahead and create a new flow. So this is our automation builder if you've not seen it before. I'll call this one get company data, I guess.\u003C/p>\n\u003Cp>And we are going to use a manual trigger which will add a button to the side of collection and item pages. So we're going to say we'll run this on the company's collection. What else matters here? We're going to not require selection, so the button always works, and we're going to require confirmation which will pop up a modal, and in that modal we will just add a URL. We'll make it a string input and we'll make it full width, and I think that's all we need to do here.\u003C/p>\n\u003Cp>So just to see what happens here, if I go back to the, to the company's collection, we now see this button here, this manual flow, trigger. I click that. It pulls up the box, and we'll put in a URL and hit run flow. So, now, if we go back to our flow, we should immediately see that there is one log. And in here, there is a body and the URL is the value that we typed.\u003C/p>\n\u003Cp>Fantastic. Now we need to actually do something with it. So, let's go ahead and add a new operation here. And, honestly, fire crawl is pretty sick. You can just make one web request.\u003C/p>\n\u003Cp>Let's take a look at their docs. We're gonna use the llm extract endpoint here, and let's just take a look at the kind of construction of this API call. It's a post request to this URL. We're gonna pass in our our API key here as an authorization header, and then they give us this kind of JSON payload here. Here, it's telling it to go ahead and extract specifically these four fields, the company mission, does it support SSO, is it open source, and is it in Y Combinator?\u003C/p>\n\u003Cp>And it's saying you must go get all 4 of these. So let's actually just turn this straight into a flow request request URL operation. So we're gonna do a post request to this URL, post request to this URL. I'm gonna go and copy my API key again here, and at the end of this, I'll, I'll destroy the key. Authorization authorization, bearer API key, save, and then there's the request body.\u003C/p>\n\u003Cp>And, honestly, it contains a little more than we need but this contains everything we need so we'll just pop that in there. The only thing we wanna do, of course, is pass in the URL that we put in the box. So we'll replace this with trigger dot body dot URL. Fantastic. Let's save that and see what happens if we go over to content, press the button, and type in directors dot io.\u003C/p>\n\u003Cp>We see that's running. That's running. That's a good sign. It means it's going off and making the request, waiting for the request. And then we see there is a second log.\u003C/p>\n\u003Cp>And we get some data back. There was a 200, so it was successful. Inside of data, there is a property called data, and then there is this value called extract. Extract contains all of those custom keys we asked for, company mission, supports SSO, is open source, and is in YC. And then always when you scrape, you get this metadata object, title, description, language, Open Graph data, source URL, and so on.\u003C/p>\n\u003Cp>So really all we want to do here now is we want to take this data and create a new company from it. So let's add a new, let's create a new operation on the resolve path of that web request. Let's call it create data. We're gonna create something in the company's collection, we'll give it full access, and then we just need to provide a payload. So let's go ahead and do that.\u003C/p>\n\u003Cp>We have an object here, we have a name, we have a name, and we're gonna pass in the value of the last operation dotdata.data.metadata.title. Then I, for 1, am I'm just gonna copy this and edit it each time. So we have name, URL. So that's last.data.data.metadata.sourceURL. We could, of course, just take it from the trigger body URL, but this is properly formatted.\u003C/p>\n\u003Cp>You'll notice I typed in directus.io, but when it came back in the payload, it came back with the with the, with the protocol HTTPS and so on. So we have name. We have URL. We have a description. Now this one is also from the metadata Description.\u003C/p>\n\u003Cp>We have the mission. Now this was a custom piece of data we asked to be extracted. Company mission is what we called it. And, finally, we have open, open underscore source. Last data, data extract and then is underscore open underscore source and then remove that trailing comma.\u003C/p>\n\u003Cp>So I believe that's the name of all of the fields. We'll figure it out in a moment when when it inevitably doesn't work. We'll hit the button again, directors dot io and hit run flow. Once again that's going off to Firecrawl using their endpoint and there we see there we see it straight here. URL name, description, mission and the boolean is open source.\u003C/p>\n\u003Cp>Let's, let's try that once more. Let's go in here and say fire fire crawl dot dev run flow. So let's see. And in theory we should just give that a moment and there it is. So now you can go ahead and grab more data.\u003C/p>\n\u003Cp>Now, of course, if we take a look at this endpoint here, you can provide custom properties and it will try its best to get data out from that. They have a couple of other interesting things which I'll draw your attention to even if I don't think it works in this context. They have, attention to even if I don't think it works in this context. They have extracting without a schema. So this extract here was us creating a a schema.\u003C/p>\n\u003Cp>Right. You can give it just a text. You can give it a prompt. Extract the company mission from the page, but the thing I don't like about that is you're not explicitly saying what the name of the key is, so you don't necessarily know what it's going to be at the end. I like creating a schema personally.\u003C/p>\n\u003Cp>They do something else that's kind of interesting. If I take a look at where is it, I think it's in their API reference here inside of scrape. They have this interesting thing called actions. So you can get it to wait, to take a screenshot, to click, write text, press a key and scroll and the combination of clicking and writing text means you can get it to interact with your web page. You see it here, actions, wait 2 milliseconds.\u003C/p>\n\u003Cp>You could get it to, like, sign in to things perhaps, perform search terms. I think it's super interesting and then take screenshots, of course, and upload those to directors if you fancy. So there's a lot of flexibility in this. Having seen kind of how easy this API is, I think I'll go ahead and turn this into, an extension some point in the next few weeks which we can release as part of Directus AI. But, yeah, that's how to integrate FireCrawl with Directus using Directus Automate.\u003C/p>\n\u003Cp>Hope you found this interesting, and by all means, if you have questions just reach out. Alright. Over to Beth.\u003C/p>\n\u003Cp>Speaker 0: Welcome to The Reading List. Internally, we have a number of Slack channels where we share links from all around that we found educational and entertaining and we'd really like to share some of our favorites this month with you. First up, we have EIAIO games on scaling 1,000,000 checkboxes. This was a web experiment where every time anyone globally checks a box that change is reflected across everyone's browser and it goes in-depth into the scaling challenges of the unexpected popularity of the website leading to 650,000,000 checked boxes. Next, we have a recorded YouTube video from wasm.\u003C/p>\n\u003Cp>Io24 featuring Luke Wagner giving a talk on a stream of consciousness on the future of async in the component model. This is a great talk from one of the original designers of WebAssembly on how async will work in WASI 0.3. Next, we have introducing Netflix's key value data abstraction layer on the Netflix tech blog. This takes us through some of their global backend infrastructure design powering one of the most popular streaming platforms around and their use of multiple online distributed databases such as Apache Cassandra. Next up, we have an interesting read introducing the tool Cambria which is used to help you describe in a structured way how schemas change and why they change.\u003C/p>\n\u003Cp>This is from an independent research lab called Inc and Switch, definitely one for folks interested in the more academic side of things. The data visualization catalog provides a list of charts categorized by their data visualization functions or by what you want a chart to communicate to an audience. It's a really useful guide for selecting charts based on your analysis or communication needs. It starts with what you're trying to communicate and recommends which chart or tools to use. Lastly, a nice little tip from Vic instead of storing states as booleans, so like true or false, you could consider a date stamp so you can see when a state was updated with null meaning false and any date value meaning true.\u003C/p>\n\u003Cp>Those are just a few of the links that we shared internally this month. If you've got your own interesting links we would absolutely love to see them. We would recommend you share them within the discord server so you can see them and you never know they might even be in next month's changelog! We like to take a moment towards the end of each changelog to thank our contributors and sponsors who help make Directus as great as it can be. A huge thank you to Florian for dropping support for the old SendGrid transport option in favor of SMTP directly.\u003C/p>\n\u003Cp>Thank you to Shane for adding support for disabling terminal screen clearing on rebuild in watch mode. Thank you to Junhong for fixing SVG truncation issue in image interface preview, for fixing an issue that would cause custom role names to not be translated in the role navigation sidebar, for fixing WYSIWYG interface to be updated when interface options are changed via conditions, for improving behavior of the translations interface when setting use users language option, for ensuring data in sidebar is re fetched when switching pages while a sidebar pane is already opened, and for ensuring errors occurred within the card layout are always shown. Thank you to renovate for updating dependencies across multiple packages. Thank you to Joshua for fixing an issue that would cause log streaming to fail on directors installations that use a sub path in the URL. Thank you to for ensuring users are redirected to the intended page after login via LDAP.\u003C/p>\n\u003Cp>Thank you to CASE for adding the optional ignore rules option to schema apply CLI, and thank you to Anton for making the output types of SDK requests better readable in IDEs. Thank you again to each individual you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of September who financially contribute to Directus' development specifically a huge thank you to Clement that's dlxclem for sponsoring as our backer tier of $100 a month. The money we are given from our Github sponsors goes straight back to the community members who build tooling and extensions for the directors ecosystem. Thank you again for being part of that.\u003C/p>\n\u003Cp>Alright, that is the last of the segments that we have for this month. If you are still watching thank you so much for sticking around we appreciate you And if you've watched the whole thing we'd love to know which segments you particularly like. That helps us plan for the next few months and to show, what you'd like to see so do let us know any feedback about the change log. The next change log is November 12th at 3 pm the same time and I do hope that it's going to stay the same time in discord because we are changing from British summer time to the non British summer time which is Greenwich Mean Time So if you see a different, time, it'll still be 3 PM GMT BST. It's all gonna be there.\u003C/p>\n\u003Cp>It's fine. Yes, Kevin. Not quite connect. Weird presenter in my opinion. Anyway, thank you so much again for tuning in.\u003C/p>\n\u003Cp>Have a great rest of your day, and hopefully catch you for the next one. Bye, everyone.\u003C/p>","Alright. Hello, everyone. Hopefully, you can all hear me, and I am gonna take a pause and just check that that is the case. So if someone could let me know, that would be great. Oh, I was excited. Carmen's saying hello, and I'm still gonna wait. Loud and clear. Perfect. Thank you so much, Kevin. Welcome to October's version of the change log from Directus. If you're new here or if you've, joined us before, welcome. I hope you're having the most perfect day. I hope your day is not too hot, not too cold. It's like the crispest, best version of the day because that is what you deserve for joining us. Thank you for for being here. We have a great show for you planned. We've got some updates from Brian and myself from product and extensions, we've got Carmen with a docs update for what is upcoming and that's super exciting, we have Kevin with a quick connect tutorial. We've got the community showcase, and we've got a whole bunch of different things. I am joining from London. I would love to know, where you are all joining from. I can see that the chat is already busy. That is great. Please continue. We have team members in there answering all your questions. So, yeah, if you've got anything that you are thinking about, let us know based on anything we are saying. We also have the general chat in Discord for afterwards if it comes to you and you're like oh I should have said that feel free to keep the conversation moving there as well. Did anyone say where they're joining from so far? I see a lot of hellos. Oh, Netherlands, North Germany. Hello. Welcome. Welcome. Granada, Spain, Ukraine, Austria, Egypt, Sardinia, Nigeria. Amazing. Welcome, France too. Hello. Hello. Super happy for you all to be joining us. I am gonna hand over to you, Bryant, with some product updates for the first start of the show. So hope you enjoy them. Brian here for Directus, and I've got 2 quick updates for you. Version 11.1.1 dropped last week with a load of bug fixes, optimizations, and a few dependency updates. I just wanted to give a quick shout out to our engineering team and the community members who are on fire at improving the Directus experience for you, for me, and the entire Directus community. There is however one breaking change. The underlying SendGrid package we were using is no longer maintained. So rather than risk your security or some type of crazy exploit, we've removed it. Now if you're using SendGrid as your direct to email provider, you'll want to switch up your config to use SMTP instead of their API. For the full list of fixes and updates, check the release notes in the Directus repository. Now on to my favorite update, probably because I had a little hand in shipping these. There's no bias here. I'm super excited to announce Directus cloud templates. These are handcrafted Directus instances with data models, permissions, flows, all the niceties already built out for you. Now, whenever you spin up a new project for your organization or your client inside Directus Cloud, you can get to 80% done by clicking one button. There are currently 3 templates to choose from. Simple CMS, which is great for your next website build. It's configured with the dynamic page builder, blog posts, menus, and even dynamic forms. Your content editors are going to love this one. Next up, we have simple CRM, which is the perfect starting point for your own custom Salesforce or HubSpot. It includes the standard fare, like organizations and contacts, deals and activities, and a configurable pipeline. Last but not least, we have simple ecommerce, which showcases a small online apparel or t shirt shop build out. The data model includes products, orders, customers, and it even handles more complex scenarios like product variance, which account for all the color and size combinations automatically. So hop on to Directus Cloud, spin up an instance, check them out, and as always, send us your feedback because we'll be releasing more of these templates in the coming months. And back over to you, Beth. I'm going to demonstrate each of the new extensions in Directus Labs this month. As a reminder Directus Labs is our team's experimental org in GitHub which regularly publishes new extensions we think are cool. The Gantt chart layout displays items in a collection in a Gantt chart helping those of you who use Directus for project management and task management. When configuring the layout specify a label that you want displayed on each task, a start date and an end date, and optionally a dependency field which will draw dependency lines in a chart. You can specify the zoom in as granular as an hour and as broad as a year. You can download it now in the marketplace. A calculated fields interface is the most upvoted open feature request in the directors project and today we are releasing it as an extension. It allows you to write a formula and the value of the interface will be automatically computed and shown. It supports the full set of functions provided by formula. Js and the majority of JavaScript operators that work for numbers and strings. It also supports relational fields and we pass formulas to ensure they are only running allowed functions which is important for security. A couple of things that are important to note values here are only visible in the interface and not in API responses. We've had this extension in the works for a while, but just a couple of days ago, a community member, Judah Sullivan, released the Directus AutoGen Extension which you might also want to check out as it's similar Both are available in the marketplace The API metric panel can be used to display a value from an external API, for example, that could be the number of docker downloads or sales or followers on social media platforms As you can see here we are making a web request to get docker metrics. We could also provide custom headers or a request body if required. Then you specify the path of the value you want to display. It's a nice responsive panel that allows you to get an overview of your business. You can download this extension directly from GitHub or NPM. Lastly, one of our core team members, Tim, in his spare time released a pair of flow operations which allows authentication and permission checking. The first operation allows you to check whether the flow was triggered by a user with admin access, user access, or public access. The operation will return true if authenticated or else throw an error. The second operation allows you to select a collection and it will return true if a user has read permissions in that collection. You can check this out over on github and npm we hope you enjoy using all these extensions Gantt chart layout, calculated fields interface, the API metric panel and tims authentication and permission checks let's bring my camera back up and I'll see how you're doing. I brought my camera back up hopefully you can see me again. Yeah, as I said we are super excited for everything we've just announced. Out of the extensions we've just talked about or if there are any other extensions that you regularly use in the marketplace, now is a good time to let us know in the chat. I mean for me as someone who really really likes project management efficiency the Gantt chart layout is super exciting and Kevin has just put in the chat as well the extension link for you to check them out for yourself. Tim, I did see you. Brace look also same person, same super ability. We are very excited about the operations as well. So, yeah, if you have any, extensions that you think you're like, this has really changed the game for me, this has changed the way I use direct us, or if you're just like, this is cool and I'm excited to hear more about it, let us know in the chat, and we can have a chat about this right now. Kevin is saying that Florian's flexible editor interface is the one. Yes. I agree. That one is great too. And, yeah, as we said, shout out to you, Judah. I'm not sure if you are in the chat, but we were talking about this in Discord earlier, too. So do make sure to check out their contribution as well. Yeah. So those are the, four ones for the extensions this month. Every month, we aim to have more. And if you are looking at where, to go, the extensions link is the best place. We do also have the extensions channel in Discord too, and the director's extension field, actions from Atomic Media is also a great one. I'm gonna move us along to the next part of the changelog, but feel free to keep the conversation going, via the chats whilst we're there. So I'm handing over to Carmen with a docs preview, which is super exciting. So I will send over to her now. Hey, everyone. My name is Carmen. I'm a developer educator at Directus, and part of my role is documentation and that's what I'm going to be showing you today. We are about to launch a beta of our new documentation and I just wanna show you a little bit about what our motivations are, what we've done, and what's next. And, in order to do that, I'm gonna tell you a little bit about what three aspects of our documentation we're aiming to tackle. 1 is content, the other is structure, and finally, the platform. So let's talk about the content. Over the years, starting from a very minimal set of documentation that served our needs, not only have we gotten a lot of feedback and requests for new pieces of documentation, but we've also seen lots of our team, lots of hands touch that documentation. And over time there have been different voices, there have been different tones and we just wanted to completely rewrite that. So everything that you will see in the new documentation, whether it's been brought over or adapted or written from scratch, will have been touched not just by me but by other educators. Next is structure. And so what we've done is sort of split it into 2 areas. 1 is a reference manual where you're looking at the exact parts of the documentation that you need just so that you can use Directus. But there's also an implementation side of it. You're not just using Directus in isolation. So we are also bringing in a set of tutorials so that you can work with directives, for example, with a specific framework, with a specific use case, maybe with a specific SSO provider. What we're doing here is hoping that we can make this sort of separation bring a lot of clarity to our documentation. Finally, there's our platform. When we started out, we were using VitePress which fulfilled so many of our needs. It came with a template that we could use and when we hit those limitations, we would extend them, make those parts our own, and adapt them as needed. But, with the opportunity of rewriting our documentation for scratch, we also wanted to have a brand new platform. We are rewriting our documentation using Nuxt. And I just wanna give a little shout out to one of our engineers, Connor, who's been spearheading this effort in a magnificent way. And finally, let's be honest, maintaining an API reference all in markdown can be quite cumbersome when manually written. So what we've set out to do is to have these API references also be automatically generated from code. So cool. Those are the 3 parts that we're addressing with our new documentation. But what's next? As I mentioned earlier, later this month, we'll be launching the 1st beta of the documentation. And this is where y'all come in. I'd love to ask you to please look over them, give us feedback, and tell us what we can do to improve this documentation for when we launch towards the end of the year. The other thing that we're going to be doing as well is to really look over all of our existing tutorials and audit them and bring them over. That does not mean that our old documentation is going to hide them our way. We're not gonna be hiding that old documentation or our tutorials. We're just going to be systematically bringing them over, making sure that they are correct, relevant, that they work with our current version of Directus and making sure that those tutorials stay in lockstep with new releases and new documentation. So that's it for me. Thank you so much for listening and I'll see you later. Alright. As Kevin said in the chat, we are releasing that in the next couple of weeks. He's also put the link where you can find it. Super exciting. And I am also gonna be the 3rd person to say a massive big up to Connor and also a massive thank you to Carmen as well. We've now come to the my personal favorite part of the changelog which is the community showcase. Love seeing what everyone is building and how they are making directors their own And this month, we have a community showcase from David who is gonna be talking about the form builder project they're currently working on. Hi. I'm David from. We are small digital studio based in Montreal. We've been working with directors for the last 2 years. And today, I'm going to talk to you about a small form builder extension that we've built for Dericus and that we're going to open source soon, hopefully. So let's start. So, the main feature that our clients have been missing since we migrated away from WordPress has been the form builder. Not sure if you're familiar with gravity forms, which is one form, complex form builder that is labeled in their WordPress ecosystem, that allow end users to configure forms, with conditions, with advanced fields, with notification, even integrations with external systems. So all those portions are quite easy to build with Directus apart from the advanced form builder. We were able to build a basic form builder using native features from directives, but they were not as easy for a end user to configure. In creating a complex form builders with conditions and wizards like features, is quite a big endeavor. So that's why we chose to, we actually started looking into open source project that could help us. And that's where we came across a library called survey gs. Survey so basically, survey gs has 2 main comp 2 main components. One is called survey creator. The survey creator is what the end user use to create the form or survey. It's quite powerful. And the other important portion is form library, or should I say what libraries? Now form libraries, they basically take in the JSON coming from the survey creator to render a form. They have library for Angular, Vue. Js, React, vanilla JavaScript, and probably other frameworks that for oh, yeah, and backbone, if they're still user of backbones. But anyway, yeah. So the only when we found that we found that it was basically doing everything we needed from a foreign perspective. So the only thing left was to integrate with Directus. And that's where we created our first extension, actually, our first or should I say first public extension for Directus? So let me jump into that. I'll do a quick demo of what we've built. The main features that we wanted to implement were, well, of course, integrating the survey creator, the ability to save forms or the form data in any collection, and finally send notification to either internal users or external users after form was filled. So here, as you can see, we have our small form module. So I'll jump into contact us form. I'll start with the form builder portion. Here, we have the basic form, 2 columns, first name, last name, or email. We have a drop down with some choices, subject of the the form. In here, we have our first condition. So, for example, I have a condition here that say if the subject is product information, then we will display what specific product information are you looking for. If it shows customer support, then instead, it's going to be what's your issue. I want this I won't demo all the features of, sorry. Js. There's a lot of documentation. You can look it up on their website. But, yeah, it's fairly powerful from builder. Then afterwards, we have the actual integration with Directus. So if you I go into the configuration of the form. Let me hide that for now. So, yeah, what we do have is the schema that was generated by the form builder. Technically, you could edit the schema itself, but it's easier to use the form builder instead. Please note, though, that the form builder of Suri. Js does require a license. We we do have the configuration to input your license in the extension, so that's good. But just so you're aware, it does require a license from, Suri. Js to use a survey creator. Anyway, so what I was saying is here, we have the configuration. So we could we can see that, it's submitting data to form submission collection. You can choose any collection that you want. You can create a new one. You can have multiple forms submitting to the same collection. It's really depend on your requirements, basically. We also have notification templates. I'll show I'll explain how notification templates work afterwards. And did I forget anything? No. I think that's pretty much it. So, yeah, actually, let's jump in into notification template first. So if somebody submit or fill in that form, as I mentioned, you can configure 1 or more notification templates. So let's jump into it. Form templates use like just flows. You can use any fields that was part of the form as as the recipient. For example, if you want them to have more than 1, you can add other recipient. In this case, we're using the field work email. But you could also add an hard coded one for, suppose, someone on your team. The template is itself is pure HTML, but same thing. There's basic templating, so you can use, variables from the from the form. In this case, the contact us form. So let's try and submit 13. So I'm gonna go back to my form, contact us form. And I didn't build my preview. Here in this case, it's an XGS application. So it's a React component that we built that is basically reading the schema here and passing the schema to the to the sorry. Js library. And once you're done submitting the form, it's going to call a webhook from Dactors to save the data. So let's try that. So of course, we do have validation. So let me fill the form. We based in North America. So we want to chat about product information, customer support. Yes. I'm not sure if this form is going to actually send email. Yeah. This field is not required. So I don't not gonna fill it. I'm just gonna complete the form. Thanks. No problem. So if we go into our contact us entries, we can see my entry, all the fields that were filled filled in with the data that was passed. And if we look at our notifications that were generated, we can see here we do have the new notification, the email that it was sent to, the actual content of the email. So you have a and a status, so you know if it it was fully sent or not. It does link back to the entry if needed that generate that that generated that notification. And once the form is submitted, we can see in my email that I received the confirmation template. Yes. So yeah. So that's pretty much how the, extension work. If we look at our flows, there's a couple of flows that need to be configured, but it's not that complex. Most of the features are built in feature from directors or survey GS. So most of the extension is gluing together the the 2 great products, basically. We do have some configuration that you can pass to the survey JS extension. So, for example, if you want to show the designer tab, the JSON tab, depending on your users, you might not want them to be able to see the JSON. So first of all, you can disable that, save the settings. And if you go back to the actual form, you see I don't have access to the JSON editor here. So we made that we made sure that we could configure every settings from, survey survey creator directly from directors. So, hopefully, it's an extension that, some of you will find useful. We're hoping to release the extension in the next month. We just wanna make sure that it come with clear installation instruction. But, yeah, it was the main feature for us that was missing from Directus. Everything else has been great. We're really happy having migrating from WordPress to Directus. And with that last missing piece of the puzzle, we have we now have a complete toolkit to, finalize our projects. So thank you very much. Alright. Thank you so much to you, David, for taking, the time to take us through that. I'm super excited for it to become available hopefully soon. I think it will make a great addition and if you're keen for more community showcases I highly recommend checking out the 'I made this channel'. Specifically people post updates on their projects and how they're going along and I think that's really great to see exactly how things are changing all in the same thread which is super interesting. Next up, we have Kevin with a quick connect tutorial on AI web scraping API with flows. So I'm gonna hand over to him. Hello there. I'm really excited about this tutorial. So on Directus TV, we already have a show called Quick Connect, which shows you how to integrate third party services with Directus using Directus Automate and Flows. And in the spirit of that show, today, I'm gonna show you how to integrate FireCrawl with Directus. Now here they say that they turn websites into LLM ready data, And what that means in practice is you can feed it a URL, provide some options if you want, and it will go and take a look at that web page and return some structured data for you like so. This is their scrape endpoint, which will take a single web page and scrape some data from it. They also have a couple of other endpoints, crawl and map, but today we're gonna use scrape. Now I've already logged into Firecrawl Cloud and generated an API key, which I'll copy for later. You can also self host Firecrawl, but for ease, I'm just gonna use their cloud product here. Now I have this directors project over here with a new empty collection called companies. In this collection, there are a few fields, URL, a name, a description, a mission, and a boolean, a true force value, is it open source. And our goal will be to provide the URL and then have FireCrawl automatically populate the rest with flows. So let's go ahead and create a new flow. So this is our automation builder if you've not seen it before. I'll call this one get company data, I guess. And we are going to use a manual trigger which will add a button to the side of collection and item pages. So we're going to say we'll run this on the company's collection. What else matters here? We're going to not require selection, so the button always works, and we're going to require confirmation which will pop up a modal, and in that modal we will just add a URL. We'll make it a string input and we'll make it full width, and I think that's all we need to do here. So just to see what happens here, if I go back to the, to the company's collection, we now see this button here, this manual flow, trigger. I click that. It pulls up the box, and we'll put in a URL and hit run flow. So, now, if we go back to our flow, we should immediately see that there is one log. And in here, there is a body and the URL is the value that we typed. Fantastic. Now we need to actually do something with it. So, let's go ahead and add a new operation here. And, honestly, fire crawl is pretty sick. You can just make one web request. Let's take a look at their docs. We're gonna use the llm extract endpoint here, and let's just take a look at the kind of construction of this API call. It's a post request to this URL. We're gonna pass in our our API key here as an authorization header, and then they give us this kind of JSON payload here. Here, it's telling it to go ahead and extract specifically these four fields, the company mission, does it support SSO, is it open source, and is it in Y Combinator? And it's saying you must go get all 4 of these. So let's actually just turn this straight into a flow request request URL operation. So we're gonna do a post request to this URL, post request to this URL. I'm gonna go and copy my API key again here, and at the end of this, I'll, I'll destroy the key. Authorization authorization, bearer API key, save, and then there's the request body. And, honestly, it contains a little more than we need but this contains everything we need so we'll just pop that in there. The only thing we wanna do, of course, is pass in the URL that we put in the box. So we'll replace this with trigger dot body dot URL. Fantastic. Let's save that and see what happens if we go over to content, press the button, and type in directors dot io. We see that's running. That's running. That's a good sign. It means it's going off and making the request, waiting for the request. And then we see there is a second log. And we get some data back. There was a 200, so it was successful. Inside of data, there is a property called data, and then there is this value called extract. Extract contains all of those custom keys we asked for, company mission, supports SSO, is open source, and is in YC. And then always when you scrape, you get this metadata object, title, description, language, Open Graph data, source URL, and so on. So really all we want to do here now is we want to take this data and create a new company from it. So let's add a new, let's create a new operation on the resolve path of that web request. Let's call it create data. We're gonna create something in the company's collection, we'll give it full access, and then we just need to provide a payload. So let's go ahead and do that. We have an object here, we have a name, we have a name, and we're gonna pass in the value of the last operation dotdata.data.metadata.title. Then I, for 1, am I'm just gonna copy this and edit it each time. So we have name, URL. So that's last.data.data.metadata.sourceURL. We could, of course, just take it from the trigger body URL, but this is properly formatted. You'll notice I typed in directus.io, but when it came back in the payload, it came back with the with the, with the protocol HTTPS and so on. So we have name. We have URL. We have a description. Now this one is also from the metadata Description. We have the mission. Now this was a custom piece of data we asked to be extracted. Company mission is what we called it. And, finally, we have open, open underscore source. Last data, data extract and then is underscore open underscore source and then remove that trailing comma. So I believe that's the name of all of the fields. We'll figure it out in a moment when when it inevitably doesn't work. We'll hit the button again, directors dot io and hit run flow. Once again that's going off to Firecrawl using their endpoint and there we see there we see it straight here. URL name, description, mission and the boolean is open source. Let's, let's try that once more. Let's go in here and say fire fire crawl dot dev run flow. So let's see. And in theory we should just give that a moment and there it is. So now you can go ahead and grab more data. Now, of course, if we take a look at this endpoint here, you can provide custom properties and it will try its best to get data out from that. They have a couple of other interesting things which I'll draw your attention to even if I don't think it works in this context. They have, attention to even if I don't think it works in this context. They have extracting without a schema. So this extract here was us creating a a schema. Right. You can give it just a text. You can give it a prompt. Extract the company mission from the page, but the thing I don't like about that is you're not explicitly saying what the name of the key is, so you don't necessarily know what it's going to be at the end. I like creating a schema personally. They do something else that's kind of interesting. If I take a look at where is it, I think it's in their API reference here inside of scrape. They have this interesting thing called actions. So you can get it to wait, to take a screenshot, to click, write text, press a key and scroll and the combination of clicking and writing text means you can get it to interact with your web page. You see it here, actions, wait 2 milliseconds. You could get it to, like, sign in to things perhaps, perform search terms. I think it's super interesting and then take screenshots, of course, and upload those to directors if you fancy. So there's a lot of flexibility in this. Having seen kind of how easy this API is, I think I'll go ahead and turn this into, an extension some point in the next few weeks which we can release as part of Directus AI. But, yeah, that's how to integrate FireCrawl with Directus using Directus Automate. Hope you found this interesting, and by all means, if you have questions just reach out. Alright. Over to Beth. Welcome to The Reading List. Internally, we have a number of Slack channels where we share links from all around that we found educational and entertaining and we'd really like to share some of our favorites this month with you. First up, we have EIAIO games on scaling 1,000,000 checkboxes. This was a web experiment where every time anyone globally checks a box that change is reflected across everyone's browser and it goes in-depth into the scaling challenges of the unexpected popularity of the website leading to 650,000,000 checked boxes. Next, we have a recorded YouTube video from wasm. Io24 featuring Luke Wagner giving a talk on a stream of consciousness on the future of async in the component model. This is a great talk from one of the original designers of WebAssembly on how async will work in WASI 0.3. Next, we have introducing Netflix's key value data abstraction layer on the Netflix tech blog. This takes us through some of their global backend infrastructure design powering one of the most popular streaming platforms around and their use of multiple online distributed databases such as Apache Cassandra. Next up, we have an interesting read introducing the tool Cambria which is used to help you describe in a structured way how schemas change and why they change. This is from an independent research lab called Inc and Switch, definitely one for folks interested in the more academic side of things. The data visualization catalog provides a list of charts categorized by their data visualization functions or by what you want a chart to communicate to an audience. It's a really useful guide for selecting charts based on your analysis or communication needs. It starts with what you're trying to communicate and recommends which chart or tools to use. Lastly, a nice little tip from Vic instead of storing states as booleans, so like true or false, you could consider a date stamp so you can see when a state was updated with null meaning false and any date value meaning true. Those are just a few of the links that we shared internally this month. If you've got your own interesting links we would absolutely love to see them. We would recommend you share them within the discord server so you can see them and you never know they might even be in next month's changelog! We like to take a moment towards the end of each changelog to thank our contributors and sponsors who help make Directus as great as it can be. A huge thank you to Florian for dropping support for the old SendGrid transport option in favor of SMTP directly. Thank you to Shane for adding support for disabling terminal screen clearing on rebuild in watch mode. Thank you to Junhong for fixing SVG truncation issue in image interface preview, for fixing an issue that would cause custom role names to not be translated in the role navigation sidebar, for fixing WYSIWYG interface to be updated when interface options are changed via conditions, for improving behavior of the translations interface when setting use users language option, for ensuring data in sidebar is re fetched when switching pages while a sidebar pane is already opened, and for ensuring errors occurred within the card layout are always shown. Thank you to renovate for updating dependencies across multiple packages. Thank you to Joshua for fixing an issue that would cause log streaming to fail on directors installations that use a sub path in the URL. Thank you to for ensuring users are redirected to the intended page after login via LDAP. Thank you to CASE for adding the optional ignore rules option to schema apply CLI, and thank you to Anton for making the output types of SDK requests better readable in IDEs. Thank you again to each individual you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of September who financially contribute to Directus' development specifically a huge thank you to Clement that's dlxclem for sponsoring as our backer tier of $100 a month. The money we are given from our Github sponsors goes straight back to the community members who build tooling and extensions for the directors ecosystem. Thank you again for being part of that. Alright, that is the last of the segments that we have for this month. If you are still watching thank you so much for sticking around we appreciate you And if you've watched the whole thing we'd love to know which segments you particularly like. That helps us plan for the next few months and to show, what you'd like to see so do let us know any feedback about the change log. The next change log is November 12th at 3 pm the same time and I do hope that it's going to stay the same time in discord because we are changing from British summer time to the non British summer time which is Greenwich Mean Time So if you see a different, time, it'll still be 3 PM GMT BST. It's all gonna be there. It's fine. Yes, Kevin. Not quite connect. Weird presenter in my opinion. Anyway, thank you so much again for tuning in. Have a great rest of your day, and hopefully catch you for the next one. Bye, everyone.","\u003Cp>Join us for The Changelog, taking you through the month&rsquo;s Directus updates including product updates, new content and community contribution highlights. This month's show includes a community showcase of a form builder from David, Carmen taking us through a docs preview and Kevin with a tutorial on AI web scraping API with flows.\u003C/p>","published",[135,142,156,166],{"people_id":136},{"id":137,"first_name":138,"last_name":139,"avatar":140,"bio":141,"links":8},"3dec7812-3664-4d2d-93f8-efc876988cc7","Beth","Loft","1277761e-2a3b-4103-b29b-ffc97e8370f5","Developer Experience at Directus",{"people_id":143},{"id":144,"first_name":145,"last_name":146,"avatar":147,"bio":148,"links":149},"791e1503-1d88-463d-9347-0b9192933576","Bryant","Gillespie","9013afc8-e8d7-4182-9b18-44db08117bb9","Developer Advocate at Directus",[150,153],{"url":151,"service":152},"https://directus.io/team/bryant-gillespie","website",{"service":154,"url":155},"github","https://github.com/bryantgillespie",{"people_id":157},{"id":158,"first_name":159,"last_name":160,"avatar":161,"bio":162,"links":163},"82b3f7e5-637b-4890-93b2-378b497d5dc6","Kevin","Lewis","a662f91b-1ee9-4277-8c9d-3ac1878e44ad","Director of Developer Experience at Directus",[164],{"url":165,"service":152},"https://directus.io/team/kevin-lewis",{"people_id":167},{"id":168,"first_name":169,"last_name":170,"avatar":171,"bio":172,"links":8},"49c9e2fa-e7d7-45c9-b7b0-7125a2219f16","Carmen","Huidobro","fedb548b-def3-437c-b90a-f0d4d3d81d1d","Developer Educator at Directus",[],{"id":175,"number":176,"year":177,"episodes":178,"show":183},"093d2e2b-8006-4f05-a00c-22f124332e56",1,"2024",[179,180,122,181,182],"07591f9d-8187-47fd-9904-92eda024043a","61e8a740-8f60-40e8-9fc3-d9bcda53d16b","cfcf16eb-9630-4423-9f83-0fe27ef57f85","11513676-0e94-4407-bee0-387ae2bca2ac",{"title":184,"tile":185},"The Changelog","de6f3b4b-3c36-4142-819b-3312690e08a1",{"title":8,"meta_description":8},{"id":181,"slug":188,"season":175,"vimeo_id":189,"description":190,"tile":191,"length":192,"resources":8,"people":8,"episode_number":193,"published":194,"title":195,"video_transcript_html":196,"video_transcript_text":197,"content":8,"seo":198,"status":133,"episode_people":199,"recommendations":204},"4-november-2024","1030913964","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month's show includes a community showcase of a note taking system from Josh, Carmen taking you the first episode of Sharp Focus, Kevin with the new guest Author program and more...","9bde0965-1d3e-4d2e-b5c1-c3e11711200b",45,4,"2024-11-18","November 2024","\u003Cp>Speaker 0: All right. Hello. Hello everyone. Hopefully you can all hear me and if you can I would love to know where you are joining us from today? 1, to say that\u003C/p>\u003Cp>Speaker 1: you can hear me and, 2, because I'm nosy and\u003C/p>\u003Cp>Speaker 0: I wanna know where everyone is. Last time everyone was all over and it was really great to hear. Personally, I am joining from London where we had the first snow of the fall this morning. It was quite rainy snow like it wasn't magical magical but it counted and that's what matters so that is where I am from. Excellent, Carmen, thank\u003C/p>\u003Cp>Speaker 1: you so much for telling me you can hear me, I appreciate it. Vienna, Austria, we've got Sweden, USA, Finland, amazing, welcome. I hope you're all having such an amazing day. Devon, Germany, very cool, Netherlands as well. We have some very fun and also educational, material coming up for you for the rest of this show.\u003C/p>\u003Cp>If you've got any questions throughout, we've got\u003C/p>\u003Cp>Speaker 0: the chat open, and there's a couple of people from our team in it as well. So please do let us know if you have any questions. But we are starting off, the November change log with a product update from Bryant. So I'm gonna send you over to him.\u003C/p>\u003Cp>Speaker 2: Thanks, Beth. Bryant here for Directus, and here's a quick rundown of the core changes that have happened since the last changelog. Version 11.2.0 brought TUS resumable file upload protocol support to the Supabase, Azure, Cloudinary, and GCS storage adapters. And we already had tough support for the AWS s three compatible and local asset storage adapters. Which basically means, you are now fully covered when uploading large files, like videos to Directus.\u003C/p>\u003Cp>In version 11 dot 1 dot 2, we introduced a migration for Directus comments. There's now a dedicated directus underscore comments collection, which will make it much much easier for you to use comments in your front end projects via the API. We previously stored comments in the directus underscore activity collection, which admittedly was a bit messy because of all the other activity logs we stored alongside those comments. So this welcome change brings new API endpoints for comments, but the existing endpoints are still 100% totally functional. One note though, primary keys are now UUIDs instead of integers.\u003C/p>\u003Cp>So that could impact any custom type checking implementations you set up. The Directus SDK's internal comment endpoints have also been updated to reflect this change. And I know you're all for avoiding errors, so just ensure your Directus version is compatible with the latest SDK when you're using those comment functions. And there's just one more change with version 11.1.2. We've made some improvements to content versioning.\u003C/p>\u003Cp>Internally, we stored every change to a content version separately in the directus_revisions collection. And then we merge those together when promoting a version. In this release, we've added a new delta field to directus_versions collection, and that combines all the revisions into a single field. So all that to say, this means you'll be able to prune your revisions, which are the individual changes to a piece of content, without losing your versions. And with that, back over to you, Beth.\u003C/p>\u003Cp>Speaker 0: I'm going to demonstrate each of the new extensions in Director's Labs this month. As a reminder, Director's Labs is our team's experimental organization on GitHub. Typically, these extensions aren't maintained the same way that the main directors project is, but we have now committed to maintaining 4 of them. They are the spreadsheet layout, the Gantt chart layout, the Command Palette module, and the calculated fields bundle. You can see all these extensions, including which extensions are maintained, over on the extensions repo.\u003C/p>\u003Cp>Onto the demos. Directors AI is a collection of extensions that allows you to leverage the best AI tools from within Directors Automate. Today, we have 2 announcements, a brand new extension and an improvement. Let's start with a brand new extension, the AI web scraper. This allows you to scrape web pages and receive structured data back.\u003C/p>\u003Cp>We're using FireCrawl to perform the scraping, so you'll need an API key from them. You put a web page or a link to a PDF. Here, we're using directors. Io. If we go into the actions before scraping, here you can get the scraper to perform actions on the web page and add additional metadata about the action.\u003C/p>\u003Cp>For example, which element to click on or how far to scroll. For the data to extract, here's where you tell it what data you wanted to extract, and it will use AI to extract it. In the property description, we're going to put permission, string as data type, and we're going to enable making it a requirement. Optionally, there are additional formats, so you can also specify how you want the pages content to be presented back to you. They've also just had their launch week and we've implemented their brand new features such as the country, language, and mobile options.\u003C/p>\u003Cp>The other announcement is an improvement to the AI writer. The biggest change here is that before you could only use OpenAI's models and now we're extending the option to use multiple AI providers such as Anthropic, as well as different AI models. Other than that, everything else works as it did before, and this expansion was done thanks to an issue that was opened on the Directors Labs Extensions repo. So please do keep bringing your feedback for these. That's what's new for Directors AI We often hear from people that they love Directors insights, but want more ways to visualise their data.\u003C/p>\u003Cp>So we've added 4 new panels, which you can install now via the marketplace. 1st, we have the tree map chart. Select a collection, optionally a filter, which field you want to use for the labels and the value, and any aggregation you would like to perform. For example, here we are summing the value of all deals per company, so each company has its own cell at the size of all values related to that company. Next, we have funnel chart.\u003C/p>\u003Cp>Now, the funnel chart works exactly the same way, but visualises data differently. So depending on your needs might be more appropriate for you. For example, here we have a typical sales funnel. Funnel charts excel when people, or entities, follow a linear path and you want to see how many convert between stages. Next is the scatterplot.\u003C/p>\u003Cp>If you've never seen one before, this is a very typical two axis chart where values are plotted as dots. You can optionally add axis labels and hover over any of the dots to see the values. Finally, we have the timeline chart. This is a sibling to the Gantt chart layout that we recently released last month. We have less space to work with in a panel, so it's a simplified version, but it can be really powerful to include for project management.\u003C/p>\u003Cp>This relies on having 2 date fields, a start and an end, and then a label for the axes on the left and some display text for the item itself. We hope you enjoy our new panels. We certainly think that people are going to get a lot of use out of them. Extension authors often want to extend the functionality of our built in interfaces, And a few months ago, we released the WYSIWYG and block editor as boilerplates to build on top of. Today, we are releasing our first layout boilerplate, the table layout.\u003C/p>\u003Cp>This was already the basis for our spreadsheet layout extension, and now you can build on top of it and extend it too. You can find this in our Director's Labs extension repo, And we hope that this supercharges your extension building.\u003C/p>\u003Cp>Speaker 3: Hello there. Today, we are announcing our brand new and improved guest author program. The directors community is filled with people who use directors in so many different ways, so many different languages, frameworks, use cases, and this program is all about bringing those experiences to the tutorial section in our new documentation to help new directors users and existing directors users be as successful as possible. So we invite you to apply to be part of our brand new guest author program. Previously, our guest author program worked where you submitted your own ideas.\u003C/p>\u003Cp>In this program, once accepted, we have identified a huge number of tutorials that we think would be hugely impact for our users, and we invite you to write them and get paid doing it. We will support you through that whole process reviewing content and making sure what you create, is the best it can possibly be. So if you are an experienced technical writer and you know how to use directors, this program is for you. It's about educating others about how to be successful and make the most of directors. We are going to open applications a few times a year.\u003C/p>\u003Cp>This first open application starts today, and it will be open through the end of November, to kick off shortly after. So we really look forward to seeing your applications and the amazing tutorials that you can write to help others.\u003C/p>\u003Cp>Speaker 0: Alright. Hopefully, I am back. I'm super excited about those announcements. I did put in the chat the links for applications to become a guest author and also the Derick's Labs extensions, URL as well, so do check those out if you haven't already seen them. I'm super interested in hearing about what you are excited about from those announcements or if you're using any extensions.\u003C/p>\u003Cp>We've got a couple\u003C/p>\u003Cp>Speaker 1: of minutes in the chat to, have a talk with you about them So if you have seen any that you're like, this is gonna be particularly useful to me, we'd love some instant feedback on what is getting you excited, what you might be using them for. I know and I think I said this last month to you about the Gantt chart, but anything project management, super exciting. Like, just to be able to see a timeline, like a crisp timeline is super exciting for me. Also, the funnel, we love to see it. So, yeah, if you do have any thoughts, keep them coming in the chat whilst we are talking through them.\u003C/p>\u003Cp>Speaker 0: And if not, we have the Discord throughout the month, if you've got any questions about anything at all. I'm gonna\u003C/p>\u003Cp>Speaker 1: give it a couple more seconds. If you are typing, type quickly, before I move us on.\u003C/p>\u003Cp>Speaker 0: But, yeah, just, as we said in there, lots of feedback coming in through, which is super helpful in working out the directions as well. So that is all good, and we're excited to keep things coming and keep telling you about them in the change log. Alright. I am going to Ben says, I'd really like some more documentation on using real time stuff in Next. Js.\u003C/p>\u003Cp>Carmen, I believe you are in the chat\u003C/p>\u003Cp>Speaker 1: as well, so that, hopefully, you are able to give some insight on what is upcoming. Josh says I\u003C/p>\u003Cp>Speaker 0: found your software, and I'm using cool. Excellent. Very excited to see it. So I'm gonna move us on to the next segment, which is slightly cringey. So you have been warned.\u003C/p>\u003Cp>We had a lot of fun putting this together, and it's time for a completely new segment in\u003C/p>\u003Cp>Speaker 1: the change log. We do try and keep things, new and fresh, so we haven't done this before. This is a segment called Automate My Life, and we really hope you enjoy it.\u003C/p>\u003Cp>Speaker 0: Hello, and welcome to Automate My Life. In this show, we help regular people using Directus.\u003C/p>\u003Cp>Speaker 3: And today, we are in sunny London with our 1st person in need, Sean. He has lots of problems. We can't help with most of them, but we certainly can help with 1. Over to Sean. So I'm here with Sean who has called in the Automate My Life team with a problem.\u003C/p>\u003Cp>Sean, what can we help you with? Hi, Keir. Thanks for coming. I have a problem. Tell me more.\u003C/p>\u003Cp>Look at this plant. What do you notice about it? Sean, this plant is dead. That is the problem. Okay.\u003C/p>\u003Cp>Yep. See, I have plants and they are not dead. But then no matter what I do, they become dead. Despite your best effort. Despite my best and sometimes your mediocre efforts as well.\u003C/p>\u003Cp>Okay. I understand. Well, I think this is something we might be able to help with over in the workshop. Marvelous. Automate my life, director's team.\u003C/p>\u003Cp>Over to Beth.\u003C/p>\u003Cp>Speaker 0: Okay, folks. You've heard what Sean's problem is. We've brought you here as the best of the best to work out a solution for Sean. The future of his plants relies on you. What have you got?\u003C/p>\u003Cp>Speaker 4: Hey, Sean. Welcome to the Directus workshopping team. We're all about automating our lives every day. I have a similar problem. My wife my partner, has a pepper garden.\u003C/p>\u003Cp>She's an avid gardener. She loves to garden. This year, she actually picked up a little pH temperature monitor or soil tester, to give you the soil quality and quantity and make sure that she could amend the soil properly for those kinds of things. But as I'm thinking about this now, I'd actually like to work with her, and we'll get a I I think next year, I'm actually going to do this particular project. But in the meantime, we'll talk about some of the ways we could solve this problem.\u003C/p>\u003Cp>There are both DIY options and aftermarket options. I think I'll opt for the DIY, and that will be using something along the lines of an e s ESP 32 Wi Fi Sensor. There's a nice Directus blog that kind of goes through a use case for this, but we're gonna talk a little bit more in detail about some specific sensors and capabilities that we'll need to do for this. So there's an ESP 32. This has built in Wi Fi.\u003C/p>\u003Cp>The ability to integrate that with your sensors and plug that into your sensors, so we can collect data, soil temp moisture contents, and, temperatures. So the key thing is to making sure that your plants grow successfully. Now, in order to make this all work together to get you alerts and notifications, I'm gonna hand you off to my main automation guru, mister Bryant Gillespie.\u003C/p>\u003Cp>Speaker 2: Sorry, Jonathan. I, had these thinking glasses on to consider this problem. I just want to say this is an amazing use case for Directus Flows. We are going to be able to send automated notifications whenever these values are out of bounds. So here's what I'm thinking.\u003C/p>\u003Cp>Whenever a new item is created in the logging collection we trigger a flow. That flow does some magic and it will run some conditional operations to determine whether those values for moisture, for pH, for temperature are within the bounds that we set. If they are within those bounds, nothing happens. You're a okay Sean. As soon as those values step out of bounds like they're on the court, boom, you get a message via SMS through the Twilio API.\u003C/p>\u003Cp>And that's a wrap. Now to kick it over to my main man, AvDV, our head of insights.\u003C/p>\u003Cp>Speaker 5: Hey, Sean. If you're anything like me and you've got a lot of plants, I can imagine all these sensors are gonna be bringing in a ton of data into your into your director's project. So what better way to use insights or our dashboards to build up, targeted, insights which give you a summary of all the information in one page. We have, time series charts that you can start to track the pH, the moisture and the temperature over time. And with built in filters as well, you can you can filter by room, by particular plant, or even by the season if you want to track, the growth or the moisture over the seasons.\u003C/p>\u003Cp>There's a ton more use cases that we could build in, but those are just good. Some 3 quick summaries of what you could build with the Director's insights.\u003C/p>\u003Cp>Speaker 0: Wow. This all sounds great. I'm gonna leave you in the workshop to make this real. So Sean, we built you a soil monitor. There's sensors in here that every hour monitor the status of the planet.\u003C/p>\u003Cp>And if it's in need, we'll let you know via text messages exactly what's wrong.\u003C/p>\u003Cp>Speaker 3: Wow. That's amazing. I'll never kill again. Thanks, directors. Thank you so much.\u003C/p>\u003Cp>What a wonderful first episode of Automate My Life. Thank you for taking part. If you have an idea for a future episode, you can probably keep it to yourself. This is probably a one and done. Thank you, and bye for now.\u003C/p>\u003Cp>And that's something we can help you with. I certainly hope so.\u003C/p>\u003Cp>Speaker 6: I think we can handle discus team.\u003C/p>\u003Cp>Speaker 3: What's the new company again? Director. Director.\u003C/p>\u003Cp>Speaker 1: Wow. That was quite something, I hope you enjoyed. And I'm also very glad that the bloopers reel did in fact stay in because it was a lot of fun to record. There were some great ones. So, next up is sorry.\u003C/p>\u003Cp>I've gotta compose myself. It was so cringey. I could still feel it, like, in my cheeks. So next up, we have what I always say is my favorite part\u003C/p>\u003Cp>Speaker 0: of the change log, and that is the community showcase. This month, we have Josh talking through the note taking system he built, so I'm gonna send you over to him.\u003C/p>\u003Cp>Speaker 6: Hi there. I'm Joshua Behmendurfer, a software developer and IT manager at a Christian nonprofit. I have a tendency to build odd solutions like this one to solve mildly frustrating problems. Today, I'm showing off an offline first portable note taking system that integrates with Directus. It uses the Tiletec's awesome hackberry pi 0 for the hardware.\u003C/p>\u003Cp>This little doohickey with a physical keyboard, And Directus to store and retrieve data. Here's how it works. 1st, in Directus, I'm going to create a new collection called to do with a manual primary key which we'll set to the current date from the note taking system. Then we'll add a single simple markdown field that we'll use for our task list. And you can do more complicated stuff.\u003C/p>\u003Cp>I'm just going with the markdown field. Then I'm going to add a, assign to field that references a contact so that I can show how, relationships work with the note taking system. And then we should be good to go. Alright. Now let's take a look at how to create and edit notes on the device.\u003C/p>\u003Cp>I'm gonna use my Android phone here because it's pretty hard to take a recording of the Hackberry without my fingers getting in the way. I've got my editor open with a new text file. This file contains commands that interface with the Directus API. Let's skip the current date so that we can refer to it when creating today's to do and then get the ID of my contact entry so that the to do could be assigned to me. I'm using the Directus search and field parameters to find just my contact ID.\u003C/p>\u003Cp>Alright. Now we've got that ID. Let's make a view to do for today. We could use the, dollar sign to refer to the output of previous commands. Like, you were setting the ID to the current date.\u003C/p>\u003Cp>And then I'm going to assign that contact to my that, to do to myself. We're on it. Now let's add some tasks for some things I need to do today. Well, let's see. We could take out the trash.\u003C/p>\u003Cp>I should probably do that. We should do the laundry. That definitely needs to get done. What else? I should probably record this video.\u003C/p>\u003Cp>Alright. And then when I hit control r, these changes sync to Directus. And then they're also saved locally in this file for offline editing. I can make changes and they will get synced to my Directus instance. So let's take a look at what has been saved.\u003C/p>\u003Cp>As you can see, the tasks, assignment, and date are all here. I built this system because I forget things pretty easily and I'm always remembering them at the wrong time. So, to try and capture those fleeting memories, I tried to take notes on the go. Especially at Berk when I'm needing to walk between different people's offices and just catch up with all sorts of things people are saying while I'm, away from my desk. So, I started out with all sorts of notebooks and even designed several variations of reusable note cards, but I could never find the right note card at the right time and digitizing them constantly to make them searchable turned out to be quite a chore.\u003C/p>\u003Cp>To make the switch to digital notes, I started with Obsidian. It worked pretty well, but I never had the flexibility in data structures and the querying capabilities that I wanted. The text editing experience and syncing proved finicky at times as well. It was close to what I wanted, but not quite right. I solved the structured data organization problem using Directus.\u003C/p>\u003Cp>The Data Studio makes it a breeze to set up all the collections and fields I need to organize my data the way I want to and it backs it with the full power of a SQLite database. Anything it doesn't support out of the box, I'm a software developer, I can build on to it. But, I had two main issues with the vanilla Directus setup. Number 1, it doesn't work offline and I was always forgetting to hit the save button in my notes And trying to switch between other apps on my phone and direct us while in the middle of a bunch of other things just put too much friction in the note taking process. So, when I saw the Hackberry Pi come up for sale, it seemed like the perfect crazy gadget for taking notes.\u003C/p>\u003Cp>My, fat thumbs make typing on a touchscreen a pain, so a device with a physical keyboard was perfect. And, it's still small enough to fit in my shirt pocket. I snagged one once they were in stock and while waiting for it to ship from Germany I threw together some simple software to communicate with Directus. This system uses the micro text editor, which is a convenient, easy to use command line text editor that also happens to be extensible with Lua. And I combine it with an indentation based syntax for encoding JSON as the small scripts do things up to direct us.\u003C/p>\u003Cp>It's not pretty and it does have all sorts of interesting ways of crashing but it works very well for my use case. When I need to take notes, I press the hotkey on the Hackberry, the note I want to edit comes up, then I just type and sync to Directus once I'm back online. I doubt this exact system will be of much use for anyone else but it just goes to show the creative things you can do with Directus to Scratch, personal or work related itches. There's all sorts of wonderful ways you can wire things up. Thank you for your time.\u003C/p>\u003Cp>Goodbye.\u003C/p>\u003Cp>Speaker 0: Alright. Thank you so much to you, Joshua, for taking the time to, record the video and share\u003C/p>\u003Cp>Speaker 1: with us as we always love to see what people are doing with directors. I see\u003C/p>\u003Cp>Speaker 0: that a couple of people have got a video blur, we are on it and we're trying to fix it and see what\u003C/p>\u003Cp>Speaker 1: we can do. Hopefully it comes back to normal. I don't think it's been that way the whole time so fingers crossed it's just\u003C/p>\u003Cp>Speaker 0: a bit of a rough patch and it will be fine again going forward. I'm gonna send you over to Carmen who has the first video of Sharp Focus and I'm gonna allow her to talk through exactly what that series is and the rest of the series is also out now on director's TV. So I'll find the link for you in the chat as well. Alright. Over to Carmen.\u003C/p>\u003Cp>Speaker 7: Hello, everybody, and welcome to Sharp Focus, the show where we shine a lens on how Directus helps you transform your images and truly make them shine. My name is Carmen, and I will be your guide over the next 5 episodes where we'll learn how images can be transformed, how they work under the hood, how they can be manipulated, how they can be resized to be more performant, how you can use advanced transformations, and how you can use presets to take all of the above and apply it in one fell swoop. Now as it turns out, Directus offers a bevy of options for working with images out of the box powered by the sharp API from Node JS. And we're going to be taking a look at how to do that in a way that's going to be super fun and super approachable. So won't you join me in grabbing our cameras and let's dive right into finding out how Directus works with images.\u003C/p>\u003Cp>So here we are in my very own Directus project running locally dedicated to my photography. Right now, we are in the file library module where you can see that I have a folder over here on the left sidebar. This folder contains photos from my latest trip to my home country Chile. Now, I'm going to use Directus to work with these images for different applications, thumbnails, that sort of thing. But, as you can see, a lot of these images are of varying sizes and qualities.\u003C/p>\u003Cp>But that's okay. We can use to transform these images to create some consistency and even add some cool effects, which we'll be doing in this series. But first, let's take a little look at what makes these images tick. Now I've already uploaded these to Directus, so this gives me a couple of options to work with them. If I click on one of the images, for example, the photo of my trip to the national park, Torres del Paine, we will see that we can do things like change the title, add a description, some tags, location, if we wish, some focal points, more on that later, and also have access to its asset ID.\u003C/p>\u003Cp>But that's not all. We can even edit that image. Now we're not going to be doing that in this series, except for using it to create focal points. But again, more on that later. Now, if I want to access that image from say my browser, I can take that asset ID and navigate to my instances URL/assets/the ID of that image, which is fantastic.\u003C/p>\u003Cp>But one thing to bear in mind, I'm logged into Directus as an admin. But if I wanted to access this image from an application, I would need to assign that application the correct permissions, which we can do here in Directus. When I navigate to the settings module and then go over to access policies, we can see that I already have some permissions and roles set for administrators, which is my logged in user. But I wanna make these images fully public. So what I can do is click here on public and under permissions, click on add collection and select the Directus Files system collection.\u003C/p>\u003Cp>I will be able to assign different permissions for folks accessing that from anywhere. But I only want to give folks the ability to read. So we'll click here on read access and then assign all access. The last thing to do is to save that permission. Fantastic.\u003C/p>\u003Cp>Now I can access this image from a browser, from an application, from anywhere. So let's go back and look at that image. Now you remember that these images are of different sizes and qualities. So in order to create some consistencies, we're going to be applying different image transformations, but also giving them a little bit of pizzazz with some advanced transformations. It's gonna be super cool.\u003C/p>\u003Cp>Before we wrap up this video, I'd like to show you a couple of the types of transformations we can do. In the next video, we'll be looking at image manipulation where we can use query parameters like width, like height, and fit to manipulate our image and in this case make it a consistent 300 by 300 pixels. But that's not all. In our 3rd episode, we'll be looking at how we can manipulate the size and performance of our images. For example, here we're applying a quality of 5% and a format of web P to be used in our applications.\u003C/p>\u003Cp>Next. Now bear with me. We're going to be doing some advanced transformations. Now this looks a little wild, but you'll see that we're applying some powerful transforms with that sharp API. So we're applying a blur, a tint, we're negating colors.\u003C/p>\u003Cp>All of this is done with direct us, which is super cool. And finally, in our last episode, we'll talk about preset transformation where we can assign presets to a key, and that way we don't have to type out all of those transformations, but rather place them in one consistent place in Directus. Finally, let's talk about that processing power. You might think it'd be pretty cumbersome if every time I reload this image, it reprocesses all of those transformations. And I have good news.\u003C/p>\u003Cp>That transformation is done once and then saved in Directus, and you don't have to apply that every time. That means that you can reload that image worry free of any extra processing power done. So there you have it. Now we've seen how direct us works with images out of the box and how we can apply access permissions, which is gonna be super handy because in the next 4 episodes, we're gonna be working with a new Nuxt application to work with these images and display them in a variety of ways using transformations. So what's next?\u003C/p>\u003Cp>In episode 2, we'll be looking at how to resize our images using width, height, and other parameters, and I can't wait to show you all how it works. So till next time, keep those cameras ready.\u003C/p>\u003Cp>Speaker 0: We've put together a reading list from suggestions within the director's team of resources they found interesting, educational, or entertaining this month. Firstly, we have how we built a powerful JSON data type for ClickHouse. They talk about some of the challenges they face, such as true column oriented storage, dynamically changing data without type unification, and prevention of avalanche of column data files on disk. Next, a conflict free replicated data type, also known as a CRDT, is a data structure that lets multiple users or applications make changes to the same piece of data. This blog post from BlockSuite, called Building Document Centric CRDT Native Editors, explores the evolution of collaborative document editors, including the transitioning from the traditional editor centric approach to the document centric approach.\u003C/p>\u003Cp>Next, not a blog post, but an interesting project, pdlight. Run a full Postgres database, locally in WASM, with reactivity and live sync As opposed to running it in the application, you can run this in the browser, dependency free And unlike previous Postgres in the browser projects, pdlight does not use a Linux virtual machine. It is simply Postgres in WASM. Finally, there are some roles that rely on you being able to work with a lot of people from different teams where sometimes that's not always possible time wise and they become a blocker. This post from Kirk Campbell addresses that challenge by looking at how to utilise AI, specifically Claude Projects, in absence of people being able to give you their time and how to bridge that gap.\u003C/p>\u003Cp>Those are 4 really solid recommendations from the team that we hope you enjoy. We want to take a moment towards the end of the changelog to thank our amazing community contributors who give their time and expertise to improving the director's project. Since last month, there have been 3 releases and 8 contributors. A massive thank you to Gerard for adding support for batch editing in many to many and one to many table interfaces. Thank you to Jun Hong for fixing a display error when selecting Kanban layout for the first time, adding condition to only show the create dashboard if the user has the correct permission, fixing tag interfaces to correctly handle reset white space option, ensuring new operation can reuse same key as previously deleted one in current flow editing session, fixing an issue where the WYSIWYG interface would reload with every keystroke if custom formats are given, and fixing query time logging, leaking memory for failed queries.\u003C/p>\u003Cp>Thank you to Ayush for ensuring Elements login page are correctly truncated when not enough space is available. Thank you to Chris for adding save options to role and policy item pages. Thank you to Shay for fixing an issue where the mail sender is not displayed correctly for instances that use special characters in project name. Thank you to Shane for ensuring failing GraphQL requests are properly handled by throwing an error and exposing errors and data information. Thank you to Osman for fixing disabled state of the add file empty state button for users without permissions.\u003C/p>\u003Cp>Thank you again to all our contributors, and you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank the GitHub Sponsors of October for financially contributing to Directus' development. A huge thank you to Clement, that's DLXCLM, for sponsoring our backer tier of $100 a month. A huge thank you also to Entle, d Mathams, Fergus, Omar, Marcus, c k, Tommy, Perissa, Utomic, Steven, Kadir, nonlinear, Andreas, Valentino, Anthony, John, Wayne, Adam, Jason, Birka, Jens, Marcel, Vincent, Mike, Weifan, Lassie, Pedro, and Gemma Liddin. Thank you so much once again.\u003C/p>\u003Cp>The money we are given from our GitHub Sponsors go straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright. That is the end of this month's changelog. If you've made it this far, thank you so much for staying with us and watching till the end.\u003C/p>\u003Cp>We really appreciate it. All of these recordings will be available on director's TV as well as all 5 episodes of sharp focus. If you are wanting to see anything new from, us as part of the change log, this, would be a great time to tell us. We'll be sticking around in the chat for a couple more minutes. If you've got any questions that do come up throughout the month, Discord general, Discord help are the places to go.\u003C/p>\u003Cp>We will be back with December's version of the change log on December 10th at 3 PM, GMT or wherever that is your time. Discord handily tells you in your current, time zone, which is great. I've put all of the reading list recommendation URLs in the chat. If anyone's got any questions, as I said, we will be hanging around for a couple more minutes. But other than that, thank you so much once again.\u003C/p>\u003Cp>I hope you have a great week, a great month, and hopefully see you next time for December's change log. Have a great day, everyone.\u003C/p>","All right. Hello. Hello everyone. Hopefully you can all hear me and if you can I would love to know where you are joining us from today? 1, to say that you can hear me and, 2, because I'm nosy and I wanna know where everyone is. Last time everyone was all over and it was really great to hear. Personally, I am joining from London where we had the first snow of the fall this morning. It was quite rainy snow like it wasn't magical magical but it counted and that's what matters so that is where I am from. Excellent, Carmen, thank you so much for telling me you can hear me, I appreciate it. Vienna, Austria, we've got Sweden, USA, Finland, amazing, welcome. I hope you're all having such an amazing day. Devon, Germany, very cool, Netherlands as well. We have some very fun and also educational, material coming up for you for the rest of this show. If you've got any questions throughout, we've got the chat open, and there's a couple of people from our team in it as well. So please do let us know if you have any questions. But we are starting off, the November change log with a product update from Bryant. So I'm gonna send you over to him. Thanks, Beth. Bryant here for Directus, and here's a quick rundown of the core changes that have happened since the last changelog. Version 11.2.0 brought TUS resumable file upload protocol support to the Supabase, Azure, Cloudinary, and GCS storage adapters. And we already had tough support for the AWS s three compatible and local asset storage adapters. Which basically means, you are now fully covered when uploading large files, like videos to Directus. In version 11 dot 1 dot 2, we introduced a migration for Directus comments. There's now a dedicated directus underscore comments collection, which will make it much much easier for you to use comments in your front end projects via the API. We previously stored comments in the directus underscore activity collection, which admittedly was a bit messy because of all the other activity logs we stored alongside those comments. So this welcome change brings new API endpoints for comments, but the existing endpoints are still 100% totally functional. One note though, primary keys are now UUIDs instead of integers. So that could impact any custom type checking implementations you set up. The Directus SDK's internal comment endpoints have also been updated to reflect this change. And I know you're all for avoiding errors, so just ensure your Directus version is compatible with the latest SDK when you're using those comment functions. And there's just one more change with version 11.1.2. We've made some improvements to content versioning. Internally, we stored every change to a content version separately in the directus_revisions collection. And then we merge those together when promoting a version. In this release, we've added a new delta field to directus_versions collection, and that combines all the revisions into a single field. So all that to say, this means you'll be able to prune your revisions, which are the individual changes to a piece of content, without losing your versions. And with that, back over to you, Beth. I'm going to demonstrate each of the new extensions in Director's Labs this month. As a reminder, Director's Labs is our team's experimental organization on GitHub. Typically, these extensions aren't maintained the same way that the main directors project is, but we have now committed to maintaining 4 of them. They are the spreadsheet layout, the Gantt chart layout, the Command Palette module, and the calculated fields bundle. You can see all these extensions, including which extensions are maintained, over on the extensions repo. Onto the demos. Directors AI is a collection of extensions that allows you to leverage the best AI tools from within Directors Automate. Today, we have 2 announcements, a brand new extension and an improvement. Let's start with a brand new extension, the AI web scraper. This allows you to scrape web pages and receive structured data back. We're using FireCrawl to perform the scraping, so you'll need an API key from them. You put a web page or a link to a PDF. Here, we're using directors. Io. If we go into the actions before scraping, here you can get the scraper to perform actions on the web page and add additional metadata about the action. For example, which element to click on or how far to scroll. For the data to extract, here's where you tell it what data you wanted to extract, and it will use AI to extract it. In the property description, we're going to put permission, string as data type, and we're going to enable making it a requirement. Optionally, there are additional formats, so you can also specify how you want the pages content to be presented back to you. They've also just had their launch week and we've implemented their brand new features such as the country, language, and mobile options. The other announcement is an improvement to the AI writer. The biggest change here is that before you could only use OpenAI's models and now we're extending the option to use multiple AI providers such as Anthropic, as well as different AI models. Other than that, everything else works as it did before, and this expansion was done thanks to an issue that was opened on the Directors Labs Extensions repo. So please do keep bringing your feedback for these. That's what's new for Directors AI We often hear from people that they love Directors insights, but want more ways to visualise their data. So we've added 4 new panels, which you can install now via the marketplace. 1st, we have the tree map chart. Select a collection, optionally a filter, which field you want to use for the labels and the value, and any aggregation you would like to perform. For example, here we are summing the value of all deals per company, so each company has its own cell at the size of all values related to that company. Next, we have funnel chart. Now, the funnel chart works exactly the same way, but visualises data differently. So depending on your needs might be more appropriate for you. For example, here we have a typical sales funnel. Funnel charts excel when people, or entities, follow a linear path and you want to see how many convert between stages. Next is the scatterplot. If you've never seen one before, this is a very typical two axis chart where values are plotted as dots. You can optionally add axis labels and hover over any of the dots to see the values. Finally, we have the timeline chart. This is a sibling to the Gantt chart layout that we recently released last month. We have less space to work with in a panel, so it's a simplified version, but it can be really powerful to include for project management. This relies on having 2 date fields, a start and an end, and then a label for the axes on the left and some display text for the item itself. We hope you enjoy our new panels. We certainly think that people are going to get a lot of use out of them. Extension authors often want to extend the functionality of our built in interfaces, And a few months ago, we released the WYSIWYG and block editor as boilerplates to build on top of. Today, we are releasing our first layout boilerplate, the table layout. This was already the basis for our spreadsheet layout extension, and now you can build on top of it and extend it too. You can find this in our Director's Labs extension repo, And we hope that this supercharges your extension building. Hello there. Today, we are announcing our brand new and improved guest author program. The directors community is filled with people who use directors in so many different ways, so many different languages, frameworks, use cases, and this program is all about bringing those experiences to the tutorial section in our new documentation to help new directors users and existing directors users be as successful as possible. So we invite you to apply to be part of our brand new guest author program. Previously, our guest author program worked where you submitted your own ideas. In this program, once accepted, we have identified a huge number of tutorials that we think would be hugely impact for our users, and we invite you to write them and get paid doing it. We will support you through that whole process reviewing content and making sure what you create, is the best it can possibly be. So if you are an experienced technical writer and you know how to use directors, this program is for you. It's about educating others about how to be successful and make the most of directors. We are going to open applications a few times a year. This first open application starts today, and it will be open through the end of November, to kick off shortly after. So we really look forward to seeing your applications and the amazing tutorials that you can write to help others. Alright. Hopefully, I am back. I'm super excited about those announcements. I did put in the chat the links for applications to become a guest author and also the Derick's Labs extensions, URL as well, so do check those out if you haven't already seen them. I'm super interested in hearing about what you are excited about from those announcements or if you're using any extensions. We've got a couple of minutes in the chat to, have a talk with you about them So if you have seen any that you're like, this is gonna be particularly useful to me, we'd love some instant feedback on what is getting you excited, what you might be using them for. I know and I think I said this last month to you about the Gantt chart, but anything project management, super exciting. Like, just to be able to see a timeline, like a crisp timeline is super exciting for me. Also, the funnel, we love to see it. So, yeah, if you do have any thoughts, keep them coming in the chat whilst we are talking through them. And if not, we have the Discord throughout the month, if you've got any questions about anything at all. I'm gonna give it a couple more seconds. If you are typing, type quickly, before I move us on. But, yeah, just, as we said in there, lots of feedback coming in through, which is super helpful in working out the directions as well. So that is all good, and we're excited to keep things coming and keep telling you about them in the change log. Alright. I am going to Ben says, I'd really like some more documentation on using real time stuff in Next. Js. Carmen, I believe you are in the chat as well, so that, hopefully, you are able to give some insight on what is upcoming. Josh says I found your software, and I'm using cool. Excellent. Very excited to see it. So I'm gonna move us on to the next segment, which is slightly cringey. So you have been warned. We had a lot of fun putting this together, and it's time for a completely new segment in the change log. We do try and keep things, new and fresh, so we haven't done this before. This is a segment called Automate My Life, and we really hope you enjoy it. Hello, and welcome to Automate My Life. In this show, we help regular people using Directus. And today, we are in sunny London with our 1st person in need, Sean. He has lots of problems. We can't help with most of them, but we certainly can help with 1. Over to Sean. So I'm here with Sean who has called in the Automate My Life team with a problem. Sean, what can we help you with? Hi, Keir. Thanks for coming. I have a problem. Tell me more. Look at this plant. What do you notice about it? Sean, this plant is dead. That is the problem. Okay. Yep. See, I have plants and they are not dead. But then no matter what I do, they become dead. Despite your best effort. Despite my best and sometimes your mediocre efforts as well. Okay. I understand. Well, I think this is something we might be able to help with over in the workshop. Marvelous. Automate my life, director's team. Over to Beth. Okay, folks. You've heard what Sean's problem is. We've brought you here as the best of the best to work out a solution for Sean. The future of his plants relies on you. What have you got? Hey, Sean. Welcome to the Directus workshopping team. We're all about automating our lives every day. I have a similar problem. My wife my partner, has a pepper garden. She's an avid gardener. She loves to garden. This year, she actually picked up a little pH temperature monitor or soil tester, to give you the soil quality and quantity and make sure that she could amend the soil properly for those kinds of things. But as I'm thinking about this now, I'd actually like to work with her, and we'll get a I I think next year, I'm actually going to do this particular project. But in the meantime, we'll talk about some of the ways we could solve this problem. There are both DIY options and aftermarket options. I think I'll opt for the DIY, and that will be using something along the lines of an e s ESP 32 Wi Fi Sensor. There's a nice Directus blog that kind of goes through a use case for this, but we're gonna talk a little bit more in detail about some specific sensors and capabilities that we'll need to do for this. So there's an ESP 32. This has built in Wi Fi. The ability to integrate that with your sensors and plug that into your sensors, so we can collect data, soil temp moisture contents, and, temperatures. So the key thing is to making sure that your plants grow successfully. Now, in order to make this all work together to get you alerts and notifications, I'm gonna hand you off to my main automation guru, mister Bryant Gillespie. Sorry, Jonathan. I, had these thinking glasses on to consider this problem. I just want to say this is an amazing use case for Directus Flows. We are going to be able to send automated notifications whenever these values are out of bounds. So here's what I'm thinking. Whenever a new item is created in the logging collection we trigger a flow. That flow does some magic and it will run some conditional operations to determine whether those values for moisture, for pH, for temperature are within the bounds that we set. If they are within those bounds, nothing happens. You're a okay Sean. As soon as those values step out of bounds like they're on the court, boom, you get a message via SMS through the Twilio API. And that's a wrap. Now to kick it over to my main man, AvDV, our head of insights. Hey, Sean. If you're anything like me and you've got a lot of plants, I can imagine all these sensors are gonna be bringing in a ton of data into your into your director's project. So what better way to use insights or our dashboards to build up, targeted, insights which give you a summary of all the information in one page. We have, time series charts that you can start to track the pH, the moisture and the temperature over time. And with built in filters as well, you can you can filter by room, by particular plant, or even by the season if you want to track, the growth or the moisture over the seasons. There's a ton more use cases that we could build in, but those are just good. Some 3 quick summaries of what you could build with the Director's insights. Wow. This all sounds great. I'm gonna leave you in the workshop to make this real. So Sean, we built you a soil monitor. There's sensors in here that every hour monitor the status of the planet. And if it's in need, we'll let you know via text messages exactly what's wrong. Wow. That's amazing. I'll never kill again. Thanks, directors. Thank you so much. What a wonderful first episode of Automate My Life. Thank you for taking part. If you have an idea for a future episode, you can probably keep it to yourself. This is probably a one and done. Thank you, and bye for now. And that's something we can help you with. I certainly hope so. I think we can handle discus team. What's the new company again? Director. Director. Wow. That was quite something, I hope you enjoyed. And I'm also very glad that the bloopers reel did in fact stay in because it was a lot of fun to record. There were some great ones. So, next up is sorry. I've gotta compose myself. It was so cringey. I could still feel it, like, in my cheeks. So next up, we have what I always say is my favorite part of the change log, and that is the community showcase. This month, we have Josh talking through the note taking system he built, so I'm gonna send you over to him. Hi there. I'm Joshua Behmendurfer, a software developer and IT manager at a Christian nonprofit. I have a tendency to build odd solutions like this one to solve mildly frustrating problems. Today, I'm showing off an offline first portable note taking system that integrates with Directus. It uses the Tiletec's awesome hackberry pi 0 for the hardware. This little doohickey with a physical keyboard, And Directus to store and retrieve data. Here's how it works. 1st, in Directus, I'm going to create a new collection called to do with a manual primary key which we'll set to the current date from the note taking system. Then we'll add a single simple markdown field that we'll use for our task list. And you can do more complicated stuff. I'm just going with the markdown field. Then I'm going to add a, assign to field that references a contact so that I can show how, relationships work with the note taking system. And then we should be good to go. Alright. Now let's take a look at how to create and edit notes on the device. I'm gonna use my Android phone here because it's pretty hard to take a recording of the Hackberry without my fingers getting in the way. I've got my editor open with a new text file. This file contains commands that interface with the Directus API. Let's skip the current date so that we can refer to it when creating today's to do and then get the ID of my contact entry so that the to do could be assigned to me. I'm using the Directus search and field parameters to find just my contact ID. Alright. Now we've got that ID. Let's make a view to do for today. We could use the, dollar sign to refer to the output of previous commands. Like, you were setting the ID to the current date. And then I'm going to assign that contact to my that, to do to myself. We're on it. Now let's add some tasks for some things I need to do today. Well, let's see. We could take out the trash. I should probably do that. We should do the laundry. That definitely needs to get done. What else? I should probably record this video. Alright. And then when I hit control r, these changes sync to Directus. And then they're also saved locally in this file for offline editing. I can make changes and they will get synced to my Directus instance. So let's take a look at what has been saved. As you can see, the tasks, assignment, and date are all here. I built this system because I forget things pretty easily and I'm always remembering them at the wrong time. So, to try and capture those fleeting memories, I tried to take notes on the go. Especially at Berk when I'm needing to walk between different people's offices and just catch up with all sorts of things people are saying while I'm, away from my desk. So, I started out with all sorts of notebooks and even designed several variations of reusable note cards, but I could never find the right note card at the right time and digitizing them constantly to make them searchable turned out to be quite a chore. To make the switch to digital notes, I started with Obsidian. It worked pretty well, but I never had the flexibility in data structures and the querying capabilities that I wanted. The text editing experience and syncing proved finicky at times as well. It was close to what I wanted, but not quite right. I solved the structured data organization problem using Directus. The Data Studio makes it a breeze to set up all the collections and fields I need to organize my data the way I want to and it backs it with the full power of a SQLite database. Anything it doesn't support out of the box, I'm a software developer, I can build on to it. But, I had two main issues with the vanilla Directus setup. Number 1, it doesn't work offline and I was always forgetting to hit the save button in my notes And trying to switch between other apps on my phone and direct us while in the middle of a bunch of other things just put too much friction in the note taking process. So, when I saw the Hackberry Pi come up for sale, it seemed like the perfect crazy gadget for taking notes. My, fat thumbs make typing on a touchscreen a pain, so a device with a physical keyboard was perfect. And, it's still small enough to fit in my shirt pocket. I snagged one once they were in stock and while waiting for it to ship from Germany I threw together some simple software to communicate with Directus. This system uses the micro text editor, which is a convenient, easy to use command line text editor that also happens to be extensible with Lua. And I combine it with an indentation based syntax for encoding JSON as the small scripts do things up to direct us. It's not pretty and it does have all sorts of interesting ways of crashing but it works very well for my use case. When I need to take notes, I press the hotkey on the Hackberry, the note I want to edit comes up, then I just type and sync to Directus once I'm back online. I doubt this exact system will be of much use for anyone else but it just goes to show the creative things you can do with Directus to Scratch, personal or work related itches. There's all sorts of wonderful ways you can wire things up. Thank you for your time. Goodbye. Alright. Thank you so much to you, Joshua, for taking the time to, record the video and share with us as we always love to see what people are doing with directors. I see that a couple of people have got a video blur, we are on it and we're trying to fix it and see what we can do. Hopefully it comes back to normal. I don't think it's been that way the whole time so fingers crossed it's just a bit of a rough patch and it will be fine again going forward. I'm gonna send you over to Carmen who has the first video of Sharp Focus and I'm gonna allow her to talk through exactly what that series is and the rest of the series is also out now on director's TV. So I'll find the link for you in the chat as well. Alright. Over to Carmen. Hello, everybody, and welcome to Sharp Focus, the show where we shine a lens on how Directus helps you transform your images and truly make them shine. My name is Carmen, and I will be your guide over the next 5 episodes where we'll learn how images can be transformed, how they work under the hood, how they can be manipulated, how they can be resized to be more performant, how you can use advanced transformations, and how you can use presets to take all of the above and apply it in one fell swoop. Now as it turns out, Directus offers a bevy of options for working with images out of the box powered by the sharp API from Node JS. And we're going to be taking a look at how to do that in a way that's going to be super fun and super approachable. So won't you join me in grabbing our cameras and let's dive right into finding out how Directus works with images. So here we are in my very own Directus project running locally dedicated to my photography. Right now, we are in the file library module where you can see that I have a folder over here on the left sidebar. This folder contains photos from my latest trip to my home country Chile. Now, I'm going to use Directus to work with these images for different applications, thumbnails, that sort of thing. But, as you can see, a lot of these images are of varying sizes and qualities. But that's okay. We can use to transform these images to create some consistency and even add some cool effects, which we'll be doing in this series. But first, let's take a little look at what makes these images tick. Now I've already uploaded these to Directus, so this gives me a couple of options to work with them. If I click on one of the images, for example, the photo of my trip to the national park, Torres del Paine, we will see that we can do things like change the title, add a description, some tags, location, if we wish, some focal points, more on that later, and also have access to its asset ID. But that's not all. We can even edit that image. Now we're not going to be doing that in this series, except for using it to create focal points. But again, more on that later. Now, if I want to access that image from say my browser, I can take that asset ID and navigate to my instances URL/assets/the ID of that image, which is fantastic. But one thing to bear in mind, I'm logged into Directus as an admin. But if I wanted to access this image from an application, I would need to assign that application the correct permissions, which we can do here in Directus. When I navigate to the settings module and then go over to access policies, we can see that I already have some permissions and roles set for administrators, which is my logged in user. But I wanna make these images fully public. So what I can do is click here on public and under permissions, click on add collection and select the Directus Files system collection. I will be able to assign different permissions for folks accessing that from anywhere. But I only want to give folks the ability to read. So we'll click here on read access and then assign all access. The last thing to do is to save that permission. Fantastic. Now I can access this image from a browser, from an application, from anywhere. So let's go back and look at that image. Now you remember that these images are of different sizes and qualities. So in order to create some consistencies, we're going to be applying different image transformations, but also giving them a little bit of pizzazz with some advanced transformations. It's gonna be super cool. Before we wrap up this video, I'd like to show you a couple of the types of transformations we can do. In the next video, we'll be looking at image manipulation where we can use query parameters like width, like height, and fit to manipulate our image and in this case make it a consistent 300 by 300 pixels. But that's not all. In our 3rd episode, we'll be looking at how we can manipulate the size and performance of our images. For example, here we're applying a quality of 5% and a format of web P to be used in our applications. Next. Now bear with me. We're going to be doing some advanced transformations. Now this looks a little wild, but you'll see that we're applying some powerful transforms with that sharp API. So we're applying a blur, a tint, we're negating colors. All of this is done with direct us, which is super cool. And finally, in our last episode, we'll talk about preset transformation where we can assign presets to a key, and that way we don't have to type out all of those transformations, but rather place them in one consistent place in Directus. Finally, let's talk about that processing power. You might think it'd be pretty cumbersome if every time I reload this image, it reprocesses all of those transformations. And I have good news. That transformation is done once and then saved in Directus, and you don't have to apply that every time. That means that you can reload that image worry free of any extra processing power done. So there you have it. Now we've seen how direct us works with images out of the box and how we can apply access permissions, which is gonna be super handy because in the next 4 episodes, we're gonna be working with a new Nuxt application to work with these images and display them in a variety of ways using transformations. So what's next? In episode 2, we'll be looking at how to resize our images using width, height, and other parameters, and I can't wait to show you all how it works. So till next time, keep those cameras ready. We've put together a reading list from suggestions within the director's team of resources they found interesting, educational, or entertaining this month. Firstly, we have how we built a powerful JSON data type for ClickHouse. They talk about some of the challenges they face, such as true column oriented storage, dynamically changing data without type unification, and prevention of avalanche of column data files on disk. Next, a conflict free replicated data type, also known as a CRDT, is a data structure that lets multiple users or applications make changes to the same piece of data. This blog post from BlockSuite, called Building Document Centric CRDT Native Editors, explores the evolution of collaborative document editors, including the transitioning from the traditional editor centric approach to the document centric approach. Next, not a blog post, but an interesting project, pdlight. Run a full Postgres database, locally in WASM, with reactivity and live sync As opposed to running it in the application, you can run this in the browser, dependency free And unlike previous Postgres in the browser projects, pdlight does not use a Linux virtual machine. It is simply Postgres in WASM. Finally, there are some roles that rely on you being able to work with a lot of people from different teams where sometimes that's not always possible time wise and they become a blocker. This post from Kirk Campbell addresses that challenge by looking at how to utilise AI, specifically Claude Projects, in absence of people being able to give you their time and how to bridge that gap. Those are 4 really solid recommendations from the team that we hope you enjoy. We want to take a moment towards the end of the changelog to thank our amazing community contributors who give their time and expertise to improving the director's project. Since last month, there have been 3 releases and 8 contributors. A massive thank you to Gerard for adding support for batch editing in many to many and one to many table interfaces. Thank you to Jun Hong for fixing a display error when selecting Kanban layout for the first time, adding condition to only show the create dashboard if the user has the correct permission, fixing tag interfaces to correctly handle reset white space option, ensuring new operation can reuse same key as previously deleted one in current flow editing session, fixing an issue where the WYSIWYG interface would reload with every keystroke if custom formats are given, and fixing query time logging, leaking memory for failed queries. Thank you to Ayush for ensuring Elements login page are correctly truncated when not enough space is available. Thank you to Chris for adding save options to role and policy item pages. Thank you to Shay for fixing an issue where the mail sender is not displayed correctly for instances that use special characters in project name. Thank you to Shane for ensuring failing GraphQL requests are properly handled by throwing an error and exposing errors and data information. Thank you to Osman for fixing disabled state of the add file empty state button for users without permissions. Thank you again to all our contributors, and you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank the GitHub Sponsors of October for financially contributing to Directus' development. A huge thank you to Clement, that's DLXCLM, for sponsoring our backer tier of $100 a month. A huge thank you also to Entle, d Mathams, Fergus, Omar, Marcus, c k, Tommy, Perissa, Utomic, Steven, Kadir, nonlinear, Andreas, Valentino, Anthony, John, Wayne, Adam, Jason, Birka, Jens, Marcel, Vincent, Mike, Weifan, Lassie, Pedro, and Gemma Liddin. Thank you so much once again. The money we are given from our GitHub Sponsors go straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright. That is the end of this month's changelog. If you've made it this far, thank you so much for staying with us and watching till the end. We really appreciate it. All of these recordings will be available on director's TV as well as all 5 episodes of sharp focus. If you are wanting to see anything new from, us as part of the change log, this, would be a great time to tell us. We'll be sticking around in the chat for a couple more minutes. If you've got any questions that do come up throughout the month, Discord general, Discord help are the places to go. We will be back with December's version of the change log on December 10th at 3 PM, GMT or wherever that is your time. Discord handily tells you in your current, time zone, which is great. I've put all of the reading list recommendation URLs in the chat. If anyone's got any questions, as I said, we will be hanging around for a couple more minutes. But other than that, thank you so much once again. I hope you have a great week, a great month, and hopefully see you next time for December's change log. Have a great day, everyone.","61f4c782-d881-4b7c-8ac6-3214b0ee3cdd",[200,201,202,203],"3ff4cb13-ce14-41b6-b91f-9ae28a68a5c6","27249462-20d7-46cc-8035-4d85b310b61f","8fba3cc4-9a25-4280-aa0d-3ff816d0abd9","182a93e5-058a-478b-bf9f-99c6e5978950",[],{"reps":206},[207,263],{"name":208,"sdr":8,"link":209,"countries":210,"states":212},"John Daniels","https://meet.directus.io/meetings/john2144/john-contact-form-meeting",[211],"United States",[213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262],"Michigan","Indiana","Ohio","West Virginia","Kentucky","Virginia","Tennessee","North Carolina","South Carolina","Georgia","Florida","Alabama","Mississippi","New York","MI","IN","OH","WV","KY","VA","TN","NC","SC","GA","FL","AL","MS","NY","Connecticut","CT","Delaware","DE","Maine","ME","Maryland","MD","Massachusetts","MA","New Hampshire","NH","New Jersey","NJ","Pennsylvania","PA","Rhode Island","RI","Vermont","VT","Washington DC","DC",{"name":264,"link":265,"countries":266},"Michelle Riber","https://meetings.hubspot.com/mriber",[267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,244,455,456],"Albania","ALB","Algeria","DZA","Andorra","AND","Angola","AGO","Austria","AUT","Belgium","BEL","Benin","BEN","Bosnia and Herzegovina","BIH","Botswana","BWA","Bulgaria","BGR","Burkina Faso","BFA","Burundi","BDI","Cameroon","CMR","Cape Verde","CPV","Central African Republic","CAF","Chad","TCD","Comoros","COM","Côte d'Ivoire","CIV","Croatia","HRV","Czech Republic","CZE","Democratic Republic of Congo","COD","Denmark","DNK","Djibouti","DJI","Egypt","EGY","Equatorial Guinea","GNQ","Eritrea","ERI","Estonia","EST","Eswatini","SWZ","Ethiopia","ETH","Finland","FIN","France","FRA","Gabon","GAB","Gambia","GMB","Ghana","GHA","Greece","GRC","Guinea","GIN","Guinea-Bissau","GNB","Hungary","HUN","Iceland","ISL","Ireland","IRL","Italy","ITA","Kenya","KEN","Latvia","LVA","Lesotho","LSO","Liberia","LBR","Libya","LBY","Liechtenstein","LIE","Lithuania","LTU","Luxembourg","LUX","Madagascar","MDG","Malawi","MWI","Mali","MLI","Malta","MLT","Mauritania","MRT","Mauritius","MUS","Moldova","MDA","Monaco","MCO","Montenegro","MNE","Morocco","MAR","Mozambique","MOZ","Namibia","NAM","Niger","NER","Nigeria","NGA","North Macedonia","MKD","Norway","NOR","Poland","POL","Portugal","PRT","Republic of Congo","COG","Romania","ROU","Rwanda","RWA","San Marino","SMR","São Tomé and Príncipe","STP","Senegal","SEN","Serbia","SRB","Seychelles","SYC","Sierra Leone","SLE","Slovakia","SVK","Slovenia","SVN","Somalia","SOM","South Africa","ZAF","South Sudan","SSD","Spain","ESP","Sudan","SDN","Sweden","SWE","Tanzania","TZA","Togo","TGO","Tunisia","TUN","Uganda","UGA","United Kingdom","GBR","Vatican City","VAT","Zambia","ZMB","Zimbabwe","ZWE","UK","Germany","Netherlands","Switzerland","CH","NL",1773850434901]