3-20-2025 (Day 3 Session 1)

Jon Cheney builds a full AI certification testing app in three hours using Replit and GenAI, showing how to wire up sign-ups, scoring, Stripe checkout, and admin dashboards. He covers prompt tricks, debugging live bugs, and moving from MVP to a sellable product with pricing and email capture.
Chapters
Computer. Okay, so I did upload the new video for yesterday's class. I will send you— I'm making a little— I have a little kind of notes document that I'll send you session 1, session 2, session 3 YouTube links. So you guys be able to go back and watch this. I won't make these classes public. I want you guys to know that I'm not going to make this recording public. I may, you know, take a clip or something, whatever. So you might see yourself in the background or whatever. If I see like a moment where I'm like, oh, that's actually kind of cool and useful to share with people, but I won't share anything personal or anything like that. Um, but, um, but yeah, it's— this has been really fun. We're obviously 2 days in, the last day here. We're gonna, we're gonna crank through a lot today, so be ready to take notes. I want you guys to ask as many questions as you can, try to get them in during the class. Of course, if you have a little quick question or something, like Nate's texting me a couple times, and that's fine. Um, you know, Michael texted me, Jordan, obviously you and I. So we have relationships now. Feel free. Like, you have my phone number. Don't be afraid to use it. Hey, what does this do? Or, hey, I have a question about how do I get my first sale? Like, I'm really struggling with this, right? I'm happy to just be there as a support for you guys. Obviously, if you want to do like a whole class or something, you know, we can figure that out. But, but ultimately, my goal here is for you to never have to call me ever again, right? And it's not that I don't want to talk to you, right? I do. I love it. I want to hear from you, actually. I want to hear your successes and your failures and whatever you're working through. I want to hear that, right? But the goal here is to enable you to now say, okay, I've built my dessert thing. I've built my aptitude test. I've built my, my nail salon, whatever thing. Amazing. But now I know how to do it. And now I can go do it. Right? And so from here, as some of you started to see, like Caleb was texting a little bit last night, the group with some tips and tricks and things he was finding on YouTube as he was diving deeper and, and he's doing it exactly right. And you guys now know, well, just Google this stuff, YouTube it, ask ChatGPT, ask Grok, right? Help it, you know, you know now how to learn with AI. And that's, that's really what I want here is I want you guys to be able to say, okay, I can do this. Now you might say, okay, I want to do something really, really difficult now, but I want you to know, like, for example, we were talking yesterday about that OmniParser thing, which literally, you know, has AI take control of your mouse and your computer and like do things. I don't know how to do that. And it sounds complicated even to me, but I promise you, every one of you can do it in the same way that I would, because what I would do is I'd say, hey, Replit agent, I want to integrate OmniParser into this. Can we do that? It's going to say, I don't know how to do that. I don't think it's going to say that. I've never had it say that before, but it's probably going to say, yeah, here's what I think we should do. Great. Let's create a test environment. Let's try this out. I would just start and then when I run into something, I would move to another AI to ask about it or whatever. But AI can search, Google can search, there's YouTube videos out there of people that are trying these things. We're not the only people using Replit. There's tons of people doing it. In fact, I saw this morning there's another company that does stuff like this. There's Boltz, there's Lovable, and there's a few things like that. But I saw a thing this morning. I'm going to see if I can find it here. Let me just jump on. Grok really quick. Grok will be able to tell me because it can search. But there was a conversation, basically someone was like, hey, like Bolt, you should do a competition to see like who can build the best app in 24 hours kind of thing. And like you could build a record for the most apps built in 24 hours, right? And so anyway, I don't need to find it, but I was reading this morning and the CEO of Bolt responded like, an hour later after somebody posted that because it got a lot of attention and they, and he said, hey, it's on. And literally like 24 hours later now they have like $2 million in prizes and 5,000 people have already signed up for it and all these crazy things. So this community of people that are just saying, hey, I'm not a developer, maybe I'm a developer, but I'm an entrepreneur, I have ideas, I want to bring them to life. This new AI world exists. There's a lot of people out there like you that are learning this stuff right now too and trying, experimenting. So don't feel like you just have to take another Jon Cheney course to learn. There's a lot of free stuff out there that you can learn and have a lot of fun. Of course, like I said, I'm always happy to, to be there and be a support for you. So with that being said, um, any questions before we, before we dive into, you know, I know there were a couple things. I think Nate had something, Caleb maybe had something, but anyway What questions do you have before we dive in today?
I've got the thing I've mentioned to you before, but I don't know if we want to dive into it later. I've got a big error. In fact, I just asked Assistant to summarize all that we've done to try and fix it, what's not working. It keeps calling out that everything's probably coded right, it's just how Replit's processing that's probably the problem. I don't know if you want to cover it later after you start showing the things you want to cover today, but I'd like to show you what this pulls up and you could tell me what we could do because Replit seems not able to get around it.
Yeah, I've run into 4-hour loops before, guys. I ran into it a lot that first Thursday to Saturday when I was trying to build a business. I would run into some stupid thing and I figured out some ways to deal with those problems. And so I think a good place, one of the things that I want to go over today is the Replit tips and tricks document. And you guys have seen me do a lot of it, but I just want to like go over it explicitly and then maybe we can take a few minutes to try and ask a couple of questions there. Nate, we'll have you screen share and then we'll try to ask some questions together. Everybody can watch. But learning how to debug, learning how to get past the problems that are, you know, happening is, is part of the game, right? You got it. You got to figure it out. Sometimes, like most of what we've done so far has been pretty, you know, rosy, right? Like, it worked, look, you did it, right? But there are some times where you're just like, this sucks. Like, I don't know how to do this. I don't know how to fix this. I'm not a coder. I'm not a developer, just like a lot of you guys. And so for me to get into the code itself and try to figure it out is hard. Now, what I am pretty good at is looking at things and trying to figure out what they're doing, right? And so sometimes you can ask the assistant, Nate, you can say, hey, Where do you think the problem is? Show me the fix that you would try to do for this. And then they show me the problem and the fix. I've literally had, had it. You know how it does like -23 lines, +14 lines, right? It'll like delete something and add something. You can click on that and it will show you what it's doing. And I've had it delete 14 lines and add the exact same 14 lines back in. And I'm like, okay, so I understand why it's doing that, right? Sees the problem, it thinks it knows how to fix it. And so I say, you know, you're just— I'll literally screenshot it and then I'll drop it in and I'll say, okay, you know, you're doing— you're replacing the code with the same thing. Obviously it's not going to work. You need to try something else. And it says, oh, you're right. I'm sorry, I'll try something else. So even AIs can get lost in loops sometimes, Nate. I know it sucks. You got to just roll back, right? And you got to roll back and say, okay, this, this approach didn't work. I need to go back. And I've, I've rolled back 4 hours of work for sure. I rolled back a whole day of work one time and I ripped out an entire database because it just corrupted it. And I was like, oh my gosh. So I've learned some things that try to help that. So let's go over the tips and tricks. Let's start there and then we'll dive into your stuff. Okay. And then we have other things. So we're going to go over some sales and marketing stuff today. We're going to go over— I want to share a couple of stories today with people that I've talked to about things I've been working on. I want to introduce you guys briefly at least to Runway ML because I think it's just another really cool type of AI to be familiar with. Then I'm going to talk about MCP and then a few other things. I'll explain what all those things are later. Just to give you a little preview of what we're talking about today. Let's jump into Let's see, I need here, and I'm gonna go— whoops, not my drive. I wanna go this, and I'm gonna go Software and Tools, and I wanna go Tips and Tricks right here. Okay. So let's share screen. So again, you'll have access to this document, so don't feel like you need to write it all down. Of course, you know, take a little note if you wanna remember, but, but we'll go through this and we're gonna go through it quickly because you have it and Again, some of it maybe I already have in place, and so I'm okay with that. All right, here we go. So you guys know this is just an overview, right? You can— it's just a reminder of you. Here's things that, that it can happen, that it can do. All right, create foundational documentation. We've talked about this a lot. The README and the progress.md can help your, your project not get lost. It gets lost often if you don't. That's probably overstating it. It doesn't often get lost, but it can sometimes get lost and these things can really make sure that it doesn't. I will also say you will get better at figuring out what caused your problem, Nate. We're going to try to figure it out today. If we can't, then you just have to roll back and that's just part of development. I'll share a very short snippet but expensive story. I raised it for my company Seek. I started back in 2016. We built out this amazing MVP version for about $100,000 and it worked. And I sold my first contracts and, you know, we've made maybe like $40,000 in contracts. That was great. And so we're starting to work a little bit towards that break-even. And then we ended up raising about $2 million because of those $40,000 of contracts, because we had some, we had some proof, right? Investors want to invest in businesses that have proof that it works. If you just have a cool idea and maybe whatever, that's not how you raise money. Investors don't care about your ideas. Ideas are a dime a dozen. They care that you have social proof, that you have users, that you have money in your bank account. Even if it's a little bit of money, it doesn't matter. Hey, I have 3 customers that have paid and they're renewing and they've been with us for 3 months. I think if you give me more money, I can go get more customers. They, they love that. They will pay for that. Okay, they will invest in you. But, but anyway, so you want to make sure you have that. So reference these files in every interaction. This is exactly the thing that I type. Please reference the README.md and progress.md files and familiarize yourself with the project. Right. I don't say this ensures, I just do the right to there. Okay. But this ensures that continuity prevents F from losing track of the project scope. So, so anyway, sorry, I wanted to, I wanted to finish my thought. I kind of got sidetracked there for a second. We built the product out for $100,000, raised $2 million. We started over because the way that we built it wasn't going to really be scalable. And so we pushed, we pushed hard and, and, and built a new version and that was good and we grew and then we got to 100,000 users and we're like, crap, this is not going to scale to a million users. You know, there's some things here that are critical and we can keep a little bit of the front end, but we're going to rebuild the entire backend and start over with a different schema and a different architecture. So we built it again, right? And so we had to like start— we rebuilt the app probably 3 times, and each time cost, you know, progressively more. $1 million, $1.5 million, $2 million. We ended up raising $13 million, right? But can you see how inefficient that is, right? Nate messed up maybe with $1.50 or $3, right? And so he can, you know, it is some time, but the dollar It was a dollar. I overestimated. I'm sorry there. So, so anyway, you'll get better at that. You'll get better at that. And it just takes like anything, it just takes a little practice, right? Figuring out how to really get comfortable with it. Okay. This is a cool trick that I do a lot and I haven't taught you this one yet. Ask the AI to plan before coding. And this is what I'm going to recommend we start with, Nate. Okay. And it's saying, look, you're struggling. You haven't been able to figure out this problem. I'm sure you can at least articulate what the problem is based on what it's told you and say, don't write any code yet. I want you to outline the steps of how you think you can take a different approach to this than you have already. Right? Then I'll, I'll approve before you proceed. Right? And so then it'll say, okay, and it'll do a lot of thinking and it'll do— it'll look like it's coding, but it's actually just reading code base and looking at things. And it'll come back, it'll write a plan for you and say, hey, I think this will work, or it will give you a few options. We'll say, do you want to try this or try this or try this, or do you want to try all of these things? And then you can respond how you want. Okay. Limit AI scope for precision. Example, do not modify anything except, you know, the front end layout in the login page. I only want to work on this because sometimes it'll start to work on the login page and then it'll realize that it has a schema problem down here and then it has this this Ahrefs problem here and, and oh, hey, I'm going to check the rest of the project for that problem. Oh, hey, I found the same problem over here. And it just like gets lost in its chain of thought. It goes too deep, right? It's like, you know, you go to shower and you turn on the shower and then you take off your, your shirt and you go to throw it in the laundry, but the laundry basket's completely full and you're like, oh, you know what? I'm just going to throw a load in really quick. And then you go to throw, you know, a load in the laundry and oh, the laundry's you know, full right now. So you need to quickly fold that. Then you just, oh, this only takes 2 minutes. I'll fold all these towels really quick. And then you throw that in there and then you empty, oh, I gotta empty the lint. And you go to empty the lint and the garbage is full. You're like, I'm just gonna go throw this in here in the garbage can. And then you're like, the shower's still on. Like, I'm lost. So I, I'm sure we've all done that in real life. At least those of us that identify with ADD a little bit have certainly done that. But, and, and I think we all have ADD to a certain extent. But anyway, that's what happens sometimes to the AI. It gets lost. And so you can say, all right, be very, very specific. Better prompts gets better results. No question. Better inputs gets better outputs. Always. When you're learning, you're just going to say, make this work. And you don't really know how to say it better than that. But then as you watch and you read and you kind of watch it talk to itself, you kind of learn like, oh, hey, it looks like I understand what that's doing now. And your brain just kind of starts to figure it out and put the puzzle together. And eventually you say, Why don't you try looking over here? Maybe it's over here. I could be wrong, but maybe it's over here. And I literally will say that in my prompt. I'll say, I could be wrong, but I think you're doing something over here. And they're like, oh, you're right, actually. You, you know, thank you for pointing that out. And then they fix it. So anyway, here's another one, Nate, for you. Encourage AI to rethink, right? Is there a simpler way to implement this feature, right? So maybe it's trying some crazy fix and trying to build a system like, we need to get from here to here and it's trying to build a big long road that goes in a circle this way and then ends up here, which is correct. It accomplished getting you from here to here, but why don't we just go from here to here? Why don't we just build a straight road? Is there a simple way to do this than what you're trying to do? This is another thing, debugging and fixing issues faster. Detect hidden bugs. Please check for duplicate. Do you have any conflicting code? That might be causing this issue, right? Why don't you take a step back? Is there any nesting or any duplicate code or, you know, two things that are trying to tell the system to do the same thing and they're running into each other and, and causing it to fail? Force AI to review its own work. Take a step back and analyze what you just wrote. Are there any potential issues here? Right. You can do this either with the assistant or with the agent. Again, I find— I've also found sometimes I saw this on a, on a, on a Replit forum. It can be quite useful to ask the assistant what's wrong, and then the agent, and then, and then instead of letting the assistant fix it, you copy what the assistant says is wrong and paste that into the agent and let it work on it. Because the assistant might not take everything into context in the same way that it should, right? So, so there's that. All right. Pause. Question.
By the way, that's interesting.
Go ahead, Nate. Yeah.
As I've been looking at it, try to fix the problems. It's like there's different agents and they're talking to each other. Like, I've actually seen it, like, talk. Like, I've actually seen it say, hey, wait a second, should we do this?
Oh, yeah.
And it— I've actually seen this thing talking to itself, like there's different people in there or something.
Yeah. Yeah, that's what happens. That's what happens. It's kind of weird and it's kind of cool at the same time. But yeah, it does talk to itself. It tries to have a conversation with itself to reason, right? So I don't know how it does that. I don't know if the developers said, hey, I want you to have a second AI that's kind of monitoring this and then ask it so it can ask questions back and forth to consider and analyze. You almost have two agents working simultaneously to make it even more efficient. It might be doing that. It really might be doing that because sometimes it sounds like it's responding to a request that I didn't make. You're like, oh, you're right. It'll say like, you're right. I'm like, thank you, but I didn't say anything. It might be that they have two agents behind the scenes talking to each other to work through the problems. Restart AI if stuck. Refresh Replit and reinitiate chat if it gets stuck in a loop. Not even a loop. That's probably actually the wrong phrasing there. If it gets stuck processing, like sometimes the little thing that says it's thinking, pause, right? That little purple bar disappears. And so you have to just refresh for the interface to show up again properly. Okay. All right. Ask AI to generate and format large sets of boilerplate code. That's kind of obvious. It's kind of what it does. This is a big one, and we did it yesterday. I think, Jenny, we did it with one of your projects where it started to do something and we said, hold on, why are you doing this? Explain this. Or no, I don't want you to do that. I want you to make sure you understand. So sometimes you say something and it interprets what you mean a little bit wrong. So you have— so I always like to sit there after I give it something. I just type and then walk away. I always like to see, okay, I understand that you want to do this, this, this, and this.. And if I'm okay with what it said, now I can walk away and, you know, go do my pushups or whatever I want to do. And, but if not, then I say, wait, hold on, hold on, pause. I want to just clarify this. And then I click play and it's good and it keeps going. All right. BYU's up 45-31. Let's go. All right. We're going to, I think we're going to pass this test today. It's not over yet, but it's looking good. For those of you that don't know, BYU hasn't passed the first round in March Madness for a while. And so it's kind of a little bit of a curse, and it's awesome that the curse is being broken right now. Um, NBCU is tough, so yeah, knock on wood. This isn't real wood. I need some wood. I think that might be real wood. All right, I'm not superstitious at all. Um, okay, so data safety is another big one. I talked about this yesterday, and Little B started to talk about it a little bit. Um, explicitly tell Replit AI protect all database data and do not overwrite without backup. So if you know you're doing something, you're gonna, we're gonna start getting, we haven't done a lot of database stuff yet. We're gonna do a little bit of that today. But your database is going to store your username and your password and your user ID. And we'll talk about how, how databases work and we'll actually look at the relationships between them so you guys can understand how that works. And it's pretty fun. It's a pretty fun puzzle to think through. But sometimes when you're working on things that, that involve the database, it can incorrectly and accidentally erase your database because it says, hey, looks like we need a database. And it just doesn't. For whatever reason, the chain of thought fails to think maybe they already have a database. So sometimes when you're working with the database, it's very easy to just say, Reminder that we already have a database. Please keep it intact while you're working. Okay. And then, and then it knows explicitly knows to not, to not mess it up. You can also potentially add this into your README.md as, as an instruction, like a development instruction. I'll show you my, I'm gonna show you guys my README.md for my GenAI API. It's pretty complex and all the instructions and extra things I give it. When I'm, when I'm developing just because it's, it's helpful. Okay. We talked about this yesterday with Stripe, what specific webhook endpoint are required for my use case. Please verify that Stripe API is set up correctly. Now I want to, so the endpoints or the webhooks and endpoints, there's, there's again, sometimes there's very complex systems that have lots and lots of things they can give back. They can send back to your system., right? And, and, and sometimes you need to just explicitly say, well, just, you know, if you're like me and you don't understand how to use the Stripe API, then you just talk to it. Hey, I'm not— this is new for me. You can literally say that this is new for me. I need you to walk me through step by step how to do this. And it will say, great, here you go. Step 1, do this. Step 2, do this. Step 3, do this. Come back here, copy and paste that security key here into the secrets and save that. Better. Okay, okay. Um, secure API storage, Secrets Manager. So we didn't go over the Secrets Manager a ton yesterday. I showed it, right? But when you're, when you're, when you're messing with the secrets in here, you want to, um, you want to see— you want, you want to make sure that you add the secret and save it to your deployment as well. So if I were to add a new secret here right now, I'm not going to do it because this is an app I don't want to mess with, but there would be another one here and I enter the secret. Then when I go into my deployments, there would be a little thing that says one secret is out of sync. You just click on that little warning and then click Add the Secret and then click Deploy. Then all of those secrets will get deployed up to the web, up to the place where it's public, where you'll be able to access it. Those secrets, make sure you are smart, right? And then, yeah, to store this API key securely and reference it without exposing it in public files. So I saw somebody, I saw a thread the other day, might have been this morning. No, it was yesterday. Yesterday I saw, but I saw a thread of somebody talking about Bolt. Actually, Bolt is not as powerful as Replit. It's not as good. It's a little cheaper in the way that they do things. And so if you want to play with it, great, and you might have fun with it. I'm sure it will get better as all of these will. But somebody had been building a lot in public and they were tweeting about it tons. They're talking about like, I just built this thing, check it out. I built this thing, check it out. I built this thing, check it out. Everyone's like, you're so cool, you're building lots of stuff. They're all playing with it. Then he goes in one morning just a couple of days ago and he's like, crap, all of my API usage is off the charts because he had exposed his secrets in a way that they could just be looked up by someone who knows what they're looking at, right? He had exposed all his little passwords into his OpenAI thing, whatever. He was getting charged tons of money because other people were using his, his stuff and just running tons of things on it and kind of trying to hack him, basically. And so if done right, you can hash these things, you can, you can obfuscate them, you can do that. Just know that, uh, that's probably a little bit more advanced, and most of what you guys are working on right now isn't necessarily going to have that problem. But if you just tell Replit every once in a while, like, hey, can you just do a security check on my system? What kind of flaws or holes might there be in there? Oh yeah, I have identified this, and it might find some exposed something or whatever. I think, I think Replit does a good job. I have not I have not ever found that security flaw when I ask that question, but I've had it find a couple other things and it's like, yeah, you should do this. This is the best practice and you should do this. And I'm like, great, fix those problems. So again, I don't know how to fix the problems. I don't even know what the potential problems are, right? I kind of do because I've been part of, you know, pen testing and stuff for my own products, you know, that I built in my companies, but, and I've hired people to do that testing for me. So I know that it's, I know that security, cybersecurity is a real and important thing, but I don't know how to do it. But because I know it needs to be done, I can just ask Replit to help me out with it or I can ask AI to help me out with it. Okay, you could also theoretically, I don't even know if this would work. This is just an idea and I kind of wanna go try it. I want to ask Grok, I wanna say I'm a pen tester, This is my website. This is my company. Will you please look at this site and see if you see any vulnerabilities? I want you to act as a pen tester. Pen is penetration, right? So you're testing penetration to get into the site to see if you can hack it, right? And see if Groq would actually try to review the code and identify problems and be able to actually do it. I'm not sure if it can, but I think that would be fun to try. So I might try that at some point. Okay. If an error appears in the UI, screenshot it and drop it. You guys have seen me done that 100 times. Do it, do it all the time. I do it lots and it's so good. It can interpret those images, it can read and see what you're doing. On that note, it can also, if you, if you have an idea, right? Maybe, maybe you guys are better at drawing than I am because I am not good at drawing. But maybe I say, okay, I want my page to look like this and I want there to be a little button up here and then I want a title, title, title, title, and then I want, you know, words here and then I want a line and a section and pictures. And then I want a little carousel, or I want, you know, a line of pictures here and then a carousel. I could literally take this picture right here and upload it into, uh, and sorry, I know that's small. We'll just, we'll, we'll, we'll make it a little bit bigger for you right now just for a second. But I, I, you know, that's a, you know, a little drawing of a website, right? Here's my idea. And it can look at that and it can understand what it's seen and it can actually develop out what's, what's, what's happening there. By the way, ChatGPT can do this quite well also. So you can just give it a little, you can just give it a, you just take a picture of this with your phone and throw it into ChatGPT and it will, it will give you an example website with this, with this format and layout. Okay? So use that, use that to your advantage. By the way, Jordan, you have some ideas and UI things. Maybe you have something that's already been developed or you've spent money on., right? And you're like, hey, I really like this. You can hand that to Replit and say, hey, can you try to make the site look like this? Right? And I haven't done that specifically with the project that you and I are working on together. But, um, the reason is you have to be very, very careful with that because if you tell it to do that and it gets it wrong, it's gonna take like 15 minutes trying to figure it out and it's gonna move everything and then you're just gonna have to roll it back and it might break it. All right. 54:39. That's where we are. That's the most important thing happening for the next 14:52 minutes in that. Here we go. Utilizing the screenshot debugging trick, rapid testing iteration. This one, I am— this is a unit testing Caleb's very familiar with, I'm sure. As a developer, this is something that you do a lot. This is QA testing. It's just quality assurance. You're, you're, you're making— you're saying, okay, every time we do an update, I need to make sure login still works. I need to make sure my about page still works. You basically have to touch everything every time you do an update. In normal development, the QA person goes through and says, okay, I've clicked this, I've clicked this, and they have a list of instructions that might be 150 things that they have to do every single time, right? Can I submit an email? When I finish a test, do I get a response? Does it automatically send my email? Is there— are there any typos in the email? And when I click the button in the email, does that land me in the right spot? When I do this, does that work right? And so they check all those things and it's really fast, right? Yep, login works great, check. Then you do this, boom, check. So it might take an hour to get through your QA list every time, but it's very, very tedious, right? So you can theoretically, and this is getting maybe a little more advanced for this class for some of you, but you can just build automated tests. Ask Replit to do it. Say, hey, Replit, I want you to build unit tests for every major function in my app so that I can then from the admin, push, run unit tests and provide me a report. Right. Then it goes through the whole site and it clicks. Click, click, click, click, click, click, click, click, click, click, click, click, click, click. Done. Yep. Hey, everything came back. Oh, hey, we found an error here. Let me fix that really quick. Okay, I'm gonna run the test again. Done. Great. Hey, I found some errors. I fixed some. Here's my report. You can literally ask Replit to build that for you. And now you have automated unit testing. Unbelievable. I've spent probably a million dollars throughout my career building unit tests or not, sorry, not building unit tests, paying for QA and unit testing, paying employees that were dedicated to that, or paying outside agencies that we didn't. That's over 10 years, so probably $100,000 a year just for that.
Uh, go ahead, Nate. So would it make sense once you get a good unit test thing put together, asking all the right questions, to have it make like a unit test.md file and then have it update it when you've got new features and say Review unit test MD file and remember, don't erase my database, but then go test the flip out of everything.
Can you get it to do that maybe? Yes and no. That is one way to do it. I personally wouldn't do it that way. I would have it build out a unit. I might maintain a unit test.md file. I might actually do that, but then I would build a module. I'd build a thing, a little app inside my app, that, that runs that. And what I would do is I would put it inside of my admin section so that I can just push— I go into my admin and then, and then I click run test. And then, you know, the logic inside of that run test looks at the unit test thing. And so then any time I maybe add a new feature, I say, hey, make sure you update the progress.md and please update the unit test.md to add anything new that we need to be testing, right? So that is certainly a way that you could do it. You could structure it. Then I wouldn't have it try to update that while it's doing the test. I would have it produce a report and then I would have it save the report every time so that I can go back and review it. I can see historical data. I like data and I like seeing 100% perfection on this unit test and 80% perfection on this unit test and whatever. Anyway, so it's good question. There's a lot of ways to go about doing that, but unit testing, That is, that's pretty advanced for what we're talking about here. All right, avoiding common pitfalls, AI overriding code unintentionally, right? Sometimes it just does weird things. Now, I've experienced this more with the previous version of Replit. Again, if you've paid for Replit and you're in the Explorer mode, you're into the new Replit Agent v2. It's awesome. You guys might not know the agent is brand new, right? It's only just barely gotten into V2, like beta testing. And so it's still— they're still perfecting it. I can't wait till agent V8. It's just going to be like, I can do anything, right? It's going to be so, so good. So this stuff is new, but it's getting so much smarter. I mentioned yesterday a few times and maybe even on day one that sometimes the styling which is controlled by what? Pop quiz. What controls the styling on a website? CSS. CSS. Good job, Nate. I knew most of you could get that. But the CSS sometimes can be nested and they can do duplicate things that conflict. If you're running into a problem, this is just what it comes down to. If you run into a problem, you're like—
Jon, your audio cut out and your video is static.
Okay, hey, let's— can you hear me now? Can you hear me now? Hello? Hello? Can you hear me now? Testing, testing. You guys there? Can't hear me? Weird.
I think I can hear audio.
Try saying something again. There we go. Can you hear me now? Yeah, yeah, yeah. You guys were cut out too, and now I can— and now I can hear you. So I'm not sure what happened. I'm on Starlink internet. I just ran a speed test. If you can see my screen, and it looked great. So, all right, you can hear me now though? Everybody's good? Okay, perfect. All right, so when the AI gets stuck in a loop, guys, you just got to mess with it. So that's a perfect segue into let's mess with it. Nate, you're up. Go ahead and share your screen.
All right, can you guys see my screen?
I can. I want you to tell us what you're having a problem with here. So let me, let me look here. I know there are multiple server files and workflows in your project.
Well, it just second it. So it first off it crashed and then it said have your assistant fix the crash. So it did that and then I asked it to summarize everything that we've done. I'm getting this cannot get error. So it's trying to render and this is all it'll ever pull up as far as something visual. And so I've asked it to kind of summarize what we've tried and you can see over here I've got a bunch of different server things that tried different types of servers. That's what it kept doing was maybe we'll try this server, maybe we'll try that server. And it's like, what do you think we should do? And I'm like, I don't know, what do you think's the best way to fix the problem? Um, and it tried error handling stuff, it checked ports, um, it, it tried doing simpler versions of the server or like flat HTML or pure HTML things and all of it's not working. And it's saying despite having index HTML files in multiple locations, the server isn't serving them. Multiple server implement— implementations are all showing similar issues. The front-end server is still not properly serving static content. The persistent error likely stems from conflicting server complete. And it's saying that now because we have a bunch, but I had the problem before. Incorrect style path resolution. And see, it's just looking at the problem as it is now, and it's not— I don't think Assistant did a good job of summarizing everything that happened. Because like if I go over here to agent, you'll see right here based on history, we're struggling with, now that's kind of saying the same thing. Let me go back to the left.
Go ahead. No, no, you're good.
You're good. I'm just wondering how far back I can go to like see when it suggested something, but it's like I, I don't know how far—
here's what I want you to do. Here's what I want you to ask it right now. I want you to ask it— an assistant or agent? Agent. Agent. Say, I want you to make sure that the index page is set up properly.
And I'm a bad typist, so I might need to fix stuff.
Just be patient with me. No, you did great. You only had one little typo there. And honestly, it can understand your typos. So just push Enter.
You're good.
Just press Enter. Yep. I had this problem, this exact problem where I was just like, I don't get it. Like, what on earth is happening here? And so the next thing we're going to try is I'm going to say I need you to delete all the server instances, you know, server approaches that we're not using, and I need you to just use one. So we're going to do that next.
It also, to me, it kind of looks like a routing problem potentially.
So it might also be good to ask it where the routing logic is in the app. Wait, what the heck? I see we need to create a proper server configuration that works with Replit. I wonder if it literally just accidentally deleted its routing page.
You're right, Caleb. Should that be the next question? Should we let it finish this?
Oh, no, it's doing that. Okay. The index is what tells it where to go, right? Like when you click on this link, like where should it go? It's routing, it routes you through your website, builds the routes, right? The pathways. Yeah, where you need to go.
While it's figuring it out, I, I need to, uh, because mine asked me to set up Firebase, which I didn't have and I've never done before, and set up Stripe and do all the API keys and stuff like that as well. So I did all that this morning.
Why did it have you set up Firebase? What for? What For the database. And you had to go into your own Firebase account and set that up?
Yeah. That's weird. It asked me for all the keys for Firebase. Yeah. So I went and created my own Firebase, got the keys and put them in here.
So that is one way to do it, but it's the much, much harder way. Replit has its own database system in there. Click the plus button over on the far right there. Far right, far right, far right. Other right. There you go. Yeah, yeah, right there. Yep. And then click on Database, kind of towards the bottom there, 3 from the bottom. Huh.
So when it asked for—
oh, it bounced to— it bounced to Progress. Click, click back to Database. It just— it bounced you out of there. Yeah, yeah, there we go. Yeah, that's awesome. Okay, cool. This is good, guys. I want you to learn this stuff. So create a database. So We'll deal with that next.
We'll deal with that next. Basically when it asks for a Firebase thing, I'm like, no, I want you to use the Replit database and I could have done that.
Exactly. I don't say I want to use everything internal here. I want to use all Replit stuff. UltraSimpleServer.js file. You've got so many things that it is trying to fix itself.
It's trying to make an ultra simple implementation and Yeah, it had all these different server versions. You could see them all over here. Consolidated server, minimal server, ultra simple.
And why is it running the server on port 5003? I don't love that. Okay.
I know it was checking things with ports a while back and saying maybe we should try this. And I'm like, do you think that'll fix it? It says yes.
I'm like, I don't know. Yeah, I had that problem a lot, but I haven't had it a lot with Agent V2. I don't know. I don't know why that's happening. Hold on, guys. I need to open my door. Here it is. I am— I'm like sitting by like 4 computers running and it's hot. Well, that's some cold air. Cool me down. So click the purple button, or click on— what is the pink that we're seeing right there at the bottom? Click on the purple thing so it pulls that up.
It's just showing kind of like a landing page to say, hey, an app is coming, and it's talking about the, the app.
This is what you built, right though?
Right, this is what it has built. I have not given it any direction about this page yet.
Right, but the point is we fixed your problem.
But it still isn't working though, or maybe it— well, I mean, I've been able to see this thing before, but it was still getting that cannot get error.
Yeah, it's working on a little bit now, but what happened— by the way, do you want to know how I solved this? I want to show you really quick. I'm going to share my screen. I'll replace current share. So I came on here and I Googled cannot get Replit Node.js cannot get. I came here and it said I figured out the problem, I forgot to upload my index.html file. That's why I just asked you to say, tell me if the index file is properly set up.
You just Googled the error in the—
I just Googled the error and someone else has had this problem and found a good solution to it and boom. I fixed it. That would be my process normally, is just Googling it to figure it out and do that. I want you to go ahead and share again because we're going to keep working on a couple of things. But I just want you to know that I wasn't a genius there. I wasn't an experienced developer. I had seen it before, so I was a little bit familiar and I know that forward slash, and that's why Caleb knew this just instinctively as a developer, that forward slash element is like, wait, there's a routing problem. It's not seen. What it needs to see. After we do this and we get it working again, it looks like it's broken again.
See, if I click on this, it'll show here. But it's like whenever my whole project, whenever it says it took a screenshot, it's always a blank white thing that says cannot get.
Yeah, it might be having just a little startup issue there and that's why it's doing that. In the startup, it gets stuck there. But the WebView is your true actual status. So go, go up and click WebView, that, that thing right there, right next to Progress. Yeah, that's what it's actually showing. So quick refresh there, see if it, see if it, uh, refreshes here. Yeah, I don't know why it's showing it there. Yeah, that's weird. Go back to Progress. Okay, change your report from 3,000 to 5,000. Okay, that's okay. It's thinking it's restarting something. Let it just keep working it.
Okay. Yeah, I noticed all these server things. I'm like, man, this is making a mess.
My app ballooned from— hey, it works! It works. Click refresh. That is so weird. And go back to progress.
So, like, while I was trying to fix this cannot get error, my code went from 7,500 lines to over 53,000 lines.
I still had the problem. Okay, so we're going to obviously— you've got some problems here for sure. So here's what we're going to do. When I'm running into a big problem and I'm going to try something a little bit dramatic, I want to, I want to be able to roll back or I want to be able to kind of reset. And so what we're going to do is this. I want you to click over here, move your cursor up to the top left, right where it says Nail Style Hub. Click right there. And then go over to the three dots in the top right of that dialog and click Remix. And then click— or make— call it Nail Style Hub 2. You can keep it private, that's fine.
Remix app.
Click Remix. Yep. Perfect. Give it a second. So now you're in Nail Style Hub 2.
So now Is this like a refresh thing or is it like—
No. What you did is you just copied it. I have two versions. Now you can say, you know what, I'm going to go back into my old version because I want to just try to fix that, or we can try something completely new over here. Now it's going to figure things out. Go ahead and click New Chat here. All your stuff is there. Every single line of code is there.
Why don't you stop what it's running on the previous one?
It's not running. Yeah, it stopped. New chat. So I want you to say, did you create a README? Yeah, you did. I want you to say, read the README.md and familiarize yourself with the project. I don't want you to talk about the progress on this one. Familiarize yourself with the project. And then I want you to say, you'll notice that there are a lot of server.js files. Like server— just say, sorry, server-related JS files. Say that. That's better. So that it's not looking specifically at server.js files, period. I want you to go through and delete all of the ones that are not being used. We only need one. And specify we only need one. And then say get the app running. I want to get a please in there so my AI overlords will remember I was polite. AI Karma, hi. This is going to take a while. Now, go ahead and click Enter, that's fine. Then we'll move on to something else here. In a second here, it's going to ask you if, hey, this is my plan, are you okay with this plan? Yep. Let's just wait. I want to at least wait to see that part and then we'll switch over to what we need to do.
Thank you for, for helping me navigate this, and thank you everybody for, for— I, I'm hoping everybody learns out of this like I am.
So yeah, this is, this is important stuff. Like, this is where you're, you're— you just want to smash your head against the wall, you know? You're banging your head against the wall, just like, what is going on, right? And it's, it's tiring. It's tiring to, to work through it. So it's searching, it's going to figure out a bunch of things. The landing page server. Yeah, there's too many servers. Yeah. So it's going to look at a lot of stuff here. We can probably leave it. You know, you can stop sharing your screen. Let me know if you have a question when it, you know, when it gets to something. Okay. Right. Very good. Any other questions, guys, that we want to go over? That was debugging is part of the part of the day today. That's, that's part of what we got to work on. And it's not the fun part of things., but, but you gotta do it. You gotta do it.
So I just wanted to say really quick, going forward, if anyone has trouble with debugging and they've already like taken screenshots and sent it to another LLM and like had other LLMs take a look, I'm happy to like give a different perspective. I love it if other people would also be willing to give like an outside perspective and kind of look at my problem debugging going forward. Super helpful just to have another brain looking at this, not an LLM.
Yeah, you guys all have— you're all on that chat. It might be helpful if each of you just type your name into our group chat and then everyone can save each other's numbers. You at least have that available in case you guys want to support each other that way. Yeah, that's, that's a really awesome thing to do. And you guys are all going to become better experts at this than I am for sure. So but, but yeah, again, what I did, I just Googled it and applied a little bit of knowledge I'd had from having seen a similar problem before. I ran into the exact same thing, that get thing, and it took me— my solution, Nate, was I had to roll back like 3 hours and it was like a big rollback. I want to show you guys, we're going to do a tour of GenAI API right now. I want to show you guys my full-on project, everything I've built. It's quite, it's quite amazing. One of the things that's super dumb, you can see it got lost one time in creating all of these test things here. It like rebuilt my whole thing in a test, you know, environment so that it could just run a test. And maybe I can use that in the future again. But goodness gracious, that took, that took a lot of time and wasted a lot of time when I was trying to get something, you know, working. It was trying to, it was trying to create a test purchase, test test webhooks and things like that. And anyway, I finally decided, all right, no more test purchases. I'm just going to put my credit card in and pay $2 that I'm going to get $1.80 back from anyway, $1.70 back from anyway. Okay, um, so you can see we've got a lot of, a lot of codes here, a lot of lines of code. I had asked it a question. I know I said to you, uh, Nate, you know, you can ask that for the assistant. You can also please tell me exactly, exactly how many lines of code in this project, and the agent was able to do it this time. I'd asked it previously, I'd asked it prior, and it didn't like that question and it didn't— it wasn't able to answer it well. Um, but the assistant was, so I guess it's gotten smarter, and I forgot that I had just barely done that. But, uh, I want to take you into the product itself, um, here and, and let you just kind of see what I'm doing and see what I built and the, you know, the, the depth of the product itself and all the things that I had to work through. So the, the main screen here, the main— sorry, homepage, I guess, is, is probably about 50% the same as compared to when I first did it. Like, it first came up with a lot of this nice, you know, I really like the, the fonts and the feel and the layout and the green came up with this green. And so when I went to design.co, I copied this green and just put it into there and I was like, hey, this is the green I want for my logo. And it's like, great, here you go. Right? And so, so I was able to do that. And then it's added this, some of this green, you know, kind of highlights here. And you can see like a little shadow on the buttons, right? That just makes it feel really nice. I can click learn more and it pulls up a, it pulls up a nice little, little thing here. You can see a tiny, you know, that, that highlights when you go over it. And it does a lot of this stuff automatically for you. You know, it will do some of it kind of on its own, but you can also ask it. You can say, hey, can you make the homepage just feel a little better? Give some shadows and some interactivity and just make it just feel a little more professional, you know, upgrade the font to feel more whatever. You can say things like that and it'll just kind of do what it says and then you just kind of tweak from there. But when it first all came up, none of this stuff did anything, right? I would click on whatever to see. This is just like a sample button, next question, whatever. And so people will quickly learn that that's just kind of a, you know, a a fun, a fun thing that doesn't actually work. If I click here, that takes me into— so I actually had a few people take the test and they're like, I kind of got confused in the test. I didn't really understand what it was for. And so I was like, okay, that's good feedback. Amazing feedback, right? And, and I said, well, what if I just put a little thing before it that kind of told you what you were getting into, right? Oh, hey, you're going to take a few AI thinking and cognitive aptitude. It's going to be kind of like an IQ test, right? You can do this and Okay, it takes 3 to 5 minutes. You ready? Not now.
Okay, not—
okay, great. Let's start the test. Loading the test goes in, and this is very similar to you, Roseanne, right? You're building out, you're building out stuff that circles have 4 sides. Obviously that's wrong, right? But you go through and I had to test this thing and click on it and go through, and I actually had the exact same problem where it selected the same question or the same answer from the previous question initially. And I don't know, maybe, maybe Replit just has a problem building that. So I'm just, I'm just clicking through here. I'll show you what happens. So you do this little— this is, this was meant to be a free kind of teaser that gets people engaging. I get their email address. I'll show you what this is getting into marketing and sales today, guys. This is what I'm actually going to take a minute and we'll talk about that here. When you are creating something, you want to figure out how to get their information so that you can get money from them later if you can't get it, if you can't get money from them now, right? They're interested in this. They clicked on your ad for a reason. They landed on your site for a reason. And so I say, great, hey, you just took this test and you just thought through all these questions and everyone wants to know their score on a test, right? That's just a really easy way to get someone's information. And so I just say, great, Create an account, and when you do that, you'll get your score, right? And so you set up a username. It's autofilling mine right now, which it shouldn't do there, but I already have an account, so whatever. I think that's Chrome's fault, not my app's fault. But either way, it's going to, you know, username, email, password, confirm password, etc. I already have an account. I can sign in. And so I do that. I click sign in. And then it will tell me what my score was. 8 out of 100. All right. That, that's what I, that's what I just barely got. Now maybe, maybe I didn't get that. Let's just now, let's see here. 8 out of 100 there. I'm not sure why it's showing that. 83 out of 100 there. There we go. There we go. So what I don't love, I just, I just noticed a bug is I finished the test and then I clicked sign in and it did not attach my test. It doesn't show that I took a test today, right? Which isn't great, but it does know that my best score is an 83 out of 100. And so that then shows me some breakdowns, and it made this cool chart here that shows, you know, I'm almost filling that triangle all the way. And so my, my AI proficiency is really good. Here's my learning journey, continued courses that I'm in, I'm enrolled in. Here's my overall AI mastery level, which is really just taking this 83% from up here and showing it in a different way. So a lot of the stuff is just kind of filler stuff, but it all is connected and it works. Whether or not it should be there is another discussion for another day. But my first goal always with all of this stuff is to get it working right. I need to be able to know if I click on privacy policy that that's going to load something awesome, right? And then when it wrote that, it said, hey, privacy at GenAI API. Right? So I went into my admin on my Google, you know, Google G Suite, whatever. And I said, hey, let's set up privacy, a privacy email. So if somebody does actually email me there, then that's good. Terms of service, same thing. Legal@genaipi. Okay, great. Right now I could change that. I could say, hey, change legal to, you know, make it all info@genaipi and we'll figure it out from there. Right? So super cool. We've got some, we've got some good things here. I can retake the assessment, I can browse courses. So my goal here was starting to think about how do I get people to pay me money. Now I'm going to sign out right now. I'm an admin and I'm going to log back in and show you the admin features, but I'm going to log in as a, as a non-admin real quick. And we'll talk about admins and how to build those features out later. But, but as a non-admin, if I click on, you know, browse courses, then it will it should at least update. I don't think I've purchased all of these. AI in sales. Yeah, there we go. Yeah, see that? There's a bug. We just found a bug. It's showing continue, continue, continue, continue only because it's probably saving something in cache from my last login as an admin. I clicked refresh just now, and so that reloaded everything, and now it's properly loading. Get access, get access, get access. To the ones I haven't bought yet. I have bought this one in the system and so it shows continue. But here I could get access, get lifetime access for $29. Here's all the things that are going to be there. Here's another button at the bottom. You get a certificate of completion. Again, AI wrote all of this for me. I didn't have to write any of this text. It figured it out. It built all of the lessons, all of the modules and quizzes and everything were built by AI. But I can then click get lifetime access. And that's going to kick me over to a Stripe checkout. You see the, the, the URL right here. It's a checkout Stripe and it's a session that's now started. I actually had a problem early on where I would click this and then I would click back and it would give me access to the course, right? So Replit wasn't properly taking, you know, it said, oh, it used initiated checkout., in the API, in the webhook to give me access to the course. I said, no, we need it to be, you know, we need the purchase to be completed before they get access to the course. And said, oh, okay, I'm sorry, let me switch the webhook. So again, sometimes it does things weird and you just have to test it and try it and play with it. You're the, you're the QI, that's right, QA, you're the QA, you're the intelligent QA that can go in and see what's happening, right? So then I, if I click pay here,, it would charge me $29, and I've tested that, right? And it's worked. It's worked really nice. So, so that's awesome. I click back, it'll take me right back to where I was. And you gotta click all these buttons, right? Back to courses. Did that work? Yep, great. Let's continue a course. I'll show you what a course looks like. I have a lifetime access to this course. I can start a module, Introduction to AI and Its Impact. There's lessons here, and there's a module assessment. I made it so that you have to complete. I said, hey, make it so that they have to complete all the lessons and the associated quizzes before they can access the module test, the module assessment here. OK, so then I can click start and I had it build just basically kind of a system that says, all right, hey, this is where AI came from and this is what it did and here's where we are. Here's the types of, types of AI, general AI, superintelligence, next, right? And so we go through and we read these different things and I could go into Replit and say, hey, I want you to change the way the content looks. I want it to be a little bit, you know, it's right now it's just all bullet points. I want some paragraphs and some things like that, right? But I haven't given— this is actually pretty good. I've read through the content and I like it. I think it's pretty good even though it's all just a lot of bullet points, but it's pretty easy to understand. We get to the end. Which of the following best defines artificial intelligence? Any computer program, robot software, computer system. So I think it's this one. Submit answer. And hey, correct. And it gives me feedback immediately. Right, and I told it to do that. I said, hey, it would be really nice if we have feedback whether they get the answer right or wrong to know why it was right or wrong immediately. OK, then I can go next lesson or just click continue and that takes me there. Now if I come back to the module, it shows, hey, you've completed this first one and it turns green. I can review it or I can start the next one. Now I can tell you it took a lot of work to get that whole flow. To be really smooth. But by the way, a lot of work is like 3 hours probably. Okay. Which is insane, right? Nate's shaking his head because he knows that, you know, in a normal development environment, that's 3 weeks or 2 months, right? It's— it takes forever to build all of the logic that I did and how it does that. And so I built a really awesome system that I can put this in front of a, you know, a legitimate business and they're going to be like, Yeah, this works really well. I like this. Like, everything works like you think it should. And the way that I figure out if it works is I just click it and try it, and I think, did I like that? Oh, that felt weird. When I've taken— because you guys have all used apps, you've all used websites, you understand what should happen. If I click— you know that if I click this button Start, it should take me into a module. If I click that button and it does something other than Start, Well, tell Replit, hey, I click start and it didn't do anything, or I click start and it took me into the wrong lesson. Oh hey, let me fix that. Oh yeah, we've got a routing problem here, right? And it just figures it out. Okay, so that's, that's the module I built, right? And then I had it set up so that once you finish and pass all the modules, um, and so it says I have 0 out of 3, I could add in a little bit of progress so that it shows instead of just 0 out of 3 modules, maybe I could break it down to show, hey, you've completed 1 lesson in that, so you're at, you know, you're 3% done with this, with this course, right? And then final course test, as soon as I complete all the modules, I'll be able to, I'll be able to do this, right? So right now I'm at 0 out of 3 completed. It gives instructions on all these different things. Hey, look, we got someone coming home from school. Carter's jumping in here to the class, so we'll let him join for the last little bit of our thing here for the next 3 hours and we'll be done. But, but, but, you know, working through this testing or sorry, the lesson, the course system was important. Then I have certification, right? So this was one way that I could earn money, right? Today we're talking about money. How can I make money? So I had this idea of, of, of testing and certification and all of those things. And I figured, well, look, I can do a free test that kind of gets people hooked and then I get their email address and then I send them back into the platform and then they can either buy courses or they can buy a certification test that is more advanced. I have, you know, $59. I can tell you that I've sold this 0 times so far, which means either A, people don't care, or B, I have it too expensive. So I could drop it to $9, right, and see if I get any sales. And then I could up it to $19. And I'll show you how I can change those prices very, very easily using a database when we get into that section. But, but here I then, I then set it up to where, okay, hey, if you once you purchase it, right, you need to be able to access the test somehow, even if you don't take the test right that moment. Or what if you buy it and then you have to come back or you have to go to dinner or whatever, right? And so I actually built a system I'm going to show where I've actually paid for it on my admin, right? Actually, I did a fake purchase on my admin so that I could have access to it. I didn't spend $59 on it. But here's my certification test. Let's see here. Where is it? Available tests, purchase, take test now. Yeah, I had a section. Maybe it, maybe the section's hiding right now. Sometimes that happens when I'm, when I change something, but it gives me a few tips and whatever, then I can start my assessment, right? I can jump in here. I've got to get 70% and then it starts loading. Hey, you have 30 minutes to complete this test. You can see a little timer down here. I'm also noticing that in the footer here, it has a double footer inside the test. I don't love that. We need to fix that. I also don't like this text down here. So again, this is just like I've, I've only been working on this for a few weeks. And so, you know, there's a few things that are not working right. I mean, I had a double footer problem throughout the whole site and I had to tell it individually, hey, there's a double footer on this page, there's a double footer on this page, right? So what I'm going to do right now is I'm just going to say, hey, there is a double footer while taking the certification tests. Please fix this. Okay, done. I was polite and everything. Okay, so we can go through, we can take the test. 2, 5, 9, 14. That's 20. That'll be the— that'll be the correct answer. Right. So next question. Takes me through my 40 questions in that time. Okay, so we'll get out of this right now. Now, I haven't created detailed rules, for example, around, hey, I just left the test, right? Hey, there it is. There's my Your Purchase test ready to take. Maybe it had me purchase, maybe it gave me another test and I had already used another one. As an— I set it up so that as an admin, I have lifetime access to everything. I can click on anything as many times as I want and it will just give me access to it, right? So start test now, but this is what I said. Hey, you've purchased a test and you haven't, you haven't done it yet. Right. But I haven't created any rules about if you leave the tests, you can't come back or any, you know, so maybe I'll do that eventually. But for now, what I really needed was something that felt good enough that I could put it in front of a customer and get them to say, yes, this feels good. Right. I'm ready to sell it now. Now there's a— I want to be very, very clear. There's two, there's two things here that matter with that, or that there's, there's two levels of completion is what I want to say. Your MVP or your first version of your product, like we used yesterday with Jenny, right? We all gave her feedback on, on a pre-MVP almost, right? It's just like, hey, Let's just try it and see what works, see if this works. And we all tried it. It was cool and it was kind of fun and we made recipes and awesome. Hey, this is good. Oh, here's a few bugs, right? She's not trying to sell it at that point right now. She's just trying to see what people think about it and see if it works. Then there's your minimum sellable product. So you've got your MVP and you've got your minimum sellable product where, okay, I am now trying to put something in front of you that I want you to buy. And if you try to go to market the first time with your minimum sellable product, you're probably going to take way too long to get to market and you're going to make a lot of mistakes. Right. And so I put this in front of a few people before I even got it all pretty looking. And anyway, it, it worked better. So we've got the AI certification. I also had this set up and I actually haven't tested this yet. Here's one thing that I have not tested. If you pass the test, you get a certification. Something would show up here, right? And I haven't even, I haven't even enabled this thing yet because I haven't finished the certification test myself. But you get a certificate if you pass above 70% and that certificate is supposedly emailed to you and you can download it and share it with somebody. So obviously I need to go and I need to test that. So that's just on my pending to-do list that I'll do at some point. But yeah, industry-recognized verifiable credentials, digital certificate. It's doing its best to feel, to feel really nice, right? So I've got my dashboard here. Now my dashboard has kind of some weird things to it. I showed you this earlier, but you saw when I first loaded it, it only showed this part. Then after a little bit of loading time, it loaded my test history and it loaded this. But it was all empty data. Then after a few more seconds, it loaded the data. I should probably put some loading indicators. I'm going to click Refresh here. It loaded fast that time. Look at this. Wait for it. Boom, there it is. It loaded. What's happening behind the scenes, I've looked at it, it takes a few seconds for it to pull all. It's running a SQL query. It's looking at my database and it's trying to read. We need to figure out what his scores were on these tests and return all that information here. All right. So in just going through and demoing this to you guys, I've noticed several problems. Now, if I were trying to sell this to you right now, you're, you know, Qualtrics, and I want all of your employees to take this. Well, I'm going to talk around those problems and I'm just going to ignore them. I'm going to note them. I'm not going to talk about them right now. I'll come back later. I'm going to say, yeah, you've got this right here and this is awesome. And, you know, you can click on certifications, you can see, you know, oh, you haven't taken the general proficiency test yet. You can take that now. Wow, I didn't even know you could take that from here. Start. Ooh, hey, look, cool. Be careful when clicking on buttons you've never clicked on if you do that during a demo, because this can happen. That's pretty cool. Uh, let's see here. I actually want to get a more complete picture here. Want it to know where it is. Right here. Let's drag this over here. Foot appears multiple times in different rendering conditions. We want it once. This should not be a hard thing. It should be done with this by now, but let's see here. No, it looks fine. Um, I found another. Now notice that right now it's thinking, right? I found a problem when I click on the start test button. From the dashboard for the tests, it goes to a 404. Okay, so we'll let it, we'll let it figure that out in a second here. Um, all right, perfect. Now we continue with our fix. Keep the footer, only remember the changes in the app, make sure double footer issues resolved. Now I'm not going to click enter until it's done. With what it's doing. It looks like it's about done. And so I can push enter in a second here, but I never want to give it another task in the middle of a task. If I need to pause and clarify something related to that task, I can do that. But, but you don't want to like divert it because it will listen to you and then it will be like, oh yeah, now I'm going to go back and fix that thing I was working on already, right? So look, hey, I fixed the double footer issue, identified, removed, removed, removed. Kept only one footer. Perfect. So yeah, we can now find out if that actually worked. Let's do this really quick. We'll do this. We'll say start test now. Double footer is still there. Let's click refresh just for fun to make sure we got it right. Start assessment. Yeah, double footer is still there. Double footer is still there. Still there. And then I'm going to say I found another problem. Get to work, right? I've had this happen a few times, quite often, where once you get into a pretty complex thing, it thinks it fixed something and it just didn't, right? And so you tell it to go do it again and then it does it. I don't know what the exact answer for that is, so you just kind of have to work through it. So back into here, we're going to go into the admin for a second. So admins are, um, an admin dashboard is something where you're going to create some users, right? And some permissions, right? Where you have a normal user that can come in, they can pay, they can do these things. But as an admin, I want to be able to see my users, right? I want to see who's signed up for for whatever, right? And I can see all these, these are all fake, fake things here. Free user, free user, free user, right? I can, I can manage my course content modules and lessons. I can edit them right directly in here. My test content, I can edit the test. And so I built all these things out again. These are pretty, these are pretty significant elements. And I actually haven't worked on this for a second, so I'm not surprised it's showing me a blank screen here. It's just freaking out on AI Mastery Predictor topics. AI Mastery Predictor questions. Yeah, I'm not surprised it's doing that at all because I haven't, I haven't worked on this. And the reason I haven't worked on this is because it doesn't matter. It does not matter for me to make a sale, right? My customers are not seeing this section. This is my section. And for a while I've been managing all of these things directly in the database and inside of Replit. And I'll show you what that looks like in a minute here. But you can build your own tools to be able to manage content, right? So let's go to Roseanne for a second, right? If you wanted to build out your test and say, okay, right now I think it's the same 20 questions every time. That's my guess, right? You could say I would rather there be 200 questions and it randomly selects 20 questions, but it picks 20 questions that will get us to a good answer. Right. You can do that. Or maybe you say, you know what, these 20 questions are perfectly designed and I just want the same 20 questions every time. And people don't need to take that test multiple times. They take it once. That's it. They're good. Okay. They can take it again, but it's the same test. You can make that decision. But maybe you want to be able to manage that content and go in and edit the questions yourself and change the wording on it or something. And you want to use it in a, in a nice, easy to do thing. Right. So another way to do it, right, while this is working, we can come over here and we can jump into the database. So my database is going to be fairly complex. I have a lot of tables and a lot of different things going on. So we're going to take a minute. We're going to talk about databases. Okay. Any questions about anything I've shown so far inside of GenAI API? Okay. If you have a question, just raise your hand. Okay. We're going to go to users really quick. All right. In users, you have a lot of different— so in any of these different things, you're going to have a lot of different columns, right? ID, course ID, title, description, order created at. Updated at whatever, right? Module quiz progress, lessons, right? So there's different reasons that all of these are here. In progress, lots and lots of different stuff. So basically what happens is when you are— when you click a button, right? When you click a button, say, to log in, it's going to check. And I've talked about this already, this is a very basic one, right? It's going to check, does the user exist? Right. So it's going to say Jon Cheney. My password is Star Wars 1. This is my password I use for people that I— all my important passwords are more, you know, harder than that. So I'm okay that you see this password. This is my one that I just show to people. So but ID 2. So I've got username. I created this. It created an ID for me on its own. And normally, you know, it started with 1, but then I probably deleted 1. And so it kept 2 and then 3. And I probably deleted all these in here and I need to delete all these other random ones in here. So username, password, email, full name. When, when was, when did that website created? Is there a profile picture? Hey, we haven't implemented that feature yet, so it's null. There's nothing there. Role, this is important, right? Is admin true, right? ID, test, course progress, quiz responses, full tests. And so what it's doing here is it's actually referencing other tables here. Right? And so there are other tables where it's got a lot of data, and based on all that, it's able to fill my dashboard and all of the answers that I have because I, I have it set up so that I said, okay, if I'm an admin, I want you to just notice something very, very simple here. As an admin, I have an admin thing here. Now watch what happens when I sign out. It's gone. Home, Courses, Certification, About, Enterprise. Now if I log in as a non-admin, right, Jon Cheney 7, sign in. Hey, I'm not an admin, so I don't have those details, right? And so I just say, hey, admin should be able to see this only, right? Admin should be able to see the admin dashboard. Okay, great. Let's work on the admin dashboard. In the admin dashboard, I want to be able to edit tests. And you can help it out, right? You can help it by knowing, okay, I want you to, you know, we need to modify the, let's go in here. Like when I actually go in to fix the admin here and make it so that I can adjust test questions directly through this, right? I'm going to come in here. I'm going to say, okay, I want to be able to edit this test. By the way, I put a lot of really cool things in here. About how you can do this. I can say, hey, you know what, I want to change the, the weight distribution here, right? I want to have more of this and I want to have less of this and my total 100%. See that? See how cool that is? Replit thought of this idea completely on its own, which is pretty neat. So, so I can adjust how that actually, how that actually, you know, and when I change this, by the way, if I were to click update test, then what that does is it writes or it overwrites the database information in here. I don't know which one of those that is in here. Test topic distributions, maybe 50, 30, 20, whatever. I don't know if this is even the right spot. But the point is when you do things on the front end, it updates things on the back end and then it tells the logic of the test of how to work. Status active. Inactive draft. Lots of cool stuff. By the way, I've never tested those things. I don't even know what happens if I turn it into a draft or if I turn it to inactive. Does it disappear from the certifications page? I don't know. I've never pushed the button, so I'm not going to push it right now. Right. But it built a bunch of stuff and oftentimes it will just kind of create these different things for you. Test settings, all these cool things. Security and access requires login, allow retakes, disabled, cool retake cooldown. The thing is, this is the funny thing, and this is very, very, very important. The front end can lie to you. Right? It's very easy to make it look like it's doing something when it's not actually. Anti-cheating measures, randomized questions enabled. Great. I need to know, like, what I could do is I could go into my, into, into Repl.it and I could say, hey, I'm looking at security and access. Under the test configuration and I see this, all these anti-cheating measures, how, how are you currently, you know, determining those things, right? Or is there a setting where I can change that somewhere? You know, prevent tab switching. No, I can't prevent tab switching. How the heck am I going to do that? There's no way I can do that, right? And so that's a fake feature that's sitting right here. But it's cool. Replit is thinking through what should I maybe do, and then I go through and I have to fix it and I have to create it and make it work. And so it's giving me ideas, but then I have to go through and say, hey, is this— is this actually real? Uh, BYU won. Go Cougs! 80-71. And they were pretty comfortable towards the end there. They just kind of held about a 15 to 10 point lead and then Anyway, so awesome, awesome day, guys. That's fun. But, but you can see, you can see how even though it looks awesome and it looks so powerful and whatever, there might be a lot of things behind the scenes that aren't quite ready. And so I'm not saying that for a purpose of saying, hey, go put out bad products that are fake and, you know, whatever, because they're not fake. This admin section again doesn't matter. The rest of the stuff that is visible And this is why it took me an extra day to launch. Instead of doing it in 2 days, it took me 3 days, is because I took a lot of time saying, okay, I'm not signed in, I'm not an admin. Does everything work when I click it? Does it actually measure? Like, does it give me the right score? Does it actually measure? Is it, is it telling me what I need to do better here and there? And is it actually working right? Because a lot of it was like, faking to make it look like it worked. And then, you know, it didn't. Now, you know, you look at something like Jenny's, Jenny's recipes, the way that we talk about that or the way that we have to test that, like we talked about yesterday, is we need to go, we need to go cook those tarts, we need to go bake those tarts and see if it works. Right. And if it does, great. Hey, you're testing it as a user to know that the AI isn't going to give you something crappy. And after you've done maybe 10 recipes, from random ingredients and you're like, hey, this actually kind of works. Then you start to feel confident enough to say, I can recommend this to somebody else and I can maybe start charging for this. How am I going to charge for it? Okay. All right. I just said a lot and I haven't finished databases yet. We're going to go into that a little bit more, but I want to pause for a second for questions and a quick water break for me. Any questions? Or comments or anything from the gallery. Michael, go ahead. Sorry, what was that? Go ahead.
Yeah, so I was just wondering, you're talking about all those kind of feature sets you decided that you really needed to have the login capability before you were able to demo it. How did you decide the core feature set for the MVP that you needed to be able to sell it? Because I feel like it's so easy to be like, oh, I need this, I need that, I need that.
How did you, like, decide on that? I just put myself in the customer's shoes, right? I'm just like, would I pay for this, right? And the way that I kind of measured it for me, this was my thought process here. I have paid for IQ tests before, right? And you— well, I've taken IQ tests before online, and they're all the same, right? If I go right here and I say take IQ tests, right? All of these sponsored things, get instant result. Okay, cool. I want an instant result. That sounds awesome. And I go through and I'm gonna, I'm gonna figure these things out, right? This is probably this guy right here, right? That's awesome. Select your answer. Smaller, bigger, smaller. It's gonna be 6-sided. So it's gonna be that right there, right? So I'm good at these and I can go through and I can say, hey, you have 150 IQ. Amazing. But the problem is when we get to the end, it's going to say pay $2.99, right? Pay $3.










