First Side Project with Svelte...and Other Cool Stuff (Stripe, Netlify Identity, FaunaDB)

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
therapy is here um i i have not been i've not been very good about scheduling out uh content on my streams on friday i had scheduled them out at a certain point like months out and then got caught up and just have been lazy so i asked brad if he would come on to join me and we enjoy hanging out and talking about the stuff we work on sharing ideas and stuff and i wanted to get his perspective and i think lots of people have questions about it too uh what it's been like just working on a side project because you spend like you spend a lot of time working on the smurf tracker and you are doing like 9 00 p.m street 10 p.m stream like i i'd never catch them because i'm in bed at like eight but uh like you're doing all this really cool work outside of your regular work hours and i wanted to get your perspective to just kind of talk about that stuff yeah but he is muted oh no um oh i think uh yeah cuz okay so i didn't realize this is how that works so talk for a second we'll get these check check that's a little bit too loud to keep talking check check one two brad oh yeah i hear myself hear myself on stream now all right um so the reason is i didn't realize this happened in um in stream labs is on the main scene so i have like one uh desktop or like audio coming from the computer so like basically whatever i hear in my headphones is what you will hear in the stream except i muted that on the waiting screen so that they wouldn't hear you talking while they were waiting they would not hear anything because i usually have it turned on so you can hear background music but with a guess i turned it off i didn't realize if you do that in one scene it does it in all the scenes i didn't know that so anyway there's a there's a fix for that okay i'll coach you on that later yeah this is like i mean people who have watched any of these things know that like streaming is a learning process and you gotta like learn from each other and figure out what the hell you're doing for a long time yeah so uh you were kind of talking about how i do a lot of late night streams i do a lot of side project work um it's just one of those things where i think you have to put in time outside of the workday in order to get better at this stuff otherwise i just don't think you're ever really going to have enough time to learn and plus it's something i really enjoy doing i i'm kind of breaking into the point in my career where i feel like i can make uh whatever i want you know so it starts opening up possibilities that's one of the like game-changing moments so i've talked about this a lot just like being a developer eventually you kind of transform your mindset and you stop being just a consumer so like consumers like they download applications they go to websites they use them when you change the mindset into like becoming a producer and a creator you look at those things that other people create and you look at ideas that you have and you feel super empowered because those are the things that you can then build yourself which is exactly why you did this one yeah yeah and a little background on murf in general like uh it's a crossfit workout that's usually done on memorial day it's a workout that kind of honors a fallen soldier with the last name of murphy um and my buddy challenged me to this like do a half of a murph every day for a week and it was definitely really tough but i i found out that i wanted to track my times and see if i got any better over the course of the week and i i definitely did but it was really difficult to keep everything straight in my head so i was like i should build an app for this yeah those are the best use cases like people ask all the time or like the the recommendation that we give to get better at programming and to learn more is build something and then the people people in general are like well i don't know what to build it was just like something random in your day that would be helpful for you so i like i've been thinking about doing um a scorekeeper for disc golf and so like i could keep my score i could save historical ones i could compare like how i did this time versus a previous time and that kind of stuff so i thought that would be really cool um our fan comments are saying video is much better than the rest of the streams he's a fan of the discord stuff so this is working really well i think so far it looks good the only problem that i mentioned this earlier is i'm recording you from like the i'm recording that entire monitor and then describing you because if i grabbed a window it was really not performant which was really odd it was really delayed so that means i can't do anything like have the chat open on this other monitor i have to look down so excuse me if you see me looking down a lot yeah we got to get that figured out yeah i'm sure there's a way around it i mean there's a million different things and i like for people out there if you're curious like i could put brad down on this monitor and have the chat up here but i also want to see brad like when i'm talking to him and ideally it would be like right at the camera but it's not so anyway these are like the first world problems that that people are trying to figure out um tech has sounds like tech has a side project and he's been sharing it in the discord a lot um he's really taking bookmarks to like a new level you know with tagging and sorting uh it sounds like a good personal use case for a side project just to build something yeah and uh tech gadget were you asking was it you that asked a question an air table of like how do you query what the multiple choice options are if you have a multiple multi-select an error table i think that might have been you that was asking about that uh but if you have a link to the project or anything share that and let me know i'm saying you can't yeah i think you'd have to create another table and then just query that table for all the options which is not ideal but um anyway so be thinking people in the chat be thinking what kind of what kind of questions do you have for people that work on side projects uh time wise how is this how is it difficult brad has a family so if you want to know like how he um how he balances that sort of stuff with family i think that would be a good thing to talk about but maybe one of the things that i'm most excited about and brad i think i think you are too is the technologies that you decided to use for this and the reason was you just you just dove in right you were just like i want to learn all this new cool that people are talking about and i'm just going to use it and do you want to break down like a little bit of the technologies and why you're interested and how that's gone so far yeah for sure um so i kind of said earlier that the main reason for side projects is to like help yourself learn or solve a personal problem and it can you can do both at the same time and so when i started to think about building murf i said let's use this as a learning opportunity initially murph was not going to be like a paid app that was going to go on an app store and all this stuff it was just going to be this little toy proof of concept that i could play with to learn some new bits of tech so what i decided to do was i have had some view experience in the past i'm really really big on react but i've never touched svelt and i this project initially was going to be like a smaller scope so i said i'm going to use felt starting out and then another goal for this project of mine was i really wanted to get over like this hurdle that i had in web development um authenticating a user and saving user specific data to a database has always been a pain point for me um and let's be honest it still kind of is i found out that it's just it's just not easy to do uh through this project but uh i've overcome that and i decided to go with netlify identity for an authentication solution and saving the data in fauna db which is very jam stack and serverless friendly and then css wise i'm very comfortable in vanilla css but there's a lot of buzz about tailwind so i decided to try that too and i have thoughts about all these different technologies that i used oh and stripe to actually process payments so i have so that's i have good and bad experiences with everything the strike part is really interesting i need to force myself like learnwithjason.com or dot dev has you can buy stickers and stuff and he does that through stripe and i want to do i want to do some stuff like that just for like integrating just for the practice of integrating skype or stripe and i want to come up with like some cool branded assets and things that could be emotes and stickers and stuff like he does um my video just went like it looked like one a different color for a second um did you see yeah did you um our pens comment about how you were you were complaining about tailwind for a while and then you ended up loving it you want to talk about like what the what that was like okay i've i've mixed feelings about tailwind skills yesterday um let me tell you this though tailwind pairs incredibly well with felt so when you're when you're writing tailwind you're mostly focused on your html file because tailwind is pre-compiled css classes so all you're doing is adding classes to html elements in order to style them so because you're so focused on the html it works well in in like front-end frameworks like vue and svelte that are template driven directive driven rather than react which is all like declarative rendering you have a render function you're writing javascript it doesn't work not to say it doesn't work well it works exactly fine in react but it just seems to pair more nicely with view and felt that are all template driven and what i mean by template driven is like um how you bind uh inputs to variables how you conditionally render like a div or not if somebody's logged in or not logged in that's all handled in markup in view and spell so because the focus is on the html and the markup tailwind is a natural fit for those frameworks okay so when you mention like it being in markup like we're talking more more like a templating engine like like uh ejs or pug or something like that's what you mean yeah kind of so the waste felt and view work is like if you want to conditionally render something okay i'll compare this to react because we're all familiar with react um if you were going to conditionally render something in react you'd have to write like a ternary statement to determine if you're going to return like you know option a or option b or like the double ampersand to just not render something if you don't want it to be there instead in sveltenview you use these things called directives the little template tag things are the which which feels a lot like ejs or plug like you were saying um exactly so the focus seems to be just more on the markup and because of that tailwind works really well it's a natural fit okay you know like i didn't i didn't have this epiphany until later on but if you look at react basically what you're doing is you're doing like es6 template literal strings because when you when you do your javascript like when you do a map or a conditional or something like that you're writing javascript right which is the same thing as if you had like esx template literal strings and then you just like wrote javascript inside of like a interpolated variable or whatever like i use i don't know if that makes sense to other people but when i do some of my just like vanilla html css and javascript demos i'll like instead of creating dom elements in javascript i'll like generate an html string and it looks very similar to react because it's es6 and then i just inject variables and i can do any sort of like manipulation inside of that with javascript that i need to yeah true yeah i mean imagine if it's running is i think they're called tag template literals yeah like a styled component you know imagine if it's just that under the hood or something i mean it it's it's really not much different it's pretty it's pretty much the same um ndxdev nick is using tail one with you and it's awesome ndxdev is that what you're using for your portfolio is it is it vue and tailwind and did you go i can't remember did you go with like a nuxt or gritsum or just regular view um we had a long we had several different conversations about like reacting next and gatsby yesterday and some of the benefits and stuff there um ndxdev is using uh knucks and tail one insanity suite yeah that's gonna be a very flexible platform you'll be able to do a lot with that stack that is yeah and i still have in my backlog to migrate my personal site over to something tail one or style components probably is what i would do or a combination like you could you could do your styled components that well not not quite well no i think you can actually you can do like your image or something you could um we don't sound confident that it's a good thing to do maybe you can but i don't think either one of us know um tech edge is saying you can so uh yeah maybe it's the thing uh data brecht is that how you pronounce that uh let me know uh but data is here who is and i didn't know this um is a developer advocate at fauna awesome um i didn't realize that or hadn't made that association in the past um databrick do you have your do you have your twitter handle if you wanna or link to twitter throw it in the chat if you do i wanna make sure i'm following you if i'm not already um but since you're here on behalf of fauna uh brad you're using fauna as your back end for this again kind of your entry point into really building a full stack authenticated application uh how has fauna been and um any learnings or anything cool or anything that kind of sticks out with that yeah so i have nothing but good things to say about fauna um it was incredibly easy to set up with the asterisk of if you're familiar with graphql fauna is very very easy so the way it works is as an think about as an input to fauna the service you give it a graphql schema so you say type user is equal to a name field that's a string an email that's a string and then maybe you'll say like i'm doing workouts right so type workout is equal to like a list of exercises or something and you give that to fauna as an input and for you they create a graphql api and all the resolvers to do crud operations on the types that you defined so like you do no work beyonce this is the form of my data and they hand you an entire back end and on an incredibly generous free tier yes yeah that's the that's the cool thing about just like web dev right now so many awesome tools that have free tiers and you can just build stuff and and love it is is your is that file the graphql schema is that checked in into your um to your repo it is yeah which uh go to source graphql schema.gql okay i'm gonna go ahead and share my screen as well so we can all see this together because i want to show you what he's talking about specifically so inside of graphql and brad you want to throw a link to the um to the source way people can have code [Music] as well and i i missed this uh we just got a raid from f bushiros let me know if i'm even close to that what is going on thanks for thanks for coming to hang out thanks for bringing some people how um how was your stream what were you streaming about welcome everybody super excited to have you um just really quickly a little bit about uh what we're doing is um i've got brad garapey on who we've become pretty good friends just online we've never met in person but just talking about projects and things that we work on streaming together and he has recently been work working on a murf murphy tracker which is a workout in crossfit and has used some really badass technologies to build it and let me see if i can run through this again so fond of db is what we've just started talking about uh tail one css um svelte as the framework uh stripe for payments netlify netlife functions for hosting and serverless functions is that is that all the big buzzwords we got going on notify identity for all netlife identity yes very cool um and f um well f whatever i said your last name was or the last part of your name frank i will call you frank from now on uh thanks again for coming so that's what we're talking about if you have questions about uh any of the technologies that we just mentioned how they fit together what it's like to spend time outside of work working on a personal project how do you stay motivated how do you balance that with uh with your family time any of those questions uh throw those in the chat that's kind of what we're talking about and uh what i was gonna pull up is the the schema gql is what you're saying yeah and uh so this is this is all you did to you literally like take this file upload it to fauna and uh fauna says all right i got you sit back relax let me do this whole like uh graphql layer and let me take care of all this stuff for you and that's basically it i mean it was like it was like almost no load time uh you upload this file and you're sitting in front of a graphql playground with everything inside of it like it's ready to go you know what i mean yeah let me i'm gonna pull open mine and i'll show you i'll throw a self-promotional link for myself in here also i guess that's redundant self-promotional for myself um i will throw a link in here in a second to what i'm gonna show you but just an idea of what that looks like is inside of my list of links this is a crash course that a jam stack crash course that i did i uploaded a very similar file to what we just showed from brad and then in graphql i get the ability to come in with this playground and i can do uh whatever i want in here uh how does does it start off with query like this and then where's my intellisense there we go so i get intellisense for like here's all the different ways that i can query if i do that then i can it gives me intellisense for like what information do i want to get back so if you've never used graphql or especially like a playground this thing's freaking awesome all that stuff's taken care of it sounds like your experience with fauna was like pretty close to what mine was which is pretty sweet yeah and like even better is that everybody who uses fauna uses the same graphql endpoint so there's no like weird endpoint with like a bunch of hashed stuff inside of it all the information that fauna needs from you comes from your secret key if there was any tripping point in fauna it was that there's two different keys one is to access like your databases and one is to like manage your fauna instance and i didn't understand which one to use at the beginning uh i got over that pretty quickly i i had the same length netlife i think you could hear that um yeah i had the same learning so i had to figure that out too but other than that it was pretty uh pretty sweet um here is here's my promotional link is this is a jam set crash course um maybe uh databricks will appreciate this using basically what uh brad just says where you upload a graphql schema to fauna it generates all that stuff for you then you just interact with it by sending it graphql it's pretty sweet um also i have talked about this before i was really proud of this i created a chrome extension this i've got a video on this as well uh but a chrome extension to like show myself my recent youtube links it just doesn't go back far enough to get that video and so like anytime i want to share a video i can just come here and then copy the url to that youtube video and throw it in there so um actually if you want the url too somebody needs to pr adding thumbnails to this so it's easier to to know what you are yeah yeah i would love to this is this is public on my uh github james quick so if anybody's interested uh feel free that'd be great i'd love to love to have some pr's and i might go ahead and do that later on too and i can vouch for that jam stack crash course video uh i watched it in prep to like get this fauna db up and running and it definitely gave me like an under understanding of what's required sweet awesome um all right uh any questions like we said technology wise or just like work life balance or anything like that um what which one one of the things that i'm depending on questions coming in i want to hear about the stripe integration because that is that's one of the coolest things for me and that's something that i want to like i need to find something that i can sell just to go through the practice of like actually setting it up yeah so okay i'll talk about stripe a little bit like using stripe in and of itself is just as simple as fauna you install a stripe library and you essentially call one method redirect to checkout and that's using stripe's hosted checkout they kind of like auth zeros login process or no identities login process it'll like it redirects you over to yeah okay so the url actually changes to be and then you register a callback for when that process finishes it sends them back to your site exactly yeah but it's really easy because you can use stripe again all for free to i should i should say this entire app was built for free right my goal was like i i'm cheap i don't pay for anything so striking i think you'll make a lot of friends or find a lot of similarities between uh at least myself and then maybe other people in the chat too so like on stripe you can make an account and then you can define products directly inside of stripe so for instance in this smurf application the only product i'm selling is like a like a pro plan where like like on a single it's a single payment a one-time payment and you can purchase that pro plan um and then when you have redirect to checkout you install the stripe.js library in your front end you use your public key and then you tell it the id of the item that the person's buying that's pretty much it and then the callback on where you want to go so like what happens on success what happens on cancel um very simple you can actually see that in the code base i have to remember where i put it yeah let me i'll pull it up and i just um i'll switch back over to showing i need to set up my buttons on my stream back i just haven't done it yet um databrecked uh i made it in i made it in the awesome fontadb me here this jam chat crash course and brad i would assume you're going to have some content to talk about like on youtube to show the different things that you created if not i'm putting you on the spot and saying it would be out awesome content and you should yes and then uh data breakdown you can get in here there's so much i need to make uh regarding all of this all the tech i used the whole experience yep yeah there's so much um what's up narendev i think maybe you're talking about talking to like the the newer people on the stream but what is up to you anyway cause i think you've been here for a while do you know where i'm looking in here and yes source pages account page dots felt count page felt so you'll look at a function called on pro okay so this is just a click handler for a button that says gopro that's how you do stripe that's it so what is this what is this pk test thing is that just like a a client identifier that's a hard-coded public key uh it's probably it is public so it's fine um but that should be put into like an environment variable or something okay um so i wonder i wonder if it's just used as an identifier of some sort the one one of the things that i thought was weird in stripe documentation because i went through jason lanksdorf his tutorial on stripe subscriptions and stuff which is super cool like he he nailed that um but with that i thought it was super odd that a price that's the that's the thing that they call basically a product and stripe like i don't i don't expect price i expect price to be the literal price of a product price in this case in stripe this is like basically a product id so it refers to the product they just call that thing a price that's odd to me it uh it's interesting but because uh you can have different prices you can have a um different price one product yes so imagine like you're a conference and you're selling tickets and anytime a conference sells tickets they have super early bird tickets they have early bird tickets and they have regular tickets so like you can define those pricing models or like a different kind of like coupon specific prices and that's kind of how you like would associate uh so it they map to the same product but a product can have different pricing options or think about if you're buying in like bulk versus uh single or if your quantity is above 25 like stickers the pricing model changes huh okay interesting um so what you do in this function is load stripe is basically doing some sort of like it's getting the stripe object i guess and you give it your like kind of application id or public key and then you call the redirect and this thing redirects out to stripe telling it which thing the user is thinking about buying and you complete their email and so it auto calculates yeah so like yeah this auto populates the email based on the currently logged in user uh and then the space url thing you're saying this is just a build time thing where uh svelte uses rollup to build you can use anything to build svelte but i used rollup and it just does a basic string replaced it replaces base url with localhost when i'm running locally or my actual website url when i'm building for production huh so it just it like rollup will parse all of your code and anywhere it finds baseurl replace it yeah if you check at the root of the project there's a um roll-up config and i can show you kind of how that's done okay this is the same thing as web packs um define plug-in basically how you get environment variables into your code yeah i don't know what i mean i don't i was going to say i don't know what that well i don't know like actual webpack at all i just know it's taken care of for me that was another request for content i think your discord wants me to make a webpack tutorial video that's what um yeah and rpan just threw in the chat will you do a roll up versus webpack that so that would be great like three different ones roll up webpack and then a comparison and you could do like a super super uh clickbaity title for the comparison uh i don't know like i don't know the best processor like bundler for your web apps or something i have a nickname for rollup it's a it's the bundler that does nothing yeah out of the box it like literally does nothing yeah you have to install plugins for everything yeah that's funny um yeah data we should data wrecked we should talk about what a murf is uh we'll after we wrap up this stripe or roll up section we'll talk about what it is and maybe look at the app a little bit so did i tell you i've done one in the past a friend of mine was really big in a crossfit several years ago and i did one and it like was terrible but i think we i don't know that we did the whole thing i can't remember but like i i can't imagine doing that many pull-ups and push-ups it's ridiculous the first time i did a murph i did it first of all i'm not a crossfitter i do like powerlifting and bodybuilding but crossfit i do murph every memorial day because i think it's just a fun way to celebrate the holiday get a sweat on a different workout um a murph is you do a one mile run and then you do 100 pull-ups 200 push-ups 300 air squats and then a mile run with a 20-pound vest on you've never done it with the vest right never done it with the best that's next level uh but i am planning on buying one and starting to train up to that because this is as i'm getting older i want to make sure like my cardiovascular system is still working very well yeah and so i think doing workouts like this help yeah absolutely um i think people are kind of like getting overwhelmed with all the numbers of workout things that you just said yeah yeah and data that's crazy uh yeah murph is definitely tough and it's super cool that you guys do kickboxing and mma that's intense yeah i wouldn't want to meet a woman who or get on a woman's bad side who is a professional mma fighter yep things could go really wrong uh tbd gamer said uh just tired thinking about that i can imagine uh narendev says i'm nowhere i'm nowhere going near murph i'm not going anywhere near murph it's funny um see here's the thing though if you use the app you can scale the murf up and down you can choose to do the run or not and instead so the way you do the murph is you don't do a hundred pull-ups in a row and then 200 push-ups in a row you kind of stagger them you do 20 rounds of five pull-ups 10 push-ups and 15 air squats so that sounds much more doable yeah so this application yeah like he's showing like allows you to do that and this will like it keeps them in order right so you like you do the same so you do your mile run and let's say it takes me four seconds that sounds about right um then in this thing you're starting to go through your cycle so you're doing your pull-ups your push-ups your squats and then i changed in my settings i made it go down to like 15 or something so this would i would have to go through this 15 times and i've seen times i've seen you like click through this thing so many times in your testing um and then you can just hold enter yeah okay oh just hold it down there we go cool and at the end uh you get here it shows you your time you click on your details and it shows you like all of your rounds so each individual round is like you the five uh gosh five pull-ups ten push-ups fifteen squats is that what you said yeah okay um and that actually that would be a really great workout for me if i just did like three of them like that would still be a good workout i think um especially with really them like two total miles running because what i'd like to do is even be able to instead of just like have a boolean for the mileage um scale it up or down say like how many miles do you want to run like 0.2 or a half or whatever yeah i would kind of it'd be kind of cool to do like even if you kept your your run as part of the circuits like if you did like a quarter mile run like so you did like a lap around the track and then you did uh 10 pull-ups 20 push-ups and 30 squats or something if i did that four times five times that would be a good workout for me yeah for sure so if you want to be a guinea pig we could run you through the going pro process um i'm still on a striped test account so you can use the test credit card and we'll see if it works yeah actually that'd be cool i love this yeah um so just from here gopro gopro yup so when you click here it's running that on pro method that you saw in the code so it sends me over and the the like stripe test card is like four two four two or something yeah four two just a ton of four twos four two four two four two four two four two four two four two four two is that all of them yep okay and then uh any anything in the future for the month and year uh all right so how about uh 223 anything for cvc anything for name anything for zip doesn't matter i need this to stop showing my credit card details every time i fill that in you can't actually see it the whole thing but um okay so that's it and this just uh in case people didn't notice this actually redirected me over to uh the stripe which is cool so now i'm on here and i'll go to pay and no don't save that card uh processing this thing will finish and it will redirect me back to the thanks page so i imagine like you'll add a little bit more styling here yeah um and so what this did in the background was i'm laughing at our fans yeah our fans comment go ahead so what happened in the background was uh i set up a web hook and stripe that says on a successful payment call some web hook which is just a serverless function that i have and inside of this serverless function it this is where it gets stupidly complicated where it doesn't need to be okay uh yeah you can go into let's see payment is a serverless function so so this is the summary the callback from stripe stripe yeah in summary what this does is it it updates a user in netlify and gives them a role of pro you'll see in line 25 i add pro to the user metadata so this is and this metadata is stuff that lives on the tokens that netlify identity generates for you so these get attached to all of your requests to your server after you go through the authentication process i'm working on integration of like their rbac stuff which is role-based access to be able to roll based access control to be able to use all zero jwts and um use their like filtering of routes but that's kind of a separate story um yes like how this works is that any time a serverless function is executed on netlify this context online five has the information about not the user right because this is a web hook from stripe there is no associated user this has the information about how you reach the admin the like the netlify identity admin api so if you'll notice on line 29 like i had to pull the url out of the context and construct admin users whatever and this is going directly to the net so we have the same thing in all sierra like we have an osceola admin api that you can do right any of the stuff that you could do in the dashboard anywhere else from that api this is kind of the same thing for netflix so you're just literally telling netlify go and update this user and then like i don't even know if you've known this from then on those tokens that get included will include that app metadata in those roles which i guess yes yeah okay that's how i dynamically like show and hide stuff in the ui based on based on the the roles metadata in the user okay cool um there was a lot of gotchas this was like the hardest piece for me mentally to understand because first of all i had a major tripping point none of this was working in dev and i was like where is my netlify identity url how do i go and change anything and after speaking with jason langstor he goes oh yeah this isn't supported in yeah so netlify identity only runs or is only provides context when you're in production and you've deployed to nullify so that helps me because at some point i remember you saying that it didn't work in dev and i think at one point yeah you just said like identity didn't work but it's specifically that that context information that you needed on that function or inside of the context object wasn't what you needed it's not so you had to do that it has to be run through an lfi domain in order to get the context added yeah data break says there's always a price to magic uh true that said netflix magic is quite awesome i agree did you see james's question sorry this has been a little bit are you going to add ach plus cc or just keeping cc is cc credit card and what is ach uh i think ach is like a bank like a bank transfer like a okay i'm not sure if stripe checkout supports that if it does i'll add it in yeah i assume if it's an enable thing yeah you might do that otherwise yeah i don't know how you would um so i've got a question okay yeah oh sorry um are you saying he was confirming it's a bank transfer yeah okay um i've got a question about um about the timing of all this so you go you get switched over you get redirected over to stripe you make the process you make the purchase you complete that and what happens are two different things it redirects the user back to your page at the same time it calls this callback for your serverless function where you update the user's metadata to include that role but the user probably gets back here before that metadata is actually updated does that happen or do you know good point because i'm wondering like when you get back to this thanks screen how do you know that that user has actually purchased has actually made that actually has that role and it may be i don't know but like inside of stripe they might call your web hook before returning like that might be part of the process so it might just be done i'm not sure so i found found out something interesting and i'm not a hundred percent on this but based on my experience uh i wasn't awaiting calls inside of the payment web hook and i found out that when i wasn't awaiting calls just like you said the user gets redirected and has no permissions okay when i started awaiting my asynchronous calls in the payment web hook everything was working so logically that made me think stripe is actually calling it before calling the redirect okay and you have to like await your asynchronous calls in that web hook in order for all that to be done before stripe redirects yeah otherwise your serverless function will keep working it will return to stripe saying that it's done while it's actually still doing stuff asynchronously cool um yeah that makes a lot of sense i is the stream is the stream still running i feel like it's frozen uh still running on my end i see it uh let us know in the chat are we still are we still going do we look just as beautiful as ever oh refresh handled it there you go yeah uh a couple people yeah a couple people are saying we're good um james parkin also perkins also asked um well he also mentioned come to me to talk about adding plaid what is plaid yeah i've never heard of that okay and he always said which does the auth stuff around ach interesting okay um yeah that stuff is is well beyond me by the way uh james perkins and i are we haven't come up with a date yet i think i i need to respond but we are coming up with a stream on next.js so i did some next js stuff yesterday of just poking around asking questions it probably would have been a much better format for me had i had someone live that could like really like verbally answer questions although james was super helpful as well as other ones so keep an eye out for uh me and james perkins to get together and talk about next next js stuff and um he's definitely one of the people that i want to learn from because i already bought his course which is coming out uh in september so i pre-paid for that i'm looking forward to that content um narrative ach apparently i didn't know this but like payments via bank transfer like james perkins said i'm sure you saw that um so what does like are you doing when you get when you get redirected when the user gets redirected back to this thanks page is there any actual validation on that thanks page that the user has the role are you doing any validation or is this just like it's a regular page it just says thanks yeah just a regular page says thanks okay and it does what i need to do like i haven't really added a bunch of error handling inside of web hooks inside of fetch requests to make sure like everything's going through properly okay so yeah so this thing this thing is literally just like kind of a static page um but by the time you get redirected here because of the timing stuff that we just talked about i should now well maybe i should now see that i already am a pro do you have any like filtering of this button if you're pro or you just haven't added that yet yeah so here's what's going on and and i can show you under the hood um you don't actually have permissions yet because you have a stale jwt and this is what i'm working on right now you can actually pop into local storage for this website yeah and you'll see that the netlify uses this thing called go true under the hood for identity it's in local storage it's in local storage do they do it in cookies too because one of the tutorials i saw if you use a third party was using cookies i'm curious yeah it does thank jwt murphy anybody wanna see what my jwt looks like jwt dot io yeah uh created by auth00 shout out to austria if you haven't checked out the osceola channel on twitch say this all the time you should because i'm on there and then also lots of other members of the super cool team that we have um so in this jwt yeah i in the meta metadata i don't have any um i don't have any roles in here um and then you said also is stored in local storage yeah it's also stored in local storage the go2.user so how does so like with with auth0 we don't recommend like i'm not complaining i'm just thinking about like the differences we don't recommend storing jwts in local storage because of cross-site scripting the implication of that means that every time the application loads you have to get a new jwt so how do you combat like the outdated jwt here i don't know yet okay um so like i'll have to do something on thanks where i wipe it and get a new one but i don't know how so okay we were talking about all the different technologies i used and how i liked some and how i didn't like others netlify identity kind of falls on my like i don't like this list um documentation is incredibly sparse and there are situations in netlify identity that really stink like for instance the user sign up um netlify identity has like event callbacks for login and log out and things like that yeah but what they don't have is an onsign up event handler meaning like where you can call they can call your own serverless function so you could do something with the user if you needed to well uh it's not a serverless function callback it's actually local in your app so like i'm thinking of using stuff like this for like redirects if you're okay if you're trying to reach a protected route i need to make sure you're logged in or not or once you log in i want to automatically redirect you to the home page or if you're already logged in i want to just pass you through to wherever it is you're going so we're get i get into this situation where i have to actually just set a flag in local storage to understand if this is a sign up or this is an existing user so interesting thing here um i was just talking to jc i don't i don't know that jc is in here or not jc was having a similar struggle with um with off zero or he was trying to figure out how and one of the things that i suggested which it sounds like do you do you have a hook like can you can you give netlify a serverless function to call when a user signs up nope okay so the so here's a couple of comparisons in inside of all xero in our dashboard you have the ability to write rules and you can basically intercept the login process after the login or register happens and then you can check which happened you can do certain things like by default give give people a certain app like a certain thing on the app data whatever like you can add whatever sort of information you want and what i suggested to him was when a user signs up inside of that rule and also your downside is you can't check like a rule into source code so that kind of sucks but like inside of this rule if it was a sign up then you could attach a property that says hasn't done x hasn't completely filled out profile or whatever variable like you want to have and then in the front end you could check that and based on that you could redirect them to like a complete your profile page here it sounds like you don't have the ability to attach that metadata to no no and even like on sign up you can't provide a just a redirect url you know like think about stripe after they get done doing their thing you have an option to say on success and i'll go to these pages yeah i have to i have to use the login event because a sign up fires a login to redirect home after a sign up the problem is now my login handler always redirects to home and that's not what you want necessarily right because there's a login event every time the website is loaded for the first time now if identity comes up it initializes and it fires a login event if there's an existing jwt okay so this is kind of a faulty system if you ask me because now i'm having to set like local storage items in order to understand is there an existing jwt did the user just log in and make a new jwt is this a sign up do i pass them through to this page do i redirect them home do i redirect them to the account page what do i do okay so these are interesting details are you sure like i thought there were i thought there was the ability to register callback functions like your serverless functions in the login process like after after user logins you don't have the ability to call a serverless function i do so if i do it you have to set it up through netlife identity but a serverless function's not going to get me like a a client-side redirect you know what i mean yeah i guess i was just thinking about what i was suggesting to jc like you could attach you could attach that metadata property to the user and then check that in the front end and then redirect based on that but his use case is a little bit different i think i i see what you mean instead of relying on local storage put it in just some random app that metadata handle the situation on the user yeah and where so inside of your code do you get access to like inside of the code where do you get access to the user object coming from netlify identity and while you think about that a couple of well i guess let's and if you can answer that and then uh questions from uh james perkins in here so it'll be a source stores user i think source is there a built-in data store with svelt like it's not like a separate redux package or something yeah it is store okay user uh no it's not user where the heck did i put this um [Music] like a off maybe i don't know it's in oh it's it's source utils identity source yeah so james is saying could you not check token and then direct to the correct url if that's the content that requires the access token else show login damn it twitch don't ruin my code damn it what i don't want to do is conditionally render an entire login page what i'd like to do is actually redirect but i see what you're saying right you call and navigate and get there so the hackiness i wrote is starts on line 15. there's where the hackiness is if so you get a returning user thing from local storage if it's and this is on a login and you say if it's false if you're trying to use like one thing to understand is login fires if there's an existing jwt in your cookies or local storage and the user visits the site again login fires when they visit that page if they force happens correct yeah like when netlify identity initializes okay it also fires when a user actually logs in they go from an unauthenticated state to an authenticated state and the login event fires on sign up because on sign up they receive a jwt token it gets stored and login fires so these are three distinct situations that i need to handle differently and right now i'm only handling one the sign up situation and what are you what do you need to do when a user signs up like what's special about that on signup i need to this is what's handled on line 15 to 20. on sign up i need to redirect them home it's like congratulations you signed up otherwise it just kind of sits on this page with a modal like sits on the account page with a modal that says congrats you signed up you know okay because that's part of the nullified identity widget i need to actually get them off of that page and back to home gotcha or like you you kind of mentioned earlier like straight to a dashboard which i don't like instead of if it was a different type of application so i get what you're saying so in this in this event you get a login but you don't have any way to differentiate between login and sign up yeah or like you were already logged in versus like you just logged in and what would you do differently there like if you're already logged in versus you chose to log in what would you do differently yeah so the way the identity widget works is that on a successful signup or login the widget stays open and the it just there's like a modal that that says like you were logged in yeah i thought that was weird and it stays there why you that's weird to me you have to handle this redirect in one of these event handlers rather than giving it a callback url to say just go here when you're done yeah okay so biggest biggest pain point with netflix identities is right there okay interesting um databrick who had also commented earlier it would have been funnier at the time but that he was working on um http only cookie in memory refreshed access tokens while we were talking about it uh it sounds like fun stuff so hopefully you said it's getting or like it can get super complicated hopefully it's going okay um and then you said um something i wonder while hearing that do you use fauna dbs abac i assume that's um i don't know what a is but based on access control yeah um or do you write security rules as in which user can access which data yourself in your backend it seems to be the latter are you it's actually a good attribute based access control i'm thinking you're not doing any configuration in fauna are you are you checking like when someone let's actually see this is this is where we put you on blast in front of everyone and you go through your code and see what you're doing the graphql query so if you go to source graphql queries the graphql query executes that says uh get like git workout by user was this not under functions what did you say oh soros graphql oh yeah this will be functions you're right it'll be in in the functions folder oh i just moved over here yeah so these are these are the fine what's the like what call do you make in functions to save do you call the phone call i use i call graphql from my serverless function right but like from the front end you call your serverless function which is this file fauna here correct and yeah which is a pass through and then you're just passing a a query a graphql query but do you have any way of checking to make sure that well you don't have any way to update an existing record right now right like you can't update a previous like if i record a workout there's no way for me to then update that workout later on correct yeah okay so you don't really have to do any what i was wondering is if somebody sent an update request are you making sure that the person sending the update request matches the id of the user in the update request but you don't have to do that yeah so like lines five and six are where i'm going to do some validation um i do receive a user in this call and i can make sure that that the user who's asking for something matches the email associated with that user the where would that email [Music] come from it comes through in the uh graphql query okay gotcha sweet that's cool seafoams is asking how is graphql i really like it especially love it when i don't have to write resolvers yeah so from the client side i think graphql is really really great so that's one of the things i don't know too is like you're sending queries from the front end and it looks like you had in source and graphql i don't know how this works when you use something like apollo on the front end or whatever like you've defined your queries here and you can pass variable cities if you use apollo do you have to define these queries or does apollo give you an api that will generate the query the actual graphql query for you do you know are you using apollo no i'm actually just using raw fetch that's why graphql you don't have to use apollo yeah but even if you did use apollo you'd have to write the same stuff do you really okay i didn't know i so i would have thought they would like apollo would give you an api that you could work with to not have to write raw graphql queries but i don't know that's that's the power of graphql so you're probably familiar with grok right because you use sanity why use graphql with uh but i know of grock yeah okay okay it's the same thing it's a query language for an api endpoint right so this is where graphql gets its power because instead of just hitting an end point you're passing this thing that describes exactly what you want back but i'm sorry if you if you're using like uh rest right that the end point in and of itself dictates the data you get back yeah yeah i know i know how that works the only thing i just figured it would be [Music] easier although maybe not instead of like constructing this string it would be easier to call a function that apollo can give you and you pass it the array of fields that you want and it translates it to the string but maybe yeah maybe i'm overthinking that and it's just like you you still have the query yeah i see what you're saying like you don't want to write out all this text you just want to say give me x y and z back instead maybe but it also like as i was saying that it's like i have to put the same amount of information in whatever call there is for it to be translated to that so it may not be it may not be helpful at all anyway yep um databrick is saying now i'm confused i thought they were called from the functions now it seems they're called from the front end can't everyone put a different email in there just wondering assuming it's also a work in product progress so yeah data this is super work in progress still i've been working on it for uh maybe just about a month now spending an hour to a night on this um but yeah we make calls from the i think all the calls are routed through the back end all the calls are routed through the back end uh i just define uh some of my queries mutations in the back end and some of my crazy mutations in the front end because because of the way netlify deploys functions i'm wondering if he might be on to something though so inside of functions in fauna you are getting the user off of the client contact so if the user's not logged in and they call this function like if i send this without my without an access token from postman it will blow up i well does it well i don't i'm not doing anything yet that's what to do right i need to validate like there is a user okay so right now you're getting the user but you're not using it so yeah right now this is just the pass-through so from the front end i could send you i could send you whatever graphql i wanted yeah and you would okay so your next step is then to take well like in and this is what i did in the jamstack tutorial is i did all i generated all those queries on the server based on the information that came in from the user so that way that way the user sends me what they want to update and then based on that i can make sure that like that user is the user who's logged in there is a user that actually is logged in and then i could determine what goes on from there so the only thing you would just need some way to make sure make sure that the thing that they're posting matches the actual logged in you that the user is logged in and the information in the query that they're sending matches the information about the user and that would be the tricky part because at that point you'd have to grab that graphql the string and like parse out email address and stuff correct so what's the alternative then have the user send you whatever information [Music] they they want to update to your serverless function and your serverless function does validation and then generates the graphql query that then goes over to fauna because otherwise like you're like if if you have your if you extract your user from the contacts you can check to see whether or not the user's logged in but you can't check to see unless you do some manual parsing to compare the email address of the user you get in the contacts with the email address or user id or whatever it is of the thing coming in the graphql query because like even if you check logged in i could log in and then i could grab my access token i could take it to postman and i could send a request and then in the graphql i could use your email address and then i could update your stuff marketing address to your stuff yeah um no [Music] uh i don't think you could the context then at that point would not be populated it would if i if you put the bearer token in there yeah yep yeah i could take it i could take it and i could throw it in postman if if that's how if that's one of the ways that um netlify is checking it i'm trying to read databreck's comments here he says he wanted to provide some interesting insights calling everything from service functions and not using access control is fine the disadvantage is that you would require a serverless function for each call given that they're hosted in one region by default you would lose multi-regional advantage of fauna yeah but i can't make these calls from the front end because don't i need a like that would expose my secret key from fauna so this is one of the things that i don't i don't fully follow but i think i know enough to help the conversation so brian robinson wrote an article about integrating all zero and net er and i think got into this stuff with fauna you can have users and basically like in memory in your application get a token for that user to then send along with a request directly to fauna so instead of using a private api key in your serverless function and the front end and i don't know what the process is exactly but you can basically like in in your real-time stuff get an access token for a user that specifically then to be used with fauna but i don't know i don't know what the flow is to get that access token and then also not save it somewhere like i think it i think it would have to be in memory unless i guess you could save that in local storage also now yeah i think what this is coming down to is i've i've secured the front end by uh you know checking users logged in state everywhere what i have yet to do is secure the back end [Music] yeah and i think because i think at this this point as well anybody can hit my payment serverless function and like act as if they paid i don't verify that it comes from stripe as of yet i've got it to do to do that as well okay stripe sends a header in the web hook that you can verify okay and the function runs so that's relatively simple then i wonder can that be hacked though can i send that in postman uh i think i don't think so um you have to call the stripe library in the serverless function to validate the header so i think it's full circle on stripe's end okay techgadget said he's going to get a free murph account i'm happy to give everybody on stream by the way you heard it from the man himself um databrick i don't i don't feel distracted at all this is i like i'm i really enjoy this conversation i think this is this is where brad i imagine you started off and you thought hey this is going to be a really simple app i'm just tracking like times you get into like identity and payments and callback functions and serverless and there's like it's a bunch of that like is important that you have to figure out and know like the past two weeks of programming have been the hardest that i've ever done and it's been like the smallest amount of code i've had to write but to get my mind around how to do all this yeah like even the payment flow think about this stripe stripes web hook has absolutely zero context of who the netify user is yep i i hit that that serverless function i was like so how do i know who to update yeah and uh i had to make a separate database entry just to map um like a netlify user's id with their email because stripe knows the email because i passed it through from the front end and i said a purchase was made and this customer had this email yes okay look up and fauna the id from the email that's why you have the email yeah that was different is that what what did jason lanksdorf do in his because i know he had a table but he didn't have email he had user id to stripe user id stripe id so i'm i'm using a one-time payment right i the stripe customer i don't care about that as long as this person's paid i will mark them as paid and that's it right uh jason langstorf was using a subscription so you have to have a notion of who that person is inside of stripes so that they can renew their subscription so he had to create a stripe customer so any time a user signed up for his thing he had to create a stripe customer and a netlify identity user and link them together in a fauna database he could later he created the site computer by default yeah okay gotcha because they have to manage this subscription yeah okay gotcha um [Music] break that's why i'm writing the skeletons or our users struggles with this it's complex yeah that that'd be great i remember brian explaining to me some of the stuff that was going on where he i think he did like in the middle of the authentication process in all zero he would use rules to do a custom call from there to fauna to then also get that person's fauna access token and then that would be included in the id token that uh would be used in the front end and then could be sent directly to fauna that way you're not including like as long as this stuff is in memory it's okay uh oh databricks you helped brian with that cool and again like i i'm kind of following the stuff but also i'm kind of like man that's that's a lot of stuff that's just like kind of challenging for me to put together so as you come up with release content like i want to see that i'm really curious um i went through i talked to brian several times and i read his article and like i have the high level but it's it's tricky stuff yeah and i i wish this was easier for folks because like while i do have the programming knowledge to make this happen stitching all these pieces together is like infinitely complex if you're not using let's say like a shopify front end that you're just theming you know what i mean yeah and you can so this is a question i have too you can use shopify like if i wanted to sell stuff on my site i could use shopify and not use their web page right like i could do a redirect thing or like a pop-up thing in my own youtube you could like they go headless they have an api and there's a that's what i was speed source shopify so the gatsby source shop i uh is missing a lot of stuff i've built a store off of that before and it's not up to date with everything shopify can do okay our pain is saying that that plug-in exists as well yeah so you could just you leverage the raw api yourself i had to actually combine in gatsby note it got crazy i had to combine the source shopify with raw api calls to shopify to stitch together all the data that i needed okay interesting and so you think and like for this use case where you're just doing the one-time payment you update that property on the user go on with stripe everything else that you've seen with potentially shopify and other stuff you still like that's the way you think is the easiest to go at this point it's the freest like oh you have to pay shopify you have to pay for shopify there's no free tier yeah after a certain point i think you have to pay for shopify okay i'm going in like total relax mode by the way i'm gonna recline a little bit i don't know why some of the the light like changes do you see that yeah is it your camera's exposure yeah i guess it's not um it's not automatic it's weird i still don't know how to set up like the best consistent settings for my webcam but i can turn you got an elgato light yeah it gets so yeah they get so bright like i've had i have mine down on like yeah like ten percent five percent i just put it down to three actually but it's better like if i'm if i'm actually up here like that looks good so i don't maybe i maybe i'm not allowed to lay down so um data bract uh things like where to store tokens how to refresh tokens super tokens dot io never heard of that is a great resource a secure implementation with both a back end front and lib that implements all that by inserting a few calls from their lib mine are on 70 percent oh the lights weird yeah that is um else my green screen is not yeah the green screen is tough you have to put a lot of you have to put a lot of light on a green screen for that to work well i've got my green screen up here that i could like pull down i think it's kind of cool i do that when i'm taking my like my um images that i do on my youtube thumbnails like i'll pull it down oh yeah i'll open up photo booth or whatever and like take like 50 pictures until i find one i like and then um canva has a background remover if you've ever used canva in the browser to do thumbnails or anything um they have a background remover and so that's what i use to get the background out of um out of those images um tech gadget no relaxation for james yeah that really sucks the like my biggest issue is light right i mean i guess i guess that's a pretty good life if my biggest issue right now is light in while i'm reclining i actually use this remove.bg some some dev made it a while back on twitter it should be free right at least it was back when i found it do you when's the last time you used it because i've looked at that and there's like either a tiny threshold or it like automatically jumps to a paid threshold oh yeah for sure this is the thing now one credit yeah right wow so one of the things i agree when that guy first made it um yeah tech gadget's saying that there is a free plan but it looks tiny that's what i had seen one of the things i have done though is there's a plugin in figma that you can give figma your api key for remove bg and it i thought was only one credit but i think it's like somehow it lets me do more so i've done some in figma as well i don't nice i don't remember exactly what i did but um yeah where's the where's the pricing on this refer friends and earn credits yeah there's that um yeah 40 credits a month is i don't know it just seems or like ten credits is nine dollars that seems like i don't know anyway canva and i can't remember i can't remember if that's a paid feature in canva or not my wife has paid canva for work and i use it shh don't tell people um all right i like i feel like we've been this has been a really easy fun stream like i've enjoyed the technical side of this a lot i love talking about all this stuff um but we've been on for 20 minutes um do you want to kind of like i don't know do you want to give like maybe a wrap up of your experience so far and then like what you have to come and uh when people can maybe expect like to be able to send a real payment to stripe and not the test one ready to go yes so um i guess like just talking about what's left and murph i've got i want to add typescript support i want to add just testing get 100 coverage because this is going to be a real app yeah yeah i'm now luckily those two things are things that i know now so like i i don't have an issue implementing them but i i because this is going out to an app store uh i want this to be really solid the google app store supports pwas this is a pwa i expect people to use this from their phone so it's all been designed for mobile so what about so you can submit it to the store in google play and then also people can just use this as a pwa in in ios like you wouldn't go to the store first of all ios is probably going to be a no go it all depends on my pricing well ios might be a no-go in general number one they're not pwa friendly number are they not are you sure are you sure about the app store the app store correct yeah so they could still i could still just take this thing go to the website save as a pwa on the home screen and then go from there i believe so and it works but basically the same it also comes down to like my payment model i don't know if i want people to like get the timer for free with no login and then they have to like pay me a dollar inside of the app to get pro features or if this is going to be like just give me a buck and you get the app uh oh that's it well so there's an interesting article i or like headline i looked at earlier is ios just kicked off uh out of the app store they just kicked an app out of the store epic fortnite fortnite because fortnite was doing its own payment stuff bypassing the apple iap which is where they make a lot of their money and apple kicked them out so you wouldn't be able to have the same sort of payment structure where somebody could go in and go through your external stripes you'd have to have some differentiation like have it be on the ios store or the app store so i i don't want this to get that big i'm going to be totally honest so at this point like i'm either just going to release on microsoft app store and google play store and pwa like just online yeah i think that's going to be the way that i'm going gonna go i just need to understand my payment model is it pay up front or give them the timer for free and let them track workouts um after they pay a buck yeah does google have any issue if you do a pwa and you do your own payment stuff i don't think they care interesting i'm but the the notion is that android users don't pay for anything so yeah yeah that's fair um that's cool though i one of the reasons i would like to well i don't want to deal with the apple store to be honest but i've always had this in the back of my mind of like i'd be really interested to like learn more about react native but i don't want to do the apple store like it's such a yeah i've done it before i thought about that terrible i picked all these like new technologies which definitely made getting this project up and running longer than it needed to to be in a good way though yeah yeah like i now have a ton of new tools under my belt but at the end of the day i'm like should i have learned react native instead if this was going to be like a mobile kind of application you know well i'm going to have that same question for the thing that i've kind of mentioned to you about one to work on together like it it makes the most sense as a mobile app but sure like a pwa i think would still like there's nothing that i want to do that is specifically specific to android or ios so pwa would still work it's just i guess like a lot of it's like the discoverability like not many people know that you can take a website and grab the pwa on ios and i imagine a lot of people don't know that you can do that on google too android yeah but but google you can actually take that pwa so let's put it on the app store that's the difference right and then the icon on your home screen is just it does the exact same thing it just goes to the website right yep yeah it's fair um by the way one one last thing um i've been super happy with our the learn bill teach discord which brad is a moderator in and a few people that are already in the chat are in the discord it's just been great i've really enjoyed like seeing that grow and seeing how many conversations take place without even me being a part of it like i think that's cool for like to have helped connect people in a way that like they're able to help answer ask questions answer questions that sort of stuff so link to the discord in the chat if you're interested in joining what i consider to be a pretty cool and open and um welcoming community uh so if you're interested in doing that uh definitely check it out also i'm gonna throw a link in here to the off zero twitch um i try to do this at least once or twice during my streams because i'm on work time uh come hang out on the aussie euro channel uh follow that one i will be on there i've got some amazing teammates that do cool stuff on there as well we also have every other week we have what are called avocado labs which are like basically meetup talks and we bring on some pretty cool speakers so i think that would be worth checking out as well um brad any any last thing you want to share like here i can grab like your twitter or anything like that that you want to throw in here for people yeah for sure my twitter um i'm also really trying to grow my twitch channel so i'm very active on twitter and i just hit affiliate on twitch i stream most nights around 10 p.m central time and typically a little bit on the weekends around midday yeah i've been building this murf app completely live on twitch so if you ever want to see me struggle with this stuff or have suggestions or data if you want to come in and teach me how to use this fauna stuff that you're talking about let's do it it might get intense but yeah i think that'd be pretty cool and i try to like i've checked in um to several of yours just like stop by and kind of check out the progress a couple people i think our fan at the beginning of the stream has been in probably like everyone and and probably uh nick and a few others and they're like yeah we've got to see yeah um and they're like yeah we've gotten to see this thing of all from the beginning that's kind of cool yeah sweet uh well that's all i got uh brad thanks again um as always for coming to hang out man it's fun talking to you is fun learning about the technology you use and uh look forward to the content that comes along with it after a official release at some point soon for sure man thanks for having me on james
Info
Channel: James Q Quick
Views: 1,865
Rating: undefined out of 5
Keywords: svelte, sveltejs, svelte.js, web development, javascript, netlify identity, netlify hosting, netlify functions, netlify tutorial, faunadb, faunadb tutorial, faunadb graphql, graphql, stripe, stripe javascript, tailwind css, web development 2020, side project, netlify functions graphql, web development projects, netlify serverless functions, svelte tutorial
Id: iIxk8ebUC_g
Channel Id: undefined
Length: 80min 0sec (4800 seconds)
Published: Thu Aug 20 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.