Stacks Guru is born from the need to search the vast number of videos out there on stacks built for Stacks Pro and the Stacks 5 plugin for Rapidweaver.
We have scraped over 500 videos to get the transcripts for each in order to make the spoken word searchable.
Please use this free tool to help you learn and discover the awesome power that Stacks and the stacks made for Stacks have to offer.
I added new multi-language property support into Total CMS 3.5. It will allow you to easily manage many different language content for your websites. The translations are still up to you (or AI) but Total CMS will now provide a clean interface that will make managing all of that content much simpler. Join me on the live stream today and I will show it off. See you then!
00:00 [snorts] Let's see. How's everyone doing today?
00:06 Hopefully everyone's doing good. See in the chat.
00:12 Hopefully not going to have any uh mic issues. Um I I did I did not replace
00:20 my cable yet, but um hopefully I don't know, maybe it'll it'll all be okay
00:25 today. Um, so let me know if uh audio and visuals are good. I think I have too
00:31 many coffee cups on my desk. Oops. I have to work on cleaning that up here.
00:39 All right. [clears throat] Sound okay. Okay. Well, it's good for
00:44 now. Um, I will try to keep astute uh look at the chat for if my audio goes
00:51 out. So, sorry if uh if it does. Okay. Um, today should knock on wood. I always
00:56 say today should be a short one. Um, yeah, just going to show off while it
01:01 was a lot of work. Um, I think the interface for internationalization or multil- language sites is going to be
01:07 pretty simple. Got a hair coming off my hat. Um, and um,
01:13 yeah, Willie, how you doing? Mr. Workman's in the house. David, Chris,
01:20 excellent. Franco Matias. Man, we got everybody here. Sweet.
01:28 Industrial Awards. Speak of Speaking of Industrial Awards.
01:39 Just still have to remind everyone. Thank you. How awesome this is, man. So
01:44 beautiful. Amazing. I I really love it. So, um, thank you. If you guys didn't
01:50 know, I got this last year. Chris and crew and yeah, everybody uh got signed
01:55 on the back and uh yeah, really awesome. So, thank you, Ryan. It's awesome. Uh
02:02 Scott and Bill Burden, Chris, David, Josh, man, surprised the out of me on this
02:08 one. So, that was good. All right. Anyway, back from memory lane. Um
02:16 we're going to be talking about multilanguage. Um, now I do have to say, man, I I literally like less than five
02:23 minutes ago committed a first um first uh
02:29 commit for the MCP stuff. Um Oh, which uh ah should be fine. Okay. Um hopefully
02:36 it doesn't work. I'm still on my development MCP branch. So um while I'm sharing today um maybe after we talk
02:43 about the multiling stuff I can give you a very early early sneak peek on the the
02:49 MCP at least how the configuration will be. Okay obviously it's very early still
02:54 have a lot of work to do on that but um we'll talk about that too. So um
03:02 let's talk let's share. [clears throat]
03:07 So um I don't have any existing um
03:13 schemas right for uh for internationalization right well let let
03:20 me back up let let me just let's just talk here you know there are a lot of you here I
03:26 know some of you here already have done it where you build multil- language websites and um
03:35 a lot of times that is a a real pain especially with CMS because you have to
03:40 have basically a field for every not only let's say take a blog um you have a
03:47 title and a summary and a description but if if you have to um have two
03:52 languages then you have to double every field and if you have three languages
03:57 you have to triple every field okay now I've actually seen um people have
04:04 already with total CMS3 built out quad quadruple language websites.
04:10 So that is a website that is supporting four different languages.
04:15 And in order to do that, um, they build these like
04:21 really like crazy schemas because every field has a, let's say, a title_EN,
04:28 title_Ees, title_de, title_it,
04:35 right? Which is basically, you know, title and then the language code, right? So,
04:41 wow, that is a lot of work, right? because you have to a duplicate everything in the schema and then you
04:48 like looking at that form like like that is just crazy right because your form
04:55 has every field like on the admin dashboard forget about it right I mean um it's just going to be so much uh and
05:03 so much work if even if you want to organize it to do like form grids or something like that like having that many fields is just nuts okay um and
05:12 then again managing the schema as and um so much work. So for all of you um that
05:19 are currently doing that um you're going to love what I I am about to show you,
05:26 but also you're going to be like, why didn't I have this six months ago, right? But [laughter] hey, we got it
05:31 now, right? Um, and I think I've made it so that migrating to this new um,
05:38 architecture is going to be pretty simple um, from your existing CL if you
05:44 if if you have your schemas defined how I just described um, migrating them to this new
05:51 architecture which a much more cleaner interface will be much simpler. Okay, so
05:58 um, let's dive in. Okay, let me make sure I get my uh chat
06:06 window so I can pay attention. Remember, in case my audio drops out, let me know ASAP. Okay.
06:15 All right. So, let's first off look at
06:21 what should we look at first? Let's go to the settings. Okay. Um so
06:28 inside settings there is now a new internationalization um settings group. Okay. And in here um
06:37 there is a default local. Um this setting is actually uh one we already had before. It used to be in the general
06:43 tab. Um but now the default local has been moved to internationalization. That hasn't changed. Okay. That's the same
06:50 setting. Um and then we have this new one now which is uh all of the languages
06:55 that your CMS will support. for content. Okay. Um so you can go ahead and add as
07:01 many as you want. Okay. What's kind of cool is I actually show the the uh
07:06 language in its native name. Okay. Um even in Arabic or whatnot. So um but I
07:13 still show the uh the language code. Okay. So the knowing the language code will be very important. You'll see why
07:19 in a little bit. As you'll notice, um, some of them have, um, region specific
07:24 languages such as, uh, enc us. There's also an encore gb, and I think there's a
07:31 couple other English variants. Okay. Um, but German is just German. Okay. So, um,
07:37 so it's just DE. Um, I figured there there was no didn't make sense to have a deed.
07:43 Um, so I mean there you go. Okay. So, uh, just de Portuguese has a Brazil
07:49 variant, right? um as well as a PT which is the Portugal variant, so on and so forth. Okay, so uh with that said, um
07:57 that's pretty simple. You can again you can choose as many of these as you want and you'll see in a little bit where
08:02 they're used. Okay, but again this is a global setting across your entire CMS.
08:09 So you only set this up once and you're done and which is nice.
08:14 All right, let's go into the schema. Okay. [snorts]
08:20 So here I have this nice little demo and in here um this is a very simple
08:26 collection where I have a title, a summary and a body. Okay. Um and there
08:32 are three new fields um for localized text. Okay. And let's look at that. So
08:39 first off, there's going to be a uh localized text. Okay, which is essentially like a a text input. Okay.
08:48 Then we're going to have um if we look at summary, we have a localized text area, right? If you actually if you look
08:54 these are all uh organized under localization fields. Okay,
09:00 so localized text and then the last one is body and you'll
09:05 see that that is localized styled text.
09:13 Pretty simple. So, there's three new fields in the schema. There's really nothing special you have to do. Um, all
09:20 the settings that you use here. Um, there's a default local. Actually, you don't even need that setting. Uh, I think I was playing around. Don't need
09:26 that. That's set globally now. Okay. [snorts] Um, but all of the settings that you can
09:33 use here, let's say in style text, you can then put in your these are all the settings for style text would go here.
09:40 Okay. Same thing if you had settings for text or or text area, those settings would be
09:48 applied to that. Um the same thing from a normal text or normal text area or normal style text.
09:55 All right, let's go into the collection now. So let's look at my
10:00 little localized demo collection and let's look at our welcome object.
10:09 [snorts] So here we have an object and uh if you notice here now there are uh I have
10:16 three again I have my title, I have my summary and I have my body. But you what
10:22 you will notice is there's now little tabs for each language.
10:27 So my default is English, but I can go ahead and click on German or Portuguese or Arabic or Italian. Okay, Italian was
10:36 something I actually added. It didn't exist before. So actually none of these have Italian in it. Okay. But um something to note is Arabic is a uh
10:43 right to left language. Um and therefore when you choose Arabic um the text
10:48 alignment actually ends up going to the right. Okay. So um it does respect right
10:54 to left languages so that um yeah I thought this was a very elegant interface so that again you can have one
11:03 text area and then you can easily switch between the various languages.
11:08 Okay. So, same thing here for text area. It all works the same. And guess what? It all works the same for style text as
11:15 well. Now, um style text, obviously you can do a lot of things such as adding images.
11:23 And let's say I want to add this same image um to German. Now, I could go
11:29 ahead and upload the same image from my computer into the into the style text
11:36 area, but that would actually mean it's uploading another image. Okay. So, if
11:42 you didn't know, um, in style text, you can actually, if you click on the image button and you click on the images tab,
11:48 you can see all of the images that are actually
11:54 uploaded to this area. And this is the image that I uploaded into the English section. So I can go ahead and select
12:00 that and say insert. And what that does is that utilizes the same image that I
12:05 uploaded in the English tab.
12:10 So now I have the same image um oops used in both places.
12:15 Very nice. Okay. Now if I wanted to have a image special just for my German
12:21 users, I can do that. you can upload a different image, but sometimes it could be nice just to make sure you're using
12:27 the same image for caching or whatever. Okay, so that and also space on the
12:32 server, right? Because um images take up space. So, um that's nice.
12:40 Okay. Um yeah, pretty nice, pretty easy. Uh one
12:47 thing I I will uh add um now I did ship beta 6. Some of you already have it. Um
12:54 I I've sent it out to those that I know are potentially using this. Okay. Um one
13:00 thing that I will add, I think, is when I go ahead and go to the tabs. Right
13:05 now, the tabs are controlled individually. However, I think it would be nice if I go ahead and if I clicked
13:10 on German, all of them changed to German, right? I I thought that would be could be a nice um a nice UI. Okay.
13:18 Maybe they could be configurable. I don't know. We'll see. Um but but I do think you know being able to uh move
13:23 everything to a language by clicking on a tab could be nice. Okay. So um yeah,
13:30 let me know what you think in the chat. Um I think it's a pretty nice interface. Um and yeah, let's dive into how are we
13:37 going to display this information. Okay,
13:44 everyone's quiet in the chat today. Hopefully you guys can hear me. Okay,
13:52 let's go into the twig playground
13:59 and we're going to go into my little demo here. Okay, [snorts]
14:05 so there are a couple of ways there are several different ways where we can
14:11 actually access uh our translations. Okay. Um, so in
14:18 here, let's go. Let me increase my cursor size here.
14:26 Okay. Um, so if we look here, um, the easiest thing is I I just have entry
14:31 right here. Okay. So we have entry.title. Um, here I'm bringing in the entry is bringing in that welcome post, the post that we were just looking
14:38 at. [snorts] Um, so here we have an entry.title.de. de.
14:46 Okay. And uh this would essentially if you if you're if you think this will actually pull in the German title,
14:53 right? So I have entry.title because here I'm pulling in the object. So entry.title gives me my title and thede
15:00 will give me German. Okay. Um you can also use this square bracket syntax. You
15:06 don't have to um you know where you can actually uh but you can also do even for like Portuguese BR Brazilian Portuguese
15:14 you can just do PT_BR. Okay. So you can use both um
15:20 ways. Now um there is a kind of a twig helper function here. So we have
15:27 CMS.local.ext and what you do is you you pass it the
15:32 actual um localized uh property. So here in case I'm doing
15:38 entry.title which is my title now and then what I can do here is that you can provide the language. Now what's useful
15:45 about this is this function right here um will will basically allow you to pass
15:51 maybe the language as a variable. Okay? So that way you can um dynamically pull
15:57 in the variable based on the local set on the web page. So that that will
16:04 really help improve uh you know so you don't have to have tons of different you know content areas
16:11 for different languages um you can basically integrate it into the same thing um by just dynamically swapping
16:18 out the language for that particular entry. Okay. Now earlier up here we had
16:23 a square bracket syntax where I had um this
16:29 right um you could actually use uh this same syntax okay with the square brackets and then instead of the in
16:36 quotes the language you can actually put a variable in there as well. So um that does work as well. So you can do both
16:43 ways this way or this little helper function uh will both allow you to do that.
16:50 Pretty nice. Now um this helper function is also a little bit useful because it's it's um it's a little flexible. Let's
16:57 say that you have um you provided en by accident instead of enc us. Well, it's
17:03 smart. It's saying um because you know let's say you're using and storing encore us. Um it'll be smart and be like
17:10 hey you ask for English I have encore US I'm going to give you that one. Right? So um it is smart. it uh allows you to
17:19 um you know have a little bit of oopsy in there. Okay, if you use this helper function. If you were to use this way uh
17:25 with the square brackets and you put a variable of the local in there um that is not flexible at all. You have to put
17:31 exactly what it's expecting. Okay. So um yeah, this uh that's one of the main reasons I provided this little helper
17:38 function is because it has a little bit of smarts and to um helping you really
17:43 choose the correct language. Okay. [snorts] Um, oh, here's an example
17:49 where I provide it in, you know, uppercase, lower case, it doesn't matter in the function. Um, it again, it will
17:57 it has smarts so that it will make sure that it gives you the correct um the correct the correct thing. Okay, which
18:02 is nice. Um, same thing here's like a regional fallback. Oh, here let's just do a
18:08 render twig, right? Um, so the regional fallback. Um if you do provide de_de
18:14 um like I said earlier normally um it actually stores it as de because German doesn't have necessarily a region. Um
18:21 again the function is smart. It just it gives you what you what it should. Okay. So there's a lot of smarts into that.
18:29 Um anyway, yep, there we go. Um there's just more examples of pretty much the same thing. Okay. Um for style text,
18:36 it's essentially the same thing. It's cs.local.styled text. Okay. And then you give it the uh
18:43 same exact thing. Okay. So, um yeah, I think it's really simple um interface
18:48 for um doing multil- language websites and uh yeah, hope you guys like it. Um
18:55 there are a few other features. Let me go ahead and uh give me a second here. I should have
19:04 Where is it?
19:14 Um, oh, another feature that I added was
19:19 inside, this is some a minor thing, um, but if you've ever used Mailor yet,
19:26 inside Mailer, uh, when you're loading an email,
19:32 if we scroll down the e in the email, you can actually
19:38 provide data, right? So, um so that you can actually do tests and whatnot. And prior to uh this update, you had to
19:45 manually type out all of your data. Now, if you wanted to load in an object from
19:50 a collection, that could have been a little annoying, right? You had to actually supply all the data from the
19:55 object. So, um since I I do feel that would be a common thing. um under this
20:02 little dropdown now uh you can actually plop in here let me go ahead and I'll delete that if you put in the collection
20:10 um so in this one I know I have like off slashadmin okay um so you put in your
20:16 collection slash the ID of the object uh and you just click load what that will
20:21 do is that actually gets the object and then it pastes all of that object's data
20:26 directly into this uh data field so you can then do send a test email. So, that's just a really convenient way of
20:33 of doing test emails with data from a collection. Okay. Now, uh this will
20:42 overwrite anything that you exist that you have inside of here already. So, if you have data in there, um and of of
20:48 course you can actually go in here and add in custom data because the mailer will actually merge in data from the
20:54 form plus the object and blah blah blah, right? But, um yeah, there we go. Just a
21:00 nice little thing. Um, other minor fixes, uh, there was a a
21:05 fix for style text, uh, for image floats. So, if you're floating an image to have text wrapped around it, that's
21:12 been fixed. Um, another fix is in depot.
21:18 Um, in depot, uh, before when you, uh, drag and drop files was, um, sort of
21:25 broken. So, um well, it it was broken if you saved it. Um but now it you don't
21:30 have to actually click the save button anymore. Um you can just drag things out. Okay. Um and drag and drop things
21:37 around and then they're just automatically saved. So, if I go ahead and refresh
21:42 that, there we go. Right. So, it's saved. You don't have to actually save
21:47 um for dragging and dropping of files any longer. It actually uh that actually was a feature before um I broke it in I
21:55 think it was in 3.5 actually I broke that. So um that's fixed. Okay. Um
22:03 I think that pretty much does it. Let me go ahead and look at my Oops, I clicked
22:09 on my cam. One second. Let me look at my Bring that back.
22:15 Wrong button.
23:36 Hey, not sure where the audio dropped out, but Italian. We got Italian now.
23:42 You didn't You missed all my funny Italian jokes. You didn't miss much. Okay,
23:47 [snorts] hopefully that fixes it. You mean get a thumbs up before I start talking about
23:52 anything special? Uh, that audio is back.
24:03 Are we back? Hopefully.
24:09 Definitely have to order a new cable. Hello. Hello. Hello.
24:24 Is the audio not fixed? Thumbs up, thumbs down. Nope.
24:30 See you. Back. Sweet. Okay. Um, so let's go ahead
24:35 and talk about a little bit about MCP. Okay. So, um, this is the last major and
24:41 it is a major feature. um it is a big one for uh total CMS 3.5 and
24:50 uh let's just talk a little bit about um what MCP is okay and what that means for
24:57 us okay so um I'm sure you've there's two methodologies
25:04 for integrating an app with AI I'm sure you've used several websites
25:11 and maybe some apps where uh it has like a little chat interface and that chat
25:17 interface um you can type whatever you want and then the app does something for you.
25:23 So that is integrating AI into your app and there's some benefits of that. It uh
25:32 you know gives you kind of a native interface inside um but there's some cons to that as well. It it definitely
25:38 locks you in to
25:45 it locks you into a particular AI service. Also, the way that total CMS is
25:52 um managed since it's all self-installed on your servers. Um, that essentially
25:58 means that from from my perspective, unless I do
26:04 like a bring your own key sort of thing, um, yeah, that means my I have ongoing
26:09 costs for AI usage and whatnot. And, um, for pretty much a one-time use, you
26:15 know, self-installed, self-hosted product. Um, I don't think that that model works.
26:23 Plus, it ties me into a particular AI provider. Um, requiring that even if I
26:29 did a bring your own key sort of thing, you'd have to register with that device, that provider, and then I'm tied to that
26:35 particular provider and everything, all the changes that they make going on in the future. Okay. Um, so it definitely
26:42 adds a lot of overhead and potential inconsistencies um that I don't feel um I wanted to
26:49 manage. So, if we're not going to integrate AI into um total CMS, um what are other
26:57 ways that you can do that? Well, the other way is integrating your app into
27:04 AI. Okay? And that is done through something called an MCP. Okay? That is
27:10 called um multicontext protocol. Okay?
27:15 And essentially what it is, it's it's it's a standard that
27:21 many AI providers, Claude, OpenAI, uh Open Code, all of the all the big ones
27:28 support this open standard where their chat clients
27:34 can integrate with your app. They know how to talk to your app
27:39 in a standard way. And that's exactly what we're doing.
27:44 Now, I already have an MCP server for Total CMS. And you might be thinking, Joe, you already shipped an MCP server.
27:50 What's What's different? That MCP server is a completely wide openen public MCP
27:57 server that purely um instructs your AI agent of choice with how to use Total
28:05 CMS, how to use Twig, uh and stuff like that. So it's it purely instructs about
28:12 the API for total CMS and that's great. It really is. Um it
28:19 some people are already you utilizing that to actually build some really awesome stuff as well as extensions
28:25 because 3.5 has extensions which we talked about last week. Okay. But we
28:31 want I want to go farther. Okay. Okay. I I don't want AI just to know about how to use Total CMS and how to help you
28:38 build Total CMS, okay? I want I want AI
28:44 to be able to know about your data. I want I want you to be able to have
28:50 your data integrate with AI. And that by that I mean the data that
28:56 you store and save inside Total CMS. I want Total CMS to be able to help you
29:02 build out your schemas, help you integrate your data with AI so that it
29:08 can do some really amazing things. And so what that is is essentially um
29:13 this project is turning total CMS into your own MCP server because this is
29:19 going to be every instance of Total CMS can be an MCP server. I say can be
29:25 because you can turn it off, okay? doesn't have to be.
29:30 Um, now MCP will be a pro only feature. Um, so if you're using um, you mean
29:37 building a rag? Not sure what rag means, but [snorts]
29:42 um, so yes, every instance of total CMS can be its own MCP server. So pretty
29:50 cool, very powerful. Um, let's show it off a little bit. Again, I have less
29:57 than 24 hours of development on this. Okay. Well, I have a lot more in terms
30:03 of planning. I've been planning it for a lot longer, but um what what I will what
30:08 sneak peek I will give you right now. Uh let me switch this off Italian so that uh um yeah, so it's all standard
30:16 English. Let's go back to English here. There we go.
31:40 Okay. Hopefully sound. Damn it. No sound. [snorts]
31:49 Sweet.
31:54 Once you guys hear me, my beautiful singing, let me know in the in the audio and um we will jump back in.
32:05 Ah, that's better. Okay, cool. Um, all right. Settings are pretty simple. Right
32:11 now, it's just essentially enable, disable, public access. And if we go into utilities,
32:20 API keys, um, you can actually create an API key.
32:25 Okay, that and one of the new things now is you have to do get and post and
32:31 either if you want to have an API key just for MCP, you can enable that. Okay, so you can create an there's now MCP
32:38 later on. Um I I will have much more granular MCP has various something called tools and uh you can enable
32:45 specific tools for an API key if you wanted. Okay. Um, so anyway, another
32:50 thing that I will also eventually have is um, if you've ever used some other private MCP servers that tie into your
32:57 data, you can have OOTH. So I will definitely support the OOTH workflow um,
33:03 for um, MCP as well. Okay.
33:09 Now, one of the very important things about MCP and especially when
33:17 Total CMS, let me let me back up here. Total CMS is a very obviously a very
33:22 generic tool, right? You can you can have you can store any kind of data that you want inside total CMS.
33:31 So, how do we teach AI about your data when
33:38 when I don't know what your data is, right? Because you can store whatever
33:44 whatever kind of data you want in total CMS. So, I need we need a way to be able to describe your data so that AI
33:52 understands what that data is and knows how to query for it.
33:58 Okay, that's essentially what I've gotten so far. Okay, again, uh I'm not we're not even get into an AI chat
34:04 window right now and try to show you how all this works. Again, it's been less than a day. Okay. Um
34:12 Okay. So, now if we go into uh our collection, uh let's go into the
34:18 blog collection uh for now. And I'm going to edit this collection.
34:27 inside of a collection there is now some MCP server stuff. Okay. And uh there is
34:34 MCP access whether or not you want admin only which requires an API key or if you want public access. Okay. Then you can
34:41 also give it a description. The be the better your description the better AI
34:47 will know what is inside this collection. Okay. and exposed. We're not even going
34:54 to talk about this exposed to resources thing um anyway yet. But yeah, so right now you can give it a level of access.
35:01 So maybe some um some collections maybe you want to be kept private, some you want to be public. Okay, so there's
35:08 going to be some uh you have level of granularity. So some collections can be private, some can be public.
35:15 And again here we type in our full description of what um now for backwards
35:21 compatibility. If you have nothing inside of here because it's an existing collection, um it will use this
35:26 description up here. But from what I've seen, no one ever fills that in. So,
35:32 [laughter] um because it's not really used it for anything other than a description that you can see inside the UI. Okay. Um but
35:40 now it's actually useful. So, um we have uh the AI description. Again, this is a description to help AI know what this
35:48 collection contains. Now on top of this description uh total
35:56 CMS will give it all of the schema information about uh the collection and
36:01 the objects within it. Now a lot of that will be automated because
36:08 in the schema we know exactly what properties are there, what type of data those properties are so on and so forth.
36:16 However, there is going to be more information that maybe I don't know.
36:23 [snorts] So, inside every single you might have saw this earlier. There is now inside
36:28 schema uh when you click on a property there is now an MCP details dialogue or
36:34 details and inside here you can actually have a description for every single
36:42 property. And again, the the entire purpose of this is to give a description so that AI
36:50 knows exactly what this property is.
36:55 And then there's a few things that says, hey, uh you can actually hide some fields from the MCP. Um whether or not
37:01 you you can filter by this or whether or not you can sort by it.
37:06 Okay, so yeah, pretty uh that's essentially the configuration. It's
37:11 going to be a lot, right? and it's dependent on you to do that. I can't I can't automate this.
37:20 Um I can automate. I can say, "Hey, this is a style text area. It contains HTML." And if you don't supply this, I actually
37:26 I I kind of back up and do I look at the label and placeholder and help text and I try to formulate some of that
37:33 information if if you don't provide any um in the description. But yeah, um it's
37:40 it is definitely up to you to um provide this information. So if you want a good
37:45 MCP server for your data, um you'll have to supply the information.
37:51 Okay. Um and that's essentially it. That's all really I got for you. Now, um I do have some uh the communication
37:59 working, but it's not in any state that I can actually show it off on a live stream just yet. So um yeah. Um, that's
38:08 essentially uh the MCP. Again, that that's kind of an overview of the configuration. It will probably change
38:14 by the next time I show it off, maybe at the hangout on Friday or next week. Okay. So, um, definitely I I'm expecting
38:22 this to maybe about two to three weeks of development. We'll see. Um, it's a
38:28 lot of work. I'm only very early stages of it and uh, but I'm really excited. I
38:33 think it's going to be something very unique in the industry. Um, and I think it'll it'll really help you guys and
38:39 your clients and whatnot um, really integrate and take their businesses to the next level because they can then
38:45 have their sites and their data integrate with AI, which is um, what everyone in the world's doing now, I
38:52 guess, right? So, there we go.
38:58 Sweet. Excellent. Franco, I'm again, I'm not
39:03 sure what Rag is. Maybe we could talk on Friday if I if we if we talk and we can we can discuss uh a little bit more back
39:09 and forth about what you're talking about. But it seems like uh what what I'm building is is what you're envisioning. So that makes me feel good.
39:16 Excellent. Um sweet guys. Look, I told you it was going to be a fast one, didn't I? Look, it was only 40 minutes,
39:24 man. Pat on my back. It's going to be a quick one. Okay, that's all I got for
39:29 today, guys. Um hopefully I'll see some of you on Friday at the Hangouts. Um, and uh I'm going to go get some food and
39:36 then hop back into uh back into this MCP server. So, take care everyone. Have a
39:41 wonderful rest of your week. Go forth and make your websites great. Bye.