How To Make A Blazing Fast Search For Your SvelteKit Site

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hey friends what's up what if I told you that search doesn't have to be complicated but not even that that you don't have to use any paid service so the cost is only going to be the electricity and maybe one network request you're going to see how later so let me just really show you quickly an example if I use this search on my site let's say I'm looking for something important so for example I want to find the mention of a banana in all of my post how beautiful is this friend but let me show you something that is more incredible so when I open the network Tab and again I'm just going to pop up the search and you can see there are zero net request so what is this black magic and basically we're going to use this Library which is a lightweight JavaScript text search engine Flex search so this is going to handle all of the difficult test for us and all of these things are going to be linked in the description including this post so you can read this post if you want you can try this example that you're going to create today and I also included a link to the repository here so you have all of this available to you and at the end if you're still interested I'm going to actually go over the p request for my site where I implemented the search so I can show you some of these finer details because we will be here for an hour right but as you're actually going to see I just want to show you the basics of how you can implement this and you can do it under an hour trust me all right friends but before we get started a quick message from our sponsor myself so you can support me by becoming a patreon starting low is $1 a month and also don't forget to like And subscribe thank you for your support all right friends so I'm inside of an empty spel project and this actually works for any javascrip framework where you can create a standalone endpoint and I'm going to show you why we need to do that of course you can use a standalone server to create an API so basically the only dependency you need is flex search you can use npm I'm going to use pnpm at Flex search and I already have it installed so I'm going to skip this step and let me just start the development server so that's going to be basically it and next let me show you the project structure so how I structure this project isn't really important you can place these files anywhere you want outside the usual swell kit conventions for creating routes and end points right so here inside lib here we're going to have the logic for search here in our routes we're going to have this Standalone endpoint plus server TS and here are the example posts I have so let me just quickly show you how this works so you can find this of course in the post or in the repo if you want to follow along exactly but you might notice something different this is just clean text right you're going to have markdown which you need to strip right so for example if we go here to this endpoint plus server TS you can see we're doing a silly thing here we're importing Json and then we're serving this Json as a but of course in your project documentation whatever you have you're going to dynamically import your markdown and then you're going to strip the markdown and you can use any npm package for that so for example we can go to npm we can say remove markdown and then you can see there's a bunch of packages you can use here but yeah so now that we have this endpoint let me just really show you so this is going to be at search. Json so now we can use this to index our post and another thing I haven't done here we're going to pre-render this also so so we can say export cons pre-render true so when I rebuild this project right to verell or whatever then it's just going to do this once and then it's going to cach it forever so you don't regenerate this each time you hit this endpoint this is why we create this Standalone endpoint because otherwise we could also create programmatically a Json file but then we would need to write some script to generate that each time so we can read that from a folder if you want that's also another option you can do but yeah that's basic basically it for the setup all right friends so next I actually want to quickly show you how Flex search works we're going to see the search is actually the easiest part of this entire thing the most work we're going to do is going to be highlighting the text that the flex search results return all right so I'm going to go to the root page here I'm going to close the sidebar and then I'm just going to create this script tag and let's just import Flex search from Flex search all right so let me show you how simple this is actually so we can create an index we can say index and we can say new flex search index and we can also pass it some properties here but let me actually show you something first so now to add things to our index we're going to use index and then we're going to say add and documentation they're recommended to use numbers for the index so we're going to say for example zero and then we're going to say hello and then also let me just copy this over and we're going to say hi here or whatever else and basically let's say this is how you start to create your own index you can index whatever you want all right so now you can have your results for example so you can say cons results and now you can say index search and now you can search for something for example let's say if this works and you're going to see it doesn't and I'm going to explain why so we going to say console log results and now here I'm going to open the developer tools console you can see we get this empty array back because it couldn't find anything but if you type in the entire word hello it should should match so it's going to return zero which is our index so now you can for example if you have a lot of post and you find a match in all of those post you can return those po by the index and this is how simple it is I told you right but let me actually show you something else you can pass in some properties here so we can pass a tokenized method so we can make this even more awesome we can provide this forward method so this is going to match for example since we already have hello here and now when we start typing p is going to match match this entire thing so you can use tokenized forward and now let me just show you now we can just type he let me save it and now it should also return a result Let me refresh for good measure and you can see it Returns the right result how awesome is this but yeah that's basically how Flex search works this is everything you need to know about this and of course if we have here hello world just save this refresh you're going to see we get back two hits because it matched both of these post based on the index 0 and one all right so now we understand how Flex search works but I'm actually just going to take this import and let's go to our search TS file so we can have all of our logic right here and then we're just going to create a couple of functions so we're going to have export function create post index so we're going to pass in our data here which can be post but I'm just going to give it any type here you can of course import your post type or whatever else you want a I stop bothering me okay so now we can go to export function search pulse index and then we're just going to pass in a search turn which is going to be a string and that's basically going to be it for now all right so now we need to store the index and the post so I can go here I can say let post index which is going to be of type black search index but of course Ty script is optional as always and then we're just going to keep track of post gear so this is what you're going to query and Etc and let's also complete this type thank you all right so here we're going to do the same thing I'm going to say post index so we're going to assign it here to this post index but we're just going to do the same thing as before so we can say Flex search index boom bam thank you ma'am how easy peasy is this friends right look at this okay so now we just need to Loop over our post and you can organize your post however else you want you can include text here you can do whatever shape you want it's not important that you have this exact shap title slot content this is just something that I made up right and I'm going to actually show you how this works so we can go over this data and we can Loop over it and now I can just say post and I also want the index because I want to index it by the number that's the only reason why I'm using index here and you can see already our AI is trying to help us out and it actually doesn't look bad but I'm going to actually cancel this so first what do we want to index so we can say for example item and then you can just say post post content right but you actually want to index the title and the content so we can just concatenate them together so we can just say post title and I should do this properly let me just do it like this we can actually say post title and let me actually see if this thing is smart enough oh it was almost smart enough and it said post content right beautiful so now we have this item right and it actually screwed us over this is why you shouldn't trust AI my friends and you can say post. title post. content so now we can index all of this thing and it's going to be blazing fast and now we need to index it we can say post index and now we're going to say add so we're going to pass the index which is going to be 0 1 2 and Etc and we're going to pass in the item that's it this is how we create the index for our post for documentation whatever and now we just need to assign this post to data so we can quer it right so we can say post equals data and boom easy peasy LEL squeezy like that friends we created a search index for our post that's right all right friends so let's create the search and I'm going to scroll up a bit so the first thing we need to do is we need to escape this search term because we can type in special Rex characters like dot or whatever else those crazy characters are so we basically just need to escape the character and return the Escape character and this is actually where something like AI is incredibly helpful because it's just going to do the work for me so let's just say Escape SP natural reject character so if I start typing let's see if it's smart enough come on AI oh my God it's embarrassing itself search term replace oh there we go this is the source this is the exact code that I wrote of course don't always trust AI I already ye this code for someone else before so I know that it's correct when I look at it right and you can always of course test it it just looks intimidating right but this just replaces this thing and then it returns this as an escaped character so you don't delete the character because you maybe want to search for a DOT dollar sign or whatever else basically that's it it's not intimidating at all all right thank you all right so now we can actually say cons results and we can just do the same thing so we can say post index since we have it in the upper scope so now we can say search match that's it thank you all right so now I can go here and the only thing left to do is we need to return the results so now I'm going to say return results and now we can map all them so remember how I told you that this thing Returns the indexes okay so this matches things like index one 2 3 4 and now we can just filter or map over and return the PO that match that's how simple easy peasy Lon squeezy this is friends so we can just say results map and then let's just say it gives us the index right so now we can use this we can say post and we can just map over the post based on the index right and T is complaining because it's obnoxious what I'm going to say is number and that's basically it so now at this point this is done the search is done the hardest part well the hardest part is not going to be part but most of the work is going to be on highlighting the return text right so we can actually do this map so now we get the post back right and now you can do whatever you want the world is your oyster right so now we can say map and let's just the structure the slug title and content from this and now we can do a ever we want based on this content all right so now we can return slug title and content and I'm doing this in a weird way because we're actually going to come back to this code and update it to return the highlighted text all right so let's save everything and the next thing we're going to do we're actually going to go to our template and see how it works right all right so let's go to our page and now I'm going to ye everything inside of here so let's create a script tag again and now I'm just going to import on Mount from SW how beautiful is this and now I'm going to import let's see if we can do it like this we can say lip search wouldn't be easier if the Imports were opposite so you don't have to do this weird thing but whatever okay so we exported create post index and we can search post index that is basically it so now here let's create some piece of state so now I'm going to create let search and people love using their booleans but I actually love using explicit state so here we can just say search by default it's going to be loading and I'm just going to use a cheeky type here so let's see I'm going to say loading and the other state is going to be ready so that's basically it and then I'm going to say let search term which can be empty by default but let's just use imagine just so we have something to work with from our post right and then here we're going to keep track of the results so I can say results and which is going to be an empty array so that's basically it all right cool so now let's use on Mount so when this component mounts then we're going to do some magic all right so now here it comes our endpoint right so we actually want to fetch this endpoint and do whatever we want so that's how beautiful that is so we can just say cons poose and we can say AWA Fetch and now we can just use it relative like this because ccit is going to understand how to resolve this search. Json PA right and then I'm going to say then so we're going to get the response and then I'm just going to say response. Jon okay and don't forget to make this async cool so now if I let's just console log out post so we know that we're not insane and now when we go here you can see here we have all of our post right and that's beautiful all right quick quiz time what do we want to do first I'm going to wait of course oh my God AI is ruining all of the fun of course first we're going to create the post index it already new right like I'm talking to it so now we're just going to pass it the post let's see how it works so we're going to pass in the post here boom bam thank you ma'am is going to reassign the post here right so that's how it's going to work here we have this data and boom now we have it here hope that's clear right so now we're going to create the post index and then we just going to upate the St we're going to say search what it's ready boom so now we're in business cool cool all right so I also want to update results each time we type search right and of course you don't have to update search that often you can maybe wait for a user action like enter or whatever but actually in this case we can really afford this in this example because it's blazing fast right so what can we do well we're still using swel 4 here but you can probably use an effect in swel 5 but I'm going to use this really simple dollar sign so now I'm actually let me just back up a bit I'm going to say if search is ready only in this case we're actually going to search the index right and it already knows come on a you're ruining all of the fun of coding what is this okay so we're going to say results equals search post index search term and then this is going to update real time and we're going to see what's up all right so now we have to wire up the UI so now I'm just going to go here and I'm going to say if so I'm going to say if search is ready only in this case we're going to show something so I'm just going to create this element search I already have the Styles globally which you can of course check out in the links if you want and now we just need to create an input type let's see can I do it like this boom search all right how beautiful is this right so now we have an input type search but it's not really important let me just make it look prettier all right cool so now we actually need to add a couple of things here so first we're going to bind this value to the search term super easy peasy then we're going going to add a place holder going to be search then we're going to turn off autocomplete because it's really obnoxious so we can just say off and we're also going to disable spell checking so we're going to say spell check false and that's basically going to be it all right so now let's actually see if this works so we can actually do something cheeky here let's just use this pre and then we can say results so this is one of my favorite snippet pre is just going to format things for us and because we're updating this results here it should update right let's see what is it complaining about varable any type yes who cares I just say any so stop complaining at me how beautiful is this friends all right so let's save this and you can already see we have this post let me just refresh for good measure and since this pre is at the top it's annoying so let me just move this code here so we have the input here and let me just see where's the input where did you go Mr input oh it's here center of the screen because I'm using Styles which are in the layout so you can check that out okay so let's see painting all right so in this case every post has the term painting so let's search for something imagine and this is also what every post has of course let's search for Sunset and you can see how beautiful and instant this is so we can search for Joy actually let's search Lake how many po do have Lake if you don't search for anything then it doesn't have anything but let's also search for something else Forest dense or whatever else you want all right so you get the picture right now and this is implementing the search right this is how simple this is so all of the work is actually going to be returning this text and highlighting it somehow so that's what we're going to do in the next part all right but before we do that let's actually not use this let me just see I'm going to remove this pre and we're just going to come here where our input is inside of the search and I'm going to create this element results so it looks prettier right and now I'm going to say if results only then we're going to show the results let me just show this ul and then again let me just create this snippet and then I'm going to say results as result and now actually when we go here we can just say Ali and now we can complete this all right so now we can include the link or whatever else you want and let's see is it right it's not of course so we're going to say slash don't forget the slash it's really important otherwise if you're on another URL it might not work right so we have to say slash this route and then we can just say result Slug and that's basically it and this is actually the cool part so what you're going to do when we replace this text with a marker a HTML element right we can just render out the HTML here so we can say we can use swells at HTML and then we're going to say result. tile so when we return back the HTML in a minute right and then let's also include the paragraph which is going to be the text and now we're also going to say here at HTML res. content and that's how easy peasy this is friends so you can see already I have default Styles right so things look absolutely beautiful so let's uh look for some Search terms magic all warm Autumn joy and Etc each post has imagine right and you can see everything works beautifully let me just bump the size up so you can see what's going on yeah spring whatever and basically this is it this is the search done but of course let's see how we can highlight the return text all right friends let me show you the game plan so you understand what's going on so for example here is our goal right so let's say for example that we match this content from the post hello world all right so now that we have this so this is what we return slack title content boom so now we can do something with that content right we can swap this word with a HTML marker right but how do we do that well first inside of this post we actually have to find the index for that word so this is going to be this Index right maybe it starts here right really I'm making things up right I don't know what actually this index is but okay now that we find this index and imagine if this is a longer paragraph and then you have some other things like banana here okay so now we take this index and then we can also take a snippet from this T right so we can based on this index we can maybe go back to 20 characters we can start here and then maybe we can go ahead 80 characters and then we're going to return this snippet so actually we just going to return this text and then we're just going to add dot dot dot like this so that's basically how this is going to work actually sounds complicated but it's actually very simple once you see it all right cool so how are we going to do that well I'm going to create a function and we don't have to export this because we're only going to use it in this file we're going to say function get mattress so we're going to pass a couple of things we're we going to pass text which is going to be a string we're going to pass in the search term which is also going to be a string and we can even specify a limit as you see here in this example let me just show you so we can say I don't know Forest nature so you can see how we get one search result from the post but maybe you want to return more of these instances right and you can also index things by other things maybe you have post and then you can index things by every heading right so maybe you can return this title of the post and then for every heading inside of that post maybe you can return search results for that that is something that the swell side does if you want to check that out right so that's basically what this is but of course you can return this here and then back in your template here where you have this content you can Loop over these extra results if you want but yeah let me just show you how this works so first I'm going to go here and going to say Rex and now we have to create a dynamic Rex so for example if you might be familiar with a Rex literal like this and then we would say something like this at the end but the problem with this you can't really pass in a variable here like this isn't something that you can use even template literals on so this would always be the same thing and in this scenarios we use a dynamic reject so that is why we're going to use this funky syntax we're going to say new regular expression boom easy pey lemon squeezy actually I don't want this so we can say new regular expression and then search term and actually want G for Global and then we're going to pass I so it's case insensitive right and then we want to keep track of the indexes so this is going to be an empty array and here since we have this limit I'm going to say let match zero so we're going to increment this inside of our Loop and then we need let match which is going to be from the while loop look at this it already knows because it slurped up the entire internet right and let me just really show you what you're going to use so you don't think I'm super smart or something basically if you look at this on on mdn it's literally the same example that it has here it creates a dynamic regular expression and then it does this method executive and then while this matches then you can do something whatever but yeah basically it's all on mdn and this AI just slurps it all up but we're actually going to modify this a bit so actually let me just start typing while and then let's actually see what it says okay while let's see match equals rex. exact text that's right and then let's actually now I lost it of course while I was reading it right let's see if the gods are going to have mercy on me okay null whatever we can just go this so match equals re exact text isn't equal null but it's option right and then we also want to take on and if matches is lower than the limit of course cool so now what are we going to oh my God it already knows it already ruined everything so it knows that we want to push to the index so we're going to say index is push the match in index that it returns right and then we're going to increment matches easy peasy like this friends and let me just remove this this looks like something extra so yeah that's basically it so now we're going to push this indexes where these words occur so we're going to have index 1 2 3 4 however much you set this limit but in this case we only just return one so that's why it just Returns the entire post and nothing else right but yeah that's basically it it's really not that hard as you see and now we're going to do that logic where we return the excerpt so what do I mean well we can just return so now we can map over the indexes so now we get the index back and now we can just specify the things so we're going to have start so now we can go back 20 characters or however else you want and look at it how does it know right so let me just really show you I'm going to autocomplete it so now we're going to define the start and end so now instead of 20 let's say that we're going to go ahead 80 character right and then we're going to use text substring so we're going to take that excerpt text and what's really beautiful about substring compared to something like slice if you have a negative index it's going to be zero so it's never going to go out of bounds and you're going to get an error right so this is really why I love substring in this case but this case actually we're not just going to return this because that's just the text right I'm going to name this Con excerpt I think excerpt is that how we type it yeah I guess so now we have this and let's just trim any y space that we have all right so now we're going to return this as some format the text right so now we can say return if I spell it right so let's just return this template literal all right so now we're going to have dot dot dot dot do dot at the middle here we actually want to take this excerpt and we want to replace the match text with a marker right so that's something that we're going to create another function for so let me just create this template literal and we're going to name this function replace text with marker and then we're going to pass the excerpt and we're going to pass in the search term so let's create this function above this so we can say function let's see replace text with marker let's see how smart it is actually is it going to complete H doesn't matter so we can just go here and let's just pass it some parameters we can pass the text a string and then we're going to name this match which is the search term but it's not really important all right so this is going to be really simple just two lines of code I think and we actually need to do it in a way so it's case insensitive but the beautiful thing is that you don't have to do anything special we can just use text replace all we can get back the match and then the match that we get back we can just replace it so we don't have to do things like two lower case or whatever else and then ruin the results because everything is going to be lower case right all right but enough talking let me just show with so we're going to again create a dynamic Rex so we can say new re or whatever and then let's best in the match and then we want the global flag and the case in sensitive flag all right so I'm going to show you how simple this is all right so now we're going to say return text and in this case we want to replace all let's actually see if this thing is smart enough oh how beautiful is this friends it already knows so we're going to pass in Rex let me just complete this we're going to pass in this rex that we're going to use then we're going to get back the MCH which was caseing sensitive right so this is really how beautiful this works so now inside of the text that we have so for example let me just remind you again if you're feeling lost so for example we have hello world so we just really pass this to this function and it says all right I should match and replace this text so it's going to be Mark Mark and this is what we're going to return and get the syntax not syntax highlighting but regular text highlighting in our search results and of course you may be noticed we rendering HTML so if you have any HTML in your markdown don't forget to strip that out also and I'm also going to show you that in my PO request how I've done it but basically that's it if you can believe it right all of my talking right but if you just look at this code it's really not that intimidating of course when I've done it it took me a while to figure it out so I really don't want to pretend here that this was all done in 5 minutes took me a while to figure it out but yeah that wasn't that really bad right so we can save this and now we should get the excert and remember here we just have these results and then we Loop over them and then we output the HTML cool so now if we go back here and of course nothing is going on because I'm silly right okay what is the problem do you know what are we doing nothing that's the problem so we have this awesome get matches we're not using it anyway right cool so this is the part that we want to change because we return this and now we just need to form this silly me right silly goose all right so we can keep the slug but for the title we can just use the replace text with marker and then we can just pass in title match that's it and what we want to do for the content well we need to do two things we just need to get matches and then let's see we just need to pass the content and match right because this is just replacing the title that we return because it's way simpler right so we just going to replace text with marker but in the case of our content we actually need to find the indexes for these words and then we need to replace them right so this is going to replace TT with marker and boom that's it you're done so let's actually save this and now you can see how beautiful this look say so this just returns this exert right we're going back 20 characters but we're going ahead 80 characters which we can adjust of course so let's just also look for something like stroke Joy painting imagine beautiful sun you can see how fast this it it just rips through everything but yeah that's basically it for the search I think and if you're interested in the next part I'm going to go over the pull request I made for my side to show you some extra things all right friends so let's quickly go over how I implemented search for my side and as I already told you the naming and placement of these files is completely irrelevant so you can see I have all of the search Logic inside of this ui/ search folder and I have this endpoint inside of my API SL search folder right so this really isn't that important so I'm going to close the sidebar and the search Logic is going to be the same it's the exact same code that you saw earlier but let me show you how I prepare the data so I don't know a mood struck me here I was like I don't need a package but actually trust me use a package from npm but actually I had a lot of fun creating this and please don't forget to strip out the tags also if you have them in your markdown otherwise you're going to render them so I replace the tags with this HTML entities so I have this function strip markdown I pass the markdown and then I Loop over this patterns and then I replace the content and that's basically it so here's the part I was talking about you can use vit and import metag Globe to dynamically import your post then you can Loop over the post I'm checking here if the front matter from the post is the post is a draft then I'm going to return null otherwise I'm going to return title plug content and then I'm going to filter it by passing Boolean so it's going to remove all of those null values and then I'm going to return the post as Json and pre-render everything so that's basically it and in the component itself I'm doing some things different so for the dialogue I'm using Mel UI so you can ignore all of this junk here this is just melt UI so let me just show you use melt and yeah it's almost the same code here's this button so yeah of course this is just a fake input when we open it another thing that you can do for example my content is one Meg in size but maybe you have a lot more content so you can instead of doing this on Mount maybe you can just do this when the user clicks on this just so you don't text your mobile users and Etc that would be also a nice alternative and also I'm checking what the platform is so I'm checking here if platform is Mac Intel then I'm going to show this special Mac symbol and how do I know that well if we look here at the code first I'm going to import this browser from swy to know that we're in the browser context once I know that you're in the browser context then I can safely use window. Navigator platform and that's how I know the platform so for the state it's really not the differ so for the state I have idle load ready search term is the same here keep track of the results but here is something different than I'm doing I'm using a web worker and why am I using a web worker well let me just really show you I didn't even have a problem with performance but to make it future proof and it actually feels a bit smoother you wouldn't even be able to see it on the video you would have to experience this but let me just really show you I have a lot of post and look how these things rip through them right there is like no no delay no Jank but maybe if you have a lot of content at some point the UI would start to feel janky because you're blocking the main JavaScript red and let me just really show you where you can see a worker not to be confused with service worker a web worker is just a background text so you can run some code in a separate fra which sounds intimidating but it's actually really simple so let me actually show you if I refresh this you're going to actually see it here here is this special sign search right so you're going to see here is the search and you can also see inside of the sources here is this special C symbol right and I open this but let me just close it and yeah that's basically it that's what the web worker is all right so how does it work well let me show you well on on Mount we're going to move all of that logic inside of a web worker instead so what are we doing here we're saying search worker equals new search worker and we can do that because V has this special import for workers you can name this whatever you want you can name this banana but you can see here we have the search worker question mark worker so this is a special V import so now we're going to initialize the work worker and then we're going to add an event listener message we're going to D structure type and payload so if the type is ready then we're going to assign the state to ready otherwise if you get the type results we're going to reassign the results from our worker and the first thing we do of course is just shoot off a message type load so let me show you how this works here is our worker so we just import here all of our logic from search so now the computation happens in the worker right and now we can listen for these messages here so the first message we sent is typ load so we're going to do the same thing we're going to fetch the post we're going to create the post index once and then we're going to post back message ready so now when we see if the type is ready then we're going to assign the state of search to ready and that's basically it we also have if type search then we're going to search our post index and then we're going to post message type results with this payload which has the results and the results term that's basically it it's really simple like that so if type is results then we're just going to reassign it and to update the UI on our page again we're doing the same thing if you're using SW 5 this is probably going to be an effect because side effects right so we have search worker we're going to post a message type search and because the search term is here swel knows that it should rerun this each time the search term updates that's how simple easy peasy this is my friends and also have this extra thing so we're checking if the search term exists and if the dialogue isn't open then we're going to clear it because you can open this and you can just start typing and then if you close it it's going to be cleared and another user experience thing is on navigate we want want to close the dialogue because I can open this and I can for example start typing banana and I also have great accessibility here but then when I click on the post the dialogue is going to close and that's basically it and the last thing of course is a shortcut so we can use swel window so we can listen for the key down event and then we can say if e control key or if the meta key is pressed and then I have this caseing sensitive searching for E key if it's lowercase or uppercase I thought maybe someone can fed finger caps lock on accident so whatever they're going to PR the defa Behavior because the default behavior when you press contrl K is going to do the search inside your browser if you don't like that you can just change the shortcut and here we're going to just toggle the value of the dialogue and that's basically it friends I think in this template I have some other check here to make sure and then as I told you before you can also Loop here if you have more than one results but in my case I also just return one result so this really doesn't do anything but yeah just to make sure right and here is just some Styles but yeah there basically it so now we have a beautiful search here that we can use all right friends so that's it and if you watch this far I appreciate you and if you like what You' seen don't forget to like And subscribe and you can also support me by becoming a patreon thank you for watching and catch you in the next one peace
Info
Channel: Joy of Code
Views: 10,389
Rating: undefined out of 5
Keywords: sveltekit, svelte, search
Id: llGupgNwmIk
Channel Id: undefined
Length: 36min 14sec (2174 seconds)
Published: Fri Mar 01 2024
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.