
Wasp with Matija Sosic and Martin Sosic
The WASP framework creators demo their GPT-powered web app generator that builds full-stack React and Node apps from simple text descriptions.
Episode Description
The WASP framework creators demo their GPT-powered web app generator that builds full-stack React and Node apps from simple text descriptions.
Episode Summary
Matija and Martin Sosic, twin brothers and co-founders of WASP, join the JavaScript Jam podcast to discuss their full-stack JavaScript framework and its AI-powered app generator. WASP uses a domain-specific language to tie together React, Prisma, and Node, handling boilerplate like authentication, RPC, and type safety so developers can focus on business logic. The conversation explores why they chose a language-based approach — aiming for a declarative, technology-agnostic way to describe web apps — and how they balance innovation with approachability, since the "language" label can intimidate developers. The bulk of the episode centers on their GPT web app generator, which takes a plain-text description and produces a working full-stack codebase. The team explains how they use GPT-4 for high-level planning and GPT-3.5 for grunt work, keeping per-app generation costs to roughly ten to twenty cents. They walk through a live demo generating a plant-watering tracker app, revealing the prompt engineering behind it, including feeding GPT a markdown-formatted explanation of WASP itself. The demo surfaces a small hallucination bug — a missing function definition — illustrating both the power and limitations of AI code generation. The episode wraps with discussion of future improvements like in-browser iteration, preview options, and potential fine-tuning with open models like Llama.
Chapters
00:00:00 - Introductions and What Is WASP
Scott and Anthony welcome twin brothers Matija and Martin Sosic to JavaScript Jam. The pair introduce WASP, their full-stack web framework built around React, Prisma, and Node, explaining that it includes a domain-specific language designed to simplify common tasks like authentication, RPC, and email support. Martin shares his background, including internships at Google and Palantir where he was among the first to work with AngularJS.
The conversation touches on how the "language" aspect of WASP can scare developers away, drawing a parallel to how GraphQL intimidates some Redwood users. The brothers clarify that WASP feels like a regular framework in practice and that the DSL is a small, declarative layer rather than a full programming language. Anthony and the guests discuss how specific architectural choices can be misunderstood when people project past negative experiences onto new tools.
00:05:02 - Why a Language? The Design Philosophy Behind WASP
Matija explains that the motivation for a language-based approach came from repeatedly rebuilding apps as frontend technologies shifted from Backbone to Angular to React. They wanted a declarative, technology-agnostic way to express business requirements so that the underlying stack could change without rewriting everything. Martin adds that describing the high-level structure of a web app doesn't require a Turing-complete language — something simpler and purpose-built is more appropriate.
The name WASP itself is revealed to be an acronym for Web Application Specification Language, reflecting the original vision that building a typical web app should feel more like writing a specification than wiring up low-level framework details. The hosts and guests joke about where this acronym lives in the docs and reminisce about the project's earliest commits, which were originally written in C before switching to Haskell.
00:08:50 - Introducing the GPT Web App Generator
Anthony steers the conversation toward WASP's AI-powered app generator, which lets users describe a web app in plain text and receive a complete full-stack codebase. Matija explains how this differs from tools like SmolAI or GPT Engineer — it's specifically tailored for web apps, runs from a polished web UI rather than a terminal, and generated nearly five thousand apps in its first week. The discussion addresses whether those numbers are real engagement or bot traffic.
Martin breaks down the cost efficiency: because the generator is purpose-built for WASP apps, it can use GPT-4 only for the planning phase and delegate the bulk of code generation to GPT-3.5, keeping costs between ten and twenty cents per app compared to one to two dollars with general-purpose tools. The specificity of the use case — knowing exactly what kind of output is expected — allows for targeted error correction and fewer iteration cycles.
00:14:27 - Temperature, Prompts, and How the Generator Works
The group examines the generator's UI settings, particularly the creativity level slider, which maps to GPT's temperature parameter. Martin and Anthony explain temperature to the audience: lower values produce more deterministic output while higher values introduce more variation and potential hallucinations. They note that above 1.5, GPT can start outputting in random languages or producing nonsensical results.
Anthony shares his screen showing the generator interface with its templates and settings. After a brief outage on Fly.io forces them to switch to Martin's local setup, they dig into the actual prompts being sent to OpenAI's API. The prompt structure uses markdown formatting, starts by telling GPT it is an expert WASP developer, then provides a condensed explanation of the WASP framework before instructing it to generate the app — essentially giving GPT the WASP pitch and then asking it to produce code that matches.
00:24:20 - Live Demo: Generating and Running a Plant Watering App
Martin kicks off the generation process for "My Plants," a plant-watering schedule tracker. The logs show GPT-4 creating a high-level plan — identifying queries, actions, data models, and pages — before GPT-3.5 takes over to generate each component. The team explains how built-in heuristics catch common GPT mistakes like incorrect import paths, automatically fixing them before delivering the final output.
After generation completes, Martin downloads the app, runs a Prisma migration with SQLite, and launches it locally. The app boots with a login page powered by Passport, and they successfully create a user, add plants, and explore the interface. A small bug surfaces: the water-plant button doesn't work because GPT forgot to define a handler function — a classic hallucination where the code references something that was never written.
00:35:49 - Debugging, Future Plans, and Closing Thoughts
The team inspects the generated code in an editor, tracing the missing function to a simple omission rather than a conceptual error. They discuss how GPT-4 reduces these mistakes but at ten times the cost and speed, reinforcing the value of the mixed-model approach. Scott suggests pasting the broken code back into ChatGPT to fix it, highlighting the iterative potential of AI-assisted development.
Looking ahead, Matija and Martin outline plans for in-browser interactivity, preview options via Gitpod or Replit, and iterative prompting so users can refine generated apps without downloading them first. They also mention exploring Llama for fine-tuning and cost reduction. On the WASP framework side, they tease upcoming full-stack TypeScript type safety, improved LSP support, and a major restructuring to make WASP projects feel more like standard JavaScript npm packages. The episode closes with invitations to follow WASP on Twitter, join their Discord, and star the project on GitHub.
Transcript
00:00:04 - Scott Steinlage
We're live. What's up Everybody? Welcome to JavaScript Jam. As y' all know, I'm Scott,
00:00:12 - Martin Sosic
co
00:00:12 - Scott Steinlage
host here at JavaScript Jam, technical community manager at Edgeo and Anthony.
00:00:18 - Anthony Campolo
Hello, my name is Anthony Campolo. I am a developer advocate at edgeo and we have two exciting guests for you from wasp. Thank you, thanks for joining us guys. Introduce yourself.
Hello, my name is Anthony Campolo. I am a developer advocate at edgeo, and we have two exciting guests for you from wasp. Thanks for joining us, guys. Introduce yourselves.
00:00:30 - Matija Sosic
Hi Anthony and Scott. Yeah, super excited to be here. I was actually on one podcast with you before, Anthony, but I also brought my twin brother and my co-founder, Martin. Super shortly about us, and then Martin can also say a couple of words. About two and a half years ago, we started making our own web framework, which is called wasp. It has a bit of a fun twist, which is that it is actually a language, but it is not like a full language like JavaScript or C. It is a domain-specific language. So something more like Terraform, or at this stage it's like a smart and nice JSON, which basically ties together React, Prisma, and Node, and makes it super easy to get all the boring stuff out of the way like auth, RPC, email support, type safety, and similar things. So we just kind of want to make it super, super, super easy to develop full-stack web apps with React and Node. And yeah, one of the cool things that we did lately was kind of plug in the AI part to the story.
00:01:29 - Matija Sosic
So we developed our own GPT coding agent that uses wasp, React, and Node, and now we are getting close to 10k applications generated in about a month. So that was quite fun and got us a lot of new users. I think that's going to be something fun to cover. And super shortly about Martin and me before we go on, we are both kind of studying computer science, and we worked at multiple startups and bigger companies. For example, Martin was at Google and Palantir before we started doing our own stuff. So that combination of projects we did before and that work motivated us to start thinking about how we can make web development simpler. I think we are all kind of familiar with the issue here.
00:02:11 - Anthony Campolo
Yeah, you said you worked at Palantir, Martin?
00:02:15 - Martin Sosic
I was doing internships in both companies. I also got a full-time offer at Palantir, I remember, but it was still during college, and I wasn't ready to jump out of college. But an interesting point: at Palantir, I was one of the first people doing Angular, Angular 1, AngularJS. Exactly. Actually, my internship was to move the app from Java to Backbone, and then in the middle of it they were like, oh, now there is Angular, so let's try Angular. And then I was kind of doing it, like discovering Angular. It was super fun. And it's weird now to look at it because it sounds very old.
00:02:53 - Anthony Campolo
Yeah, it's one of those companies that I always, like, hear about in, like, Silicon Valley lore. And, like, a lot of people have, like, kind of different opinions about it, but it's not like it was like a company that had very legit, like, technical chops, is the sense I always got.
00:03:07 - Martin Sosic
Oh, yeah, yeah, yeah, exactly. Oh, by the way, I wanted to say, Scott, loved your sound effects at the beginning. I just wanted to quickly add to what Matija said. I mean, we kind of had the same biography, so not much to add on my side, but what Matija said about WASP is basically, it's a full-stack framework for JavaScript, so that's about it. It has superpowers due to it being a configuration language on the side, but you don't need to know much about it. It's kind of like you realize at some point, oh, one part of it is a language, but the rest is really, I would say, more like Ruby on Rails for JavaScript.
00:03:40 - Matija Sosic
Yeah, it feels like using a regular framework, you know, with some stuff made easier.
00:03:44 - Martin Sosic
Yeah, I mean, I'm saying this because we realized some people get scared when we say it's a language and they don't really even need to know its language. So then it's more of a.
00:03:53 - Anthony Campolo
It's much more a framework than a language. It's a framework that has a specific language for a specific part of it.
00:03:59 - Martin Sosic
Exactly. Oh, yeah, Anthony, you would know. Exactly.
00:04:02 - Matija Sosic
So developers, don't get scared. Don't get scared of the lang part. We'll kick that out probably at some point. So just come to us.
00:04:09 - Anthony Campolo
That's really funny, actually, because you guys know that I work on Redwood, which is another full stack JavaScript React kind of framework. And there's like, in both cases, people get scared by GraphQL with us, and then people get scared by the language idea with you guys. And with both of them, it's like, no, those are like specific architectural choices that were made to make the larger thing easier. So it's like they get hung up on previous DSLs they've used or previous GraphQL projects they've been in, and they're like, okay, that previous thing I Did was really hard. That must mean this current thing is going to be really hard too. And it's like, well, no, because like we're using it in a different way than you were using it. We're doing it for a different purpose. And so there's probably a lot more thought put into it. Like you, you, you obviously like put a lot of thought into how the language fits into the larger framework. I'm sure. So what was the decision to build a language instead of just using a JSON blob?
00:05:02 - Martin Sosic
Exactly.
00:05:02 - Matija Sosic
Yeah. I think one of the big motivations, especially for us, our experience, was we had to rewrite. I mean we had to develop several bigger apps, let's say one or two years distance. And every time there was a new thing coming out. First it was backbone and then Angular and then the next thing was React and first we use Java for the backend and use node and similar. We just felt like every time there is a new technology and way, way before we use php, so we even use that.
00:05:32 - Martin Sosic
There was also just jQuery somewhere in the middle. I mean, solid.
00:05:36 - Matija Sosic
We just felt like there should be kind of abstract way which does not depend on specific language or technology for you to express your business requirements, at least to some extent.
00:05:46 - Martin Sosic
At least the basic ones, at least
00:05:47 - Matija Sosic
the basics, some CRUD stuff. Data models and similar things.
00:05:50 - Martin Sosic
So.
00:05:50 - Matija Sosic
So that's why we opted for language approach, kind of to be more technology agnostic, plus to get rid of some of the usual boilerplate you get with library calls and similar.
00:06:00 - Martin Sosic
Yeah, I think that the main idea was that to describe the high level of your app, you don't really need a Turing-complete language. You need something simple, right? Kind of like CSS and HTML. They're doing their job.
00:06:15 - Matija Sosic
Something declarative.
00:06:15 - Martin Sosic
Yes, the idea was to have something declarative and really made for that task of describing the web app. So I think you can maybe still find in our GitHub repo, or in older commits in the README, that we say WASP is a language that understands what an app is, what authentication is, what a page is, and stuff like that. So if you have that baked into the language and all these things kind of understand each other, then the idea was, yeah, we can have a very nice way to express stuff without being directly dependent on the underlying technology. So I don't know, maybe you could use it with React, you could use it with Vue, Svelte, who knows, right? I mean right now it's just React because we need to get something to 1.0, but in the future the idea is to have multiple frontend and backend technologies.
00:07:06 - Matija Sosic
Yeah. Even the name WASP comes from that. WASP means Web Application Specification Language. Actually, the whole idea was that writing a typical web application should be more similar to writing out the specification in human language than going deep into all the properties, React Hook Form, or whatever.
00:07:26 - Anthony Campolo
That's funny. Is that in the docs anywhere that that's actually an acronym or originally was an acronym. I don't know if I've ever heard that before.
00:07:33 - Martin Sosic
That's a good point. It was.
00:07:34 - Anthony Campolo
That's just a hidden secret.
00:07:36 - Matija Sosic
Kinda. Kinda.
00:07:37 - Martin Sosic
It was a part of a landing page before. I think it was flushed out from the landing page. I think you can find it somewhere in the docs. But now we also have the new
00:07:44 - Matija Sosic
docs, but it's mostly restructuring.
00:07:47 - Scott Steinlage
Yeah.
00:07:47 - Martin Sosic
So potentially somewhere in the docs.
00:07:50 - Anthony Campolo
One thing that I like to do is go back to the very first commit on a very old and well-starred GitHub repo and look at what it looks like. So I would be able to find it if I went through the history.
00:08:02 - Matija Sosic
Yeah, I give it a look.
00:08:03 - Martin Sosic
I think the first commit might even be C.
00:08:08 - Matija Sosic
I managed to get Martin out of using C. Yeah, silly idea. I mean, you opted for Haskell, but still now.
00:08:16 - Martin Sosic
Much better, Much better.
00:08:17 - Matija Sosic
You know, but I think, you know, it's always this duality kind of between trying to, you know, impress people with your cool language approach and how it's going to be abstract and support multiple stuff. And then on the other side you want to be as simple and as familiar to them as possible. So, you know, that's kind of why we flushed out some of the language stuff from the beginning, because it was kind of sounding scary and let's say a bit too innovative. So I think the main ideas are still all there. It is just a matter of how and when do we present them. So that is something that we are daily kind of discovering.
00:08:50 - Anthony Campolo
Awesome. Yeah. So let's talk a little bit about your GPT web app generator project. This is really cool because AI is something that is coming up a lot in a lot of different places for a lot of different reasons, a lot of different use cases. And usually what I see is there's of course things like Copilot, like I think Copilot, you know, came way before GPT and developers kind of got a taste of this before the general public really, because they're already using Copilot, which had GPT embedded within it. So you could actually use Copilot to have a conversation like you would with ChatGPT. If you did all like comments, like you're a comment and then a comment responding to a comment. You create a chatbot like within your editor. It was like a very, very strange experience, you know. But then when ChatGPT came out, you had like a nicer interface, but people realized you can feed ChatGPT code and it would give you code back and they can understand code. And it was like code literate, which is a really incredible thing. Then people started creating companies that kind of integrate it and what you've done.
00:09:55 - Anthony Campolo
I'm sure other people have done this, but I haven't really seen it much. It asks it to write you a project, so not just pieces of code but like an entire project. Is that right, this web app generator? So that's kind of my idea from the title.
00:10:09 - Matija Sosic
You know, I mentioned we tried a couple of similar coding agent tools, like SmolAI. We were playing with it. Somebody was trying GPT Engineer and similar tools. I think maybe the main difference is that we made the WASP AI, or GPT generator, specifically for developing full-stack web apps. One other big difference is that you could run it from the UI. So it is actually a nicely designed web page with a simple form. You just say what kind of app you want and you get it out. All the other tools I saw, you had to run them in your terminal and type everything in and see the changes locally. It was a bit more cumbersome to use, and I guess you needed a bit more technical prowess to use it successfully. So we had a lot of applications built. I think in the first week it was almost 5k applications.
00:11:01 - Anthony Campolo
Don't you have to worry though, because you could just generate it. So it's like, what if that was just like a thousand bots? Were you actually seeing people tweeting these things? You know, there's people building things that they're actually using in some sense, right?
00:11:15 - Martin Sosic
Yep.
00:11:15 - Matija Sosic
I mean, another point actually Martin can tell more about this is, you know, the price also, you know, when we compared like, you know, using small AI for generation of an app versus doing it wasp, it was a huge difference. So I think, you know, the numbers roughly Martin, Sure.
00:11:28 - Martin Sosic
No, I mean just on the topic of the, of the.
00:11:30 - Anthony Campolo
So real quick, so you're saying that there's a cost. Is that because you're using the API, the OpenAI's API, it will cost more depending on how big your app is?
00:11:41 - Martin Sosic
Yeah, sure. I mean to. Sorry, they're answering, I guess you're answering two questions at the moment. So I got Jen. So basically on one hand, yeah, there is the. So we are using directly OpenAI API chatgpt. So we have their rate limits and we have their costs. I think what Matthia was mentioning is that actually our magic app generator is less expensive to generate the whole app than, you know, maybe some other solutions out there like Small AI or GPT Engineer, which is mostly because it's so well tailored for the use case is doing. I mean, basically the main thing about our magic app generator, I'll just call it Generator from now on. The main thing for our generator is that it's tailored exactly for building web apps. It was. Right. So it's a trade off in the sense that you are less flexible. You can produce any kind of software like I don't know, Chrome extensions or maybe. Yeah, it's not good for video games in Unity or you know, it can't even produce a web app that's using next. But it's, it's very good in producing web apps using WASP and it. And actually compared to other tools, it will give better, more rounded, full working web app from the first shot actually, while in other tools you're kind of, you know, you get something then you iterate multiple times and it's still, it's still not there.
00:13:01 - Martin Sosic
But as I said, it's, it's a, it's a trade off.
00:13:04 - Matija Sosic
I mean the main kind of trick, you know, let's say, which Martin said, you know, it's. So it's so tailored for the use case of web apps is basically, you know, we could use GPT4 for the more complex stuff, you know, like design the plan for your application, you know, figure out what you need to generate. But then we could use GPT 3.5 for the majority of the grunt work. And you know, that's what made it so cost effective, I think in the end, you know, like, I mean, the
00:13:27 - Martin Sosic
other tools are also using something similar. They do get best performance with GPT4 or anthropic or something. But we also have all these iterations because it takes less for us to get to something that works.
00:13:42 - Anthony Campolo
Scott, can you pull up my screen so we can Start looking at this while we're talking.
00:13:46 - Scott Steinlage
Absolutely. I was waiting.
00:13:48 - Martin Sosic
Cool.
00:13:50 - Anthony Campolo
This is magic.app.generator. was lang.dev exactly. First, let's find you a domain right now.
00:14:02 - Martin Sosic
We had some lengthy discussions about the domain name and we ended up with lengthy domain name, I guess.
00:14:07 - Anthony Campolo
Okay, so this should be WASP GPT. Yeah, that's what this should be.
00:14:17 - Martin Sosic
I think I was pushing for Wasp AI. Right. Okay.
00:14:19 - Scott Steinlage
Yeah.
00:14:20 - Anthony Campolo
Wasp AI. Even. Even shorter. You want. You want Wasp, Wasp AI. That's. That's what you want.
00:14:27 - Matija Sosic
Like 20K probably.
00:14:29 - Scott Steinlage
Probably,
00:14:31 - Anthony Campolo
yeah. Okay, so GPT web app generator. So I was looking at this and you have a way to generate one. You also have some templates. I'm going to start with a template and then we can kind of generate more from there because I want to see what it is like just doing this. So you have an app name description, app brand, color. So let's talk about this. What does creativity level mean? I think this is probably based around temperature.
00:14:55 - Scott Steinlage
Right? That's what I was thinking too.
00:14:57 - Martin Sosic
Yeah. Basically it's adjusting temperature. We are using two different temperatures, one for fixing the cold, one for producing.
00:15:03 - Anthony Campolo
So let's explain. We all know what temperature is, so. Good. Let's explain what temperature is to the audience.
00:15:11 - Martin Sosic
Sure, that's a good point. Do you want me to take that?
00:15:15 - Anthony Campolo
Sure, go for it. Yeah.
00:15:17 - Martin Sosic
I mean, temperature is basically just a parameter for GPT, you know, telling it how creative to be. The higher it is, the more crazy it gets, though.
00:15:24 - Scott Steinlage
So he starts hallucinations.
00:15:27 - Anthony Campolo
So that's. This is true, but also I feel like describing it that way, it will be confusing to people because turning up or down creativity, like that's a very abstract concept was what. So what it's doing and why we say that is because it turns up or down how unique its response is, in the sense that if you turn it really low, it's going to give a response that's more similar to what is already in the data and in the responses. Whereas as you turn it up, it will generate newer, stranger, more abstract, more creative things that are not present in the original data set.
00:16:05 - Martin Sosic
Sure.
00:16:06 - Scott Steinlage
Right. And the original data set is what you're feeding it here and also what's in the back of your agent, you know, and all that creation.
00:16:13 - Martin Sosic
Right. So makes sense.
00:16:16 - Anthony Campolo
And so it also makes it more likely to create hallucinations, which then can be a problem because that's what it's doing. Doing things that don't actually correlate with the code itself or the real world.
00:16:26 - Martin Sosic
Yeah, exactly. I Mean you can't really avoid them anyway. Like you will get them for sure.
00:16:30 - Scott Steinlage
So what's your highest temperature on. On these levels here on creativity level? From 0 to 1 obviously is the temperature.
00:16:36 - Anthony Campolo
So what do you.
00:16:36 - Martin Sosic
Yeah, actually now it's zero to two.
00:16:38 - Scott Steinlage
Oh, did they change it?
00:16:39 - Martin Sosic
Okay, yeah, I think they changed it change it at some point. I know now it's because I also remember it being from 0 to 1 before. I think now it's certainly 0 to 2. Recommended default is 0.7 from them. So we are also using that to generate.
00:16:51 - Anthony Campolo
Yeah, I'll be 0.8 for summarization. So yeah, that sounds about right to me.
00:16:56 - Martin Sosic
Yeah, so we use 0.7 for the balanced approach there. But if you go for creative, I think it's 1.2 and the conservative one. Core conventional
00:17:07 - Anthony Campolo
OpenAI needs better docs on this. This is their entire response for how to set the temperature parameter.
00:17:13 - Scott Steinlage
Yeah, this should be like a page. Honestly.
00:17:16 - Anthony Campolo
Lower values for temperature result in more consistent outputs while higher values generate more diverse and creative results. See their, their explanation. I have the same critique with them as your guys. Like the temperature value based on the desired trade off between coherence and creativity.
00:17:32 - Martin Sosic
Yeah, I mean I think a technical level basically comes down to, you know, because each. Each time you have a GPT do a prediction, it basically chooses a bunch of words and then picks the one with the highest probability. Right.
00:17:45 - Anthony Campolo
I like this. Setting it to zero makes it mostly deterministic.
00:17:50 - Martin Sosic
Yeah, exactly. So basically to choose the one with the highest probability. But I think if you give higher temperature then it kind of goes, you know, like okay, I will choose a different thing this time and you get fun stuff. I know above 1.5 I used to get like, I don't know output in French assembly. It would quote some pieces.
00:18:08 - Anthony Campolo
It really wants to express itself in the lingua franca. It's. It demands.
00:18:14 - Martin Sosic
Becomes like a modern, modern art, you know. By the way, I would recommend for the demo maybe going with one of other two examples to do or my
00:18:25 - Anthony Campolo
plans just because I want to make a block.
00:18:32 - Martin Sosic
Let's do my plans just because it will be easier to get it to work. It will do less mistakes.
00:18:38 - Anthony Campolo
This is you to do. You can't go wrong to do but you're embarrassed to do GPT.
00:18:44 - Martin Sosic
My plan is also.
00:18:45 - Matija Sosic
Yeah, 2 DF is boring. My plans boring.
00:18:57 - Anthony Campolo
So I'm going to choose to do conventional because I wanted this to not break. Since you're doing it, is that a good trade off?
00:19:04 - Martin Sosic
It's a good choice. Yeah, yeah, yeah.
00:19:07 - Anthony Campolo
Thank you.
00:19:09 - Matija Sosic
I mean, even if it breaks, it's not. It's not a big deal.
00:19:12 - Anthony Campolo
Okay, so. And then.
00:19:16 - Matija Sosic
Yeah, it's just a clickbait.
00:19:17 - Martin Sosic
Yeah. It is a promise of future. Yeah.
00:19:23 - Anthony Campolo
I'm clicking Generate app. Nothing's happening.
00:19:25 - Matija Sosic
Oh, let's see what's happening. You press generate. It's not starting. Okay, wait, so let's wait.
00:19:31 - Anthony Campolo
Refresh.
00:19:32 - Martin Sosic
No, it usually starts immediately, so I'm actually surprised it's not yet working. I'm sure you clicked it, right.
00:19:41 - Matija Sosic
Yeah, it said start. It says starting.
00:19:43 - Martin Sosic
You know what? We actually had the outage, the thing crash. I saw it crash yesterday.
00:19:49 - Anthony Campolo
Shouldn't done that.
00:19:51 - Martin Sosic
No. Fly was good to us so far. Is it possible it actually created [unclear] right on our side?
00:19:57 - Matija Sosic
Yeah. Let me try.
00:19:58 - Anthony Campolo
If you're running this thing in a Docker container on Fly, then you never know. Fly is great. I'm a big fan of the Fly team. I actually know them personally, and they're great dudes, and they have network challenges that they're very transparent about.
00:20:13 - Martin Sosic
Yeah, I think they just have a great influx of users and, you know, it's.
00:20:18 - Anthony Campolo
Yeah, no, they're great. Yeah, exactly. It's a great service. So it's like. It has issues. So many people are using it, so that's good for them.
00:20:25 - Martin Sosic
But amazingly, it's actually down. Yeah, of course. Typical demo, right?
00:20:34 - Anthony Campolo
That is too funny. Can I spin it up locally and. Right.
00:20:38 - Matija Sosic
We can also share some of the runs that we run before, so you can easily check it out. I think that's actually.
00:20:44 - Anthony Campolo
So let's do this. Let's do this. Let's look at the code.
00:20:47 - Martin Sosic
I can't believe it's not worked. Yeah.
00:20:50 - Matija Sosic
Wait, I also have something to show it. I would just share the link with
00:20:53 - Anthony Campolo
you because we could literally run it in a Docker container on my own computer. This should be possible.
00:21:01 - Martin Sosic
It could run locally. It's just that you will need to set up a couple of variables, I think. You also need to connect.
00:21:07 - Anthony Campolo
Do you guys want to do that on your computer?
00:21:11 - Matija Sosic
You could run it locally, maybe. Martin.
00:21:12 - Martin Sosic
Yeah, I was on vacation for two weeks and just came back today, so.
00:21:18 - Scott Steinlage
Welcome back.
00:21:20 - Anthony Campolo
Okay, let's take a pause point then. Right here. Sorry, we had some technical issues right there. We're restarting right here. This is now we're sharing with Martin. He's got GPT web app generator up and go ahead. And what app are you going to generate here?
00:21:37 - Martin Sosic
Sure, sure. Here it is. So we have some example apps here. It's easier to pick from these guys. By the way, these are like three levels of complexity for the app: the simplest one, intermediate complexity, and the blog is kind of a bit harder. Most people get it right, but it often gets a couple of small mistakes you need to fix manually. So let's maybe go with, I mean, each of them has potential for mistakes, but blog is the hardest. My Plans is maybe the best choice.
00:22:07 - Anthony Campolo
So it has a schedule.
00:22:09 - Martin Sosic
Exactly.
00:22:10 - Anthony Campolo
Does that mean there's going to be triggers at certain points in the future?
00:22:16 - Martin Sosic
Yeah, so sorry, you said what? Watering points in the future.
00:22:19 - Anthony Campolo
So I'm just saying, like when it says there's a schedule. So what does this app do?
00:22:24 - Martin Sosic
Right? Yeah, it came. It was inspired by, you know, situation in the office where basically, you know, I forgot to water the plants. So.
00:22:31 - Anthony Campolo
So to remind you on a schedule in the future, that's like what I'm getting at.
00:22:35 - Martin Sosic
Exactly. Exactly. Yeah, that's it. You will provide your plants. You say, this guy needs watering every couple of days and every four days. And you know, then every four days you can check the status of your plants and see, you know, when you water it last time and stuff like that.
00:22:49 - Anthony Campolo
Yeah, that sounds very useful. That sounds like an actual useful app.
00:22:54 - Martin Sosic
It's actually useful app. That's a good point. I mean, as you can see, explanation is it's not one sentence, but it's also not very technical. It's kind of like, hey, I want this. I want one page with this button and stuff like that.
00:23:07 - Anthony Campolo
So this has written a prompt for you?
00:23:10 - Martin Sosic
Yes. I mean, you could write your own
00:23:13 - Anthony Campolo
prompts, but what I'm saying is the description is the prompt.
00:23:19 - Martin Sosic
I see what you're getting at. Yeah. This will be part of the prompt for GPT.
00:23:23 - Anthony Campolo
So what is the prompt and are you able to see the prompt?
00:23:27 - Martin Sosic
I can actually, since I'm.
00:23:29 - Anthony Campolo
I want to see the prompt. Scott knows what a prompt is. The prompt is what you tell the oracle, what you tell the Oracle of Delphi: give me the answer to the universe.
00:23:42 - Martin Sosic
Right, Exactly.
00:23:45 - Matija Sosic
Maybe just zooming in.
00:23:46 - Martin Sosic
I'm just looking at this since I'm running it locally at the moment. I will actually be able to.
00:23:51 - Anthony Campolo
Yeah. Find the exact text. There'll be a text blob somewhere. Or this is being inserted in that text blob.
00:23:58 - Martin Sosic
Exactly. I will actually be able to probably show the prompt. Basically, what you're doing is based on this. We will make multiple prompts to our GPT and tell it to build, I don't know, page by page, make initial plan, build page by page and then at the end fix some stuff, wrap the whole thing up and there you have an app. So it will be like maybe 10 prompts, maybe I can just kick start it and then we can see the fast day.
00:24:20 - Anthony Campolo
Yeah. So generate. Let's see what happens.
00:24:23 - Martin Sosic
Sure. Let's do the generation part. Yeah. We are in the lobby and there we are. Magic starts.
00:24:33 - Anthony Campolo
So is this feeding you the fly output right now?
00:24:36 - Matija Sosic
Sorry, is this like what we're seeing
00:24:40 - Anthony Campolo
right now, is this the output from Fly or just something you're generating right now that's connected to where this is actually deployed?
00:24:50 - Martin Sosic
So I'm running this locally at the moment. So this is all local.
00:24:54 - Anthony Campolo
Right. So if this were connected, this separate. Like what is this output? Where it says generating plan. Like what, where is the plan generated usually?
00:25:03 - Martin Sosic
Sure. Basically generating plan means we are. We just asked GPT to give us a plan of what this app will look like and we are waiting a bit for it to respond. It actually, it actually takes it like, oh, there, there it goes.
00:25:16 - Matija Sosic
We could even check it out how it looks like.
00:25:17 - Martin Sosic
Yeah, we can even check it out in the, in the logs.
00:25:21 - Matija Sosic
It's moving fast.
00:25:22 - Anthony Campolo
There's like a CLI embedded that's like running these commands kind of.
00:25:27 - Martin Sosic
Kind of. Exactly. We're actually interacting directly with the, with the OpenAI API. Right. And you're asking GPT questions, you're getting answers.
00:25:34 - Anthony Campolo
So what is this editor looking set up? How is this generated? Is this just like a. Kind of like this is like an iframe basically.
00:25:42 - Martin Sosic
Yeah, this is actually some kind of. We code it manually. This is a cool library for displaying files as a tree. And here we are, we are just showing the files as we are generating them. It's all manual.
00:25:55 - Anthony Campolo
Interesting. Be curious if you'll be able to do this in the ultimate would be doing this in GitHub Actions and then you could just have it right in your GitHub and then use their dev kind of thing. That'd be epic.
00:26:09 - Martin Sosic
I think that's a possible alternative.
00:26:11 - Anthony Campolo
Or gitpod. I don't know if you ever looked at gitpod, but this would be a cool tool for that too.
00:26:15 - Martin Sosic
Exactly. I've even discussed, I know internally we discussed going with GitHub code spaces or replit or similar. Yeah, this is just a bit simpler for the end user.
00:26:24 - Matija Sosic
No, it could be a cool next step. This is more like. More just for seeing what's being generated live or Easily.
00:26:30 - Anthony Campolo
Yeah, so the idea is you wouldn't edit the app in this. This is just like a way to kind of visualize it and display it and look at it.
00:26:37 - Matija Sosic
Yeah, exactly.
00:26:38 - Martin Sosic
You can actually see what's being generated live here.
00:26:41 - Scott Steinlage
Did you guys. Did you guys index something that is. That it's referencing so that it can structure this more easily?
00:26:50 - Anthony Campolo
Or are you just like just throwing a straight prompt at GPT4 saying, Give me an app?
00:26:55 - Scott Steinlage
Yeah, that's a great question.
00:26:57 - Martin Sosic
Yeah, let me show you, maybe this kind of answers it. So basically, the important thing about GPT is it has no memory, right? So every conversation is a new conversation. Yeah, exactly, stateless. It doesn't look like that in ChatGPT UI, but actually in the background, it's always resending everything. So we are doing the same thing here. Maybe just zoom in a bit.
00:27:21 - Anthony Campolo
Yeah, zoom in on your. On your font. So this is. So this is just like a. What. What is this right now that we're looking at.
00:27:31 - Martin Sosic
Yeah, exactly.
00:27:33 - Anthony Campolo
And you're. It's still. It's. And also you don't have syntax highlighting or anything.
00:27:37 - Matija Sosic
It's not terminal. But let's.
00:27:39 - Martin Sosic
I'm just looking how to quickly zoom in so you guys can have a nicer. Yeah, I'll do this. I know there is a nicer way to do it, but this is the fast.
00:27:48 - Anthony Campolo
But like, if you're actually working on this yourself, you would do this without syntax highlighting. Like how. Like this is markdown, isn't it? Just get some markdown syntax highlighting.
00:27:58 - Martin Sosic
I think I get.
00:27:59 - Matija Sosic
I mean, this is not an editor. This is like purely what we are getting.
00:28:02 - Scott Steinlage
Yeah, this is the return from the server.
00:28:04 - Anthony Campolo
It's really returning your whole thing right now. So it's just giving you this whole fat markdown file.
00:28:10 - Martin Sosic
Right.
00:28:11 - Anthony Campolo
What are we looking at right now?
00:28:14 - Martin Sosic
What you're looking at is basically the. So the app I'm running, the WASP AI app, you know, it's communicating with GPT asking it prompts and so on. And while doing that, it's basically printing what is doing. So this is actually the vp.
00:28:25 - Anthony Campolo
So this is. So these are logs. This is like the logs of what
00:28:28 - Martin Sosic
you're doing, which is exactly. Logs. You just said this. So these are logs from the.
00:28:35 - Anthony Campolo
Yeah, sorry, I missed that. My bad.
00:28:38 - Martin Sosic
Probably. I didn't emphasize. So. So these are logs from the WASP app. WASP AI app, Magic Generator. This is server basically telling us stuff and they're saying Stuff like, you know, as quickly it's saying, you know, it's just us, GPT, it sent it a message.
00:28:53 - Matija Sosic
I think this shared message is way.
00:28:54 - Anthony Campolo
So you're also, it looks like you're using ChatGPT 3.5.
00:28:57 - Scott Steinlage
Yeah.
00:28:57 - Anthony Campolo
And not four.
00:28:59 - Martin Sosic
Yeah.
00:29:00 - Scott Steinlage
Conventional is 0.5.
00:29:01 - Martin Sosic
It looks like we're using both. So basically we are using four for the first step, which is making a plan for the no support. Explain the whole web. It's like, okay, it will have three pages. It will have, I don't know, two entities, like data models. Right. It will have these functions, these RPC methods and so on. Once that plan is generated, you can
00:29:17 - Matija Sosic
actually see the logs in there.
00:29:19 - Martin Sosic
You can actually see the plan here. So this is the plan. Look, it says, okay, I only have one query. Get user plans, two actions. Create plan. Water, plant. Yeah. Okay, we have user plant and you know, two pages at the end. So cool. We have a high level overview and then it goes about, you know, building each of those. It's like creating this action, that action and that's. Yeah. And this all is 3.5. This step is GPT4.
00:29:48 - Anthony Campolo
Interesting. Okay, so because you want the first one that generates the initial structure to be smarter and then the details aren't as important.
00:29:57 - Martin Sosic
Right, Exactly. I mean we tested, we tested with both, of course, using GPT4 and everything gives some better results.
00:30:02 - Anthony Campolo
But have you tried Claude?
00:30:06 - Martin Sosic
No, I read about Claude. I think so.
00:30:10 - Anthony Campolo
Claude is public now. Claude was not public until a couple weeks ago. I would recommend looking into it.
00:30:16 - Martin Sosic
The thing is, Claude is using 100k context. That's cool. But I don't think it's smarter than GPT 3.5.
00:30:23 - Anthony Campolo
And to be definitely smarter, if it's as smart as that is better.
00:30:27 - Martin Sosic
Yeah, yeah. But for example, at the end, the problem we had wasn't really context. It was like, I mean, I would
00:30:34 - Anthony Campolo
say with a giant app, context isn't a problem. That kind of surprises me.
00:30:38 - Martin Sosic
Because GPT 3.5.
00:30:39 - Anthony Campolo
Because your apps are small.
00:30:41 - Martin Sosic
Yeah, they're small. But you know, even with those small apps, you still like 16k context was a new thing when we were doing this. It's a lot for the smaller apps. And still, Even at that GPT 3.5 starts being silly. Right.
00:30:55 - Anthony Campolo
So it's just, it's just not as far. It's just kind of dumb.
00:30:58 - Martin Sosic
Exactly. Which I think CLAUDE is great for, I don't know, summarizing huge documents or something like that. Right. But for this you need both big context and it needs to Be smart enough to be able to work with such a big context, and it just can't. So even 16k was too. Too much for us.
00:31:15 - Anthony Campolo
Interesting.
00:31:16 - Martin Sosic
Yeah. So, yeah, super short. That's about it. You know, by the way, the important thing is that GPT4 is much slower and much more expensive 10 times. So, you know, this balance of. It gives a nice, Nice experience, I think.
00:31:29 - Anthony Campolo
Yeah, you want to split the difference between the two because that allows you to have margins, essentially.
00:31:36 - Martin Sosic
Sorry, the margins like margins.
00:31:38 - Anthony Campolo
It allows you to cost. Like you can kind of decide, okay, we want this part of the app to be cheaper and this part should be more expensive because if you just do the whole app on the most expensive thing, you're always doing the most expensive thing. Whereas if you have some sort of way to separate the smart part from the less smart part, the less smart part, you can kind of increase and make it more of the process and make it cheaper. If you want any point by switching to a different model, you want that.
00:32:03 - Martin Sosic
Exactly.
00:32:05 - Anthony Campolo
Being smart, then you're a person who made decisions. They ain't paying money to a thing. So AI hasn't taken your job, which is also great.
00:32:13 - Martin Sosic
Right? So, yeah, that's very.
00:32:15 - Scott Steinlage
Lots of benefits.
00:32:15 - Matija Sosic
I think we kind of measured. I think, like a single app is about 0.$1, right?
00:32:20 - Martin Sosic
Yeah, single, single typical app is 0.1 to 0.2.
00:32:24 - Matija Sosic
So like 20 cents.
00:32:25 - Anthony Campolo
0.1 dollars. So 10 cents.
00:32:28 - Martin Sosic
Yeah, sorry, 10 to 20.
00:32:30 - Scott Steinlage
10 to 20.
00:32:31 - Matija Sosic
Yeah. And I think we tried small AI and similar. It was more like, you know, like $1 or $2 to generate the.
00:32:37 - Anthony Campolo
Interesting. Okay. Yeah. So how do we get that 2 ascent?
00:32:48 - Scott Steinlage
Anthony's always pushing the envelope for sure.
00:32:51 - Martin Sosic
I actually might have an answer for that. An interesting step would be using, I think, Llama, right?
00:32:58 - Anthony Campolo
Llama, Right, Exactly. You run the model yourself and then you have the model. So then you're not running a model that costs money every time you run the model.
00:33:06 - Martin Sosic
That's one very big advantage. The second advantage is that with Llama, we could, if we have our own, we could actually do some additional training like fine tuning or what is the name? Right. To teach it about wasp so we don't have to repeat it in every prompt. We can reduce the number of tokens. So that could be quite a big improvement.
00:33:26 - Scott Steinlage
Yeah, you could index a lot of things for WASP in there.
00:33:29 - Anthony Campolo
So let's take this app. Could we actually run this app that you've generated?
00:33:33 - Martin Sosic
Exactly.
00:33:34 - Matija Sosic
Yeah. I just thought you could go to the logs quickly and just so how you're trying multiple times to actually fixing some errors and stuff. I think that is.
00:33:40 - Martin Sosic
You mean these logs, right?
00:33:41 - Matija Sosic
Yeah, these logs. So what's happening here? You know, we kind of try to encounter. Because we know that GPT might make some mistakes. So you know, we detect it several times before actually giving you the output and retry some of the things we know failed. So, you know, this is kind of how we, let's say, diminish the number of mistakes in the. In the final app.
00:34:00 - Martin Sosic
Yeah. It is the reason why, you know, the generator is able to get very close to something fully working or almost working in, in one shot. Right. Because, for example, it's, you know, it's a resistance to generator returning to GPT returning email address. And you also try to fix stuff. You know, we know, we know mistakes that are often done by GPT and then we just kind of tell it to fix it or we fix them manually. I mean manually with heuristics. Right. So we have these additional fixing steps. But I mean you get. We get this because we know what we are building. We know we are building a web app. So that is that additional kind of power you get with this angle.
00:34:37 - Matija Sosic
Yeah, I think it was like mostly messing up some imports. Like it would import like relative path instead of episode path or just like default import versus specific import and similar.
00:34:46 - Martin Sosic
Yeah, yeah. You can see imports in page pages. Fixed. Yeah, I mean GPT is great, but some things like you can tell it 10 times to not do something, it will still do it. So it's amazing in that regard. Yeah.
00:35:02 - Anthony Campolo
I heard one person describe it as like ChatGPT is like a very stupid grad student.
00:35:11 - Martin Sosic
Yeah, it's like, I would say it's like a genius small cube.
00:35:18 - Matija Sosic
That's good.
00:35:19 - Martin Sosic
Doesn't care about some stuff. You tell it right. So that's.
00:35:22 - Scott Steinlage
I like that better.
00:35:23 - Matija Sosic
It knows all the effects, but doesn't care about what you want.
00:35:28 - Scott Steinlage
This is what I want. Yeah, I want.
00:35:31 - Martin Sosic
I want. I want. It's also getting smarter every day as kids are. So that's true.
00:35:36 - Matija Sosic
Getting more evil.
00:35:38 - Anthony Campolo
Sucking all of our brains out of the technosphere. Taking our thoughts and becoming. Becoming the new consciousness. Fascinating.
00:35:49 - Matija Sosic
That's going to work. Finally. We are waiting for that. Yeah.
00:35:52 - Martin Sosic
Okay, cool.
00:35:53 - Matija Sosic
Shall we try to run it locally?
00:35:55 - Martin Sosic
Yeah, sure. Just to show quickly. So basically you can see the whole thing here already tailwind.
00:36:01 - Anthony Campolo
So good job.
00:36:02 - Martin Sosic
It's using tailwind. Exactly. We told it in the prompt. We tell it, you know, use tailwind. Right. Yeah, of course.
00:36:08 - Scott Steinlage
Otherwise it would Use whatever stack it wanted to.
00:36:11 - Martin Sosic
Exactly. Which we don't want. Right? Yeah. So you can see the whole code here. You know, it actually generated this get user plane stick thing.
00:36:18 - Matija Sosic
It's.
00:36:18 - Martin Sosic
It has, you know, something to water the plants and it has something to create a plant.
00:36:24 - Anthony Campolo
Question, question, question. React server components or no.
00:36:28 - Scott Steinlage
Oh boy. This could go into 30 minute conversation.
00:36:31 - Martin Sosic
Yeah, it'll be short because we don't have them yet in vos. So. Yeah, that's it. I think we are exploring them. They will probably kind of joining WASP at some point.
00:36:42 - Anthony Campolo
I was like, could you tell ChatGPT or tell the model to generate one with REACT server components?
00:36:49 - Martin Sosic
I could tell you to do it, but it's building this app in WASP and WASP doesn't support it.
00:36:55 - Anthony Campolo
Okay, but is it WASPS using REACT to. How can it not support it?
00:37:02 - Martin Sosic
That's a good point. But WASP is kind of a wrapper around react, so you know, it's so.
00:37:08 - Anthony Campolo
Because the way you have it set up work hooks into the server and the database. You're not using REACT server components.
00:37:14 - Martin Sosic
The actual front end right now is like an spa. So it's not.
00:37:19 - Matija Sosic
Yeah. I think it's similar to how Redwood introduced server components recently. We have to do the same work to support it.
00:37:27 - Martin Sosic
Yeah, it's not terrible. It's not terrible amount of work. It's just we need to do it properly.
00:37:30 - Matija Sosic
So we are waiting for others to kind of find the optimal way of doing it.
00:37:35 - Anthony Campolo
I was waiting for next to do it so they just copy what they did. But that's not really going to work for either WASP or Redwood because their products are more complicated.
00:37:43 - Martin Sosic
Yeah. Yeah. There's still some learnings to be headed there. I think so. Yeah. Maybe you could wait a bit.
00:37:47 - Scott Steinlage
I would love to see the prompts on all this though. Geez. It would just. I love seeing how it works.
00:37:53 - Martin Sosic
You know, I can quickly show you some prompts. So for example, let's see.
00:37:58 - Anthony Campolo
Got to increase your font a little bit more once you find it.
00:38:02 - Martin Sosic
I'll do that again. No worries.
00:38:03 - Matija Sosic
Yeah, zoom in like for at least two notches because there is no.
00:38:07 - Martin Sosic
Funnily enough, I'm just increasing the font. Yeah. Maybe this. Yeah, go.
00:38:12 - Scott Steinlage
Yeah, that's better.
00:38:12 - Martin Sosic
How about this? This is nice, right? Yeah. Cool. I'm just looking for GPT4 because. I know. Then we are doing the planning part still. 3.5. Come on. There is four. I think this one will be. Wait, I think I'm coming close. No, I could search at once. We are in the terminal. I don't want to press the wrong button. Give me just a. You're almost there. The anticipation of it. Yeah, almost there. You see how much work is getting done, right?
00:38:47 - Matija Sosic
I mean, any prompt is fine because, you know, it has all the context and stuff.
00:38:50 - Martin Sosic
Okay, let's. Let's let this last one. Let's see the last one. I think this one. Okay, I'm just. Let's go from here. So you can see a prompt here. It always starts. So basically this is a conversation with the GPT. Right. Okay, here is 3.5, 16K temperature. Right. 0.7.
00:39:05 - Anthony Campolo
And then the. The role and the content is the important part. You have the role of system and then the content is the prompt.
00:39:11 - Martin Sosic
Exactly. Here it is. Right. As you said. So here's the role. The system thing is basically you're just. It's like the most important message. Right. And it, you know.
00:39:19 - Anthony Campolo
Yeah. So let's, let's really hone in on this because where it says role equals system, role is something people can look up and figure out. And then content equals, and that's the prompt. The prompt starts at content equals. So if you're using ChatGPT and you're talking to it, you would start right there. That's what you would plug into the input.
00:39:37 - Martin Sosic
Exactly. This is what you would actually write in GPT.
00:39:40 - Anthony Campolo
So it started by saying you are an expert WASP developer. That's the very first thing you say to it.
00:39:44 - Scott Steinlage
Perfect.
00:39:46 - Anthony Campolo
Exactly. And helping implement a new WASP to
00:39:51 - Martin Sosic
boost the confidence a bit. Right?
00:39:52 - Matija Sosic
You can do it.
00:39:53 - Martin Sosic
Yeah, you can do it. Basically, here is very, very guess. Interesting. Here is like, you know, you write.
00:40:00 - Anthony Campolo
So this is where the. This is why I've seen Markdown before. You write markdown for. You give it like a readme.
00:40:06 - Martin Sosic
Yeah, it looks like a markdown. You're right.
00:40:08 - Anthony Campolo
It is marked out. It's dash, dash, dash, wasp. And then the thingy. This is markdown. We're looking at Markdown right now.
00:40:15 - Martin Sosic
That's a good point. To be honest, I use all markdown. I use this everywhere. So I even forget it's markdown. So I didn't.
00:40:23 - Anthony Campolo
Yeah, no, that's the thing is because. Because GPT understands Markdown. So developers who know Markdown speak markdown to it. It gives markdown back. No one who doesn't know Markdown has any idea what the hell we're saying to it.
00:40:35 - Martin Sosic
That's a good point. I mean, yeah, GPT understands everything really. So. So that's a nice, nice part. Sure. And here, here basically is what you are kind of typing into the. You know, into GPT. Right. So all this thing is a prompt. It's you. It's kind of user. Right. And you're telling. Basically what they do is they tell it. We give it a quick intro of what WASP is, you know, full second data framework with its react important features. So that's.
00:41:00 - Anthony Campolo
This is so fascinating. So you give GPT the WASP pitch and then tell it to generate an app for you that looks like a WASP app. You can't handle a WASP app. And then explain the WASP app and then tell it to give you a wasp.
00:41:15 - Scott Steinlage
It would go so far.
00:41:16 - Anthony Campolo
This would be. You could, you could take this prompt. You could do this with other.
00:41:19 - Scott Steinlage
That's what I'm saying. Yeah, yeah. That's why I wanted to see the exact cool.
00:41:24 - Martin Sosic
No, no, I mean, it's not like you could do it with other stuff. By the way, one thing you should
00:41:28 - Anthony Campolo
have like a do in this project store that kind of explains the prompt. I might help you with this because this is like super interesting, but this would be like very useful for people, I think, to understand like what.
00:41:39 - Scott Steinlage
Yes. And then it would help people to build other super cool apps for, you know, because maybe they don't understand the whole prompting process and what, what goes through and into it. You know what I'm saying? Like, there's a lot of information out there, but the more of it, the better. Right. Is what I think
00:41:55 - Martin Sosic
we actually have a blog post where we described in details how we built it, so you can even see the prompts. This is all open source, so you can see the whole source. It's relatively simple, to be honest. It's in Haskell, but it's really easy to read, I think.
00:42:10 - Scott Steinlage
I mean, I've tried prompting, putting prompts in some things and having it, and then feeding it information on the front and then having documents that it can search through inside of a vector database and stuff like that. And it did not work. I wanted to do it. Ended up completely terrible. I'm like, oh my gosh, how can I iterate this any better?
00:42:33 - Anthony Campolo
Can you pull up that blog post? I think I know what you're talking about. Is the one that's GBT web app generator, let AI create a full stack react, no code base based on your description. So what you're talking about.
00:42:43 - Matija Sosic
Oh yes, it's another one. This one is more like general intro and the other one is like how we built it, I think more like
00:42:48 - Anthony Campolo
can you pull the one you're talking about then? Because that's the one I'm finding when I Google it.
00:42:51 - Matija Sosic
Can you pull it up, Martin?
00:42:53 - Martin Sosic
Yeah, you can. Actually the first one, the one you're looking at should contain the link for the second one. It's like, you know, if you want more technical details. Right, yeah, just not block.
00:43:02 - Anthony Campolo
Oh, I see, yeah.
00:43:03 - Martin Sosic
Oh, you found it. Okay, good.
00:43:05 - Anthony Campolo
So basically it's how we built a GBT code agent that generates full stack web apps and reaction node explained simply.
00:43:13 - Martin Sosic
Here it is. Exactly. I would say it's perfect if you want to learn more about prompting. It even has like the tips, you know, how we handle different problems. A lot of stuff I'm also talking about here. Right. So it's.
00:43:26 - Anthony Campolo
Well, I think because as you said, you know, this is WASP specific.
00:43:29 - Martin Sosic
Right.
00:43:29 - Anthony Campolo
So I think a lot of people are going to see us, they're like, okay, this is cool, but how do I do this like a non wasp? I think some people get have that thought, you know.
00:43:38 - Martin Sosic
Exactly. No, and you could certainly do it, I mean in the. I think it's a bit hard to say because the whole space is developing
00:43:46 - Anthony Campolo
very fast and there's a lot of kind of implicit knowledge you need to have about how these things work and know what a prompt is, what a role is, what temperature is. There's terms, there's concepts, and it's like all of us are deep in this, so we're already immersed in all these things, but the average developer is just like, what AI, huh? I love it.
00:44:08 - Martin Sosic
Exactly. I mean it's still much more approachable than AI before. You don't need to know any ML.
00:44:13 - Anthony Campolo
Oh yeah, yeah. I tried to learn Python and run models back in the day. This is the way to go.
00:44:20 - Martin Sosic
It's amazing. Amazingly simple. What I also wanted to kind of mention is that interesting future would be the future where each web framework has their own kind of code agent. So no framework, also something like this. And then so basically what you have here is. It's not magic. Basically you have GPT which at every step is embedded with information about what. So suddenly you get GPT which knows about wasp. You could have the same thing for other frameworks. It requires doing something like this.
00:44:48 - Matija Sosic
Yeah, I mean this is like a smarter SaaS starter for your CRUD app, right? It's not like the thing where you pay a hundred dollars and download the template. It has your data models, basics, your basic CRUD tailored to your domain. So yeah, typically just like a smart CRUD starter.
00:45:07 - Martin Sosic
Yeah.
00:45:10 - Anthony Campolo
So can we run this app.
00:45:13 - Martin Sosic
Let's run it. Do you want me to quickly show the end of the rest of this prompt or should we go on?
00:45:18 - Anthony Campolo
I think we're going on the prompt. So we should show the app.
00:45:21 - Martin Sosic
Okay, let's go on. Let's show the cool stuff. Let's run the app. Give me just a second. Okay, so we have it here. Now we go run the app locally. We can download it. Okay. What is it? My Plans. Cool. I download My Plants. Let's see. Okay. Extracting it. Going in. Right, this is looking good. Okay, just, I will now kill the Wasp AI app. Let me just go to Downloads. Oops. Right, so My Plans. Okay, so this is basically the WASP app we generated. And I think we don't have to do anything smart. We can just.
00:46:21 - Matija Sosic
Just migrate and run.
00:46:22 - Martin Sosic
That's about it. Yeah. So.
00:46:24 - Matija Sosic
Oh, you want to.
00:46:24 - Martin Sosic
I guess first we do first quick DB migration.
00:46:29 - Matija Sosic
And this is even SQLite or not?
00:46:32 - Martin Sosic
This is SQLite.
00:46:33 - Matija Sosic
Yeah. Okay, so you don't need to run DB.
00:46:35 - Martin Sosic
Exactly. It will even tell me that if I try to do it. So basically now we're just installing, doing npm install in the background. Pretty much, right? Because at the end it is a React Node.js app. Yep. It has these motivational messages here, you know, to make sure you're entertained.
00:46:59 - Anthony Campolo
I like it.
00:47:00 - Martin Sosic
Yeah. If you want to see more, you know, you need to provide slower Internet connection. Okay. Right. So the database migration right now is running.
00:47:11 - Anthony Campolo
It's running a Prisma migration right now. So this is setting up your database tables so you can have the app set up. And it's doing it all with SQLite. So you don't have an external database set up somewhere else.
00:47:21 - Martin Sosic
Exactly. It did all the Prisma stuff in the background. Basically it called Prisma in the background. And that's it. Now you can start your web app. Let's see. So there's a chance it generated with no mistakes, or maybe it did some small mistakes. You never know with GPT. So let's see what it actually did. Okay, so we have something here.
00:47:43 - Anthony Campolo
We got a login. So question. Where does. So where does. How does the login work? Is it just like you have your own crypto libraries in here?
00:47:56 - Martin Sosic
Yeah, yeah. Basically it's Passport in the.
00:48:00 - Anthony Campolo
Ah, Passport.
00:48:01 - Martin Sosic
Okay.
00:48:01 - Anthony Campolo
Yeah, old school.
00:48:03 - Matija Sosic
Yeah, no need for third party services, I think.
00:48:06 - Anthony Campolo
Have you guys gotten a clerk partnership?
00:48:08 - Scott Steinlage
Yeah, I was going to ask about that earlier.
00:48:10 - Martin Sosic
Yeah, I was like, how are you
00:48:12 - Anthony Campolo
guys using auth for your clerk would be really nice. Right Here for real?
00:48:17 - Scott Steinlage
I was thinking the same exact thing.
00:48:18 - Martin Sosic
It could be an interesting addition just for sure. I mean, for now we have this kind of local solution. So you know, you certainly have to the local.
00:48:26 - Anthony Campolo
So it's nice because you have a whole self-contained app. This is how I learned to code in my boot camp. You have a self-contained Node app running on your computer.
00:48:33 - Martin Sosic
Exactly. Which is kind of like the old fashioned way, right?
00:48:37 - Anthony Campolo
Yeah, it's nice and it makes a lot of sense.
00:48:40 - Martin Sosic
Exactly. Okay, let's create some. We just need to create a user. Let's call it plant owner. Very imaginative. Password test1234. Oh, it's suggesting the same weak passwords. Okay, let's sign up. Oh, okay. Still working so far. That's good. By the way, we can see the logs here, right? So we can see what's happening. Yeah, responding nicely. Let's add a plant. Oh, nice. Okay, so, I don't know, hibiscus. Why not? I missed something, right? I missed one field.
00:49:15 - Matija Sosic
No, that's fine.
00:49:15 - Martin Sosic
Yeah, this is fine. Okay. And this is the number of. Okay. It would be nice if it said,
00:49:21 - Matija Sosic
you know, I think if you delete 0, it will show the label.
00:49:24 - Martin Sosic
Ah, it does. Okay. Nice watering interval. Only this.
00:49:28 - Matija Sosic
So sometimes it adds labels on top and sometimes it adds, you know, it just leaves it as placeholder. Yeah, depends.
00:49:35 - Martin Sosic
I'm still amazed. Amazed it does anything.
00:49:40 - Anthony Campolo
Right. The fact that it does the CRUD in the first place is so mind-blowing. It's like people with AI, they have this thing where they immediately jump to, like, it did this tiny thing wrong. But it did the thing at all. That's mind-blowing. The first time I started writing books and I'm like, computers write books now. People are like, whatever, like you wrote a book.
00:50:02 - Martin Sosic
But you know, it has mistakes. Right. It's amazing how we raise our standards very quickly.
00:50:07 - Matija Sosic
But, you know, it doesn't solve my whole life.
00:50:10 - Anthony Campolo
Right.
00:50:11 - Martin Sosic
So let's see. I just clicked plant and there you go. There you have it. It's a plant.
00:50:15 - Anthony Campolo
That's amazing. That's absolutely amazing.
00:50:18 - Martin Sosic
I have no idea like what's happening. It's taking over, by the way. You can see how, you know, the requests are being done. Made the request for the plant.
00:50:27 - Scott Steinlage
Yeah.
00:50:28 - Martin Sosic
New data. I have to admit, I have no idea what the details will do.
00:50:31 - Scott Steinlage
All right, let's find out. This is exciting.
00:50:33 - Martin Sosic
Yeah, I think it's one did we saw it. Yeah.
00:50:36 - Anthony Campolo
It just. It wants to give you just Another thing connected to the thing to give you one more thing to do. Because it's like it doesn't want to give you just the thing that is
00:50:45 - Scott Steinlage
typical of ChatGPT, that's for sure.
00:50:48 - Martin Sosic
It's pushing us forward. Right?
00:50:50 - Scott Steinlage
Yeah.
00:50:50 - Martin Sosic
I mean, you can also check it in the code.
00:50:52 - Anthony Campolo
But this is where. If you were. If I was interacting with ChatGPT and I said, hey, spit this app out for me. I could be like, hey, make a Details.
00:51:02 - Scott Steinlage
Details page. Right?
00:51:03 - Anthony Campolo
And then Details page.
00:51:05 - Martin Sosic
Yeah, yeah. So for example, that's something we will be adding into the generator, like multiple steps.
00:51:12 - Anthony Campolo
Right.
00:51:12 - Martin Sosic
Because it makes perfect sense. We just.
00:51:14 - Scott Steinlage
It's iteration.
00:51:16 - Martin Sosic
Yeah, we just. Yeah, exactly. Doing. Having iterations. Right? Yeah. Main reason we didn't do it so far is just because, you know, we. He didn't have time. So.
00:51:24 - Scott Steinlage
You know what's funny is that's interesting because this is. This is a great point. Like, who was it? What's the thing that's like Pipe Dream, Anthony, that we just did? Val. Val Town. Right. So Val Town.
00:51:40 - Anthony Campolo
Right.
00:51:40 - Scott Steinlage
Like they. You weren't able to like iterate on things, right? Just like in Pipe Dream and their chat or Chat GPT. Sorry, I guess it was Pipe Dream, they have an AI thing where it can spit out code for, you know, different things inside of Pipe Dream for creating connections to APIs and stuff. Right. And. But they didn't allow you to iterate on it. And so like, basically it gave you this thing and then you'd have to like manually iterate it yourself instead of going back and forth through Chat gbt, which is kind of cool. So it's like, I feel like that's the next big step for many people that are creating these different things is. Is the iteration piece because you need that human interaction to be able to go back and forth and correct it or help it or whatever.
00:52:18 - Martin Sosic
Yeah, it brings a lot more value on top. Right. This is a nice start here, but it gets to the whole new level. The thing is, I think just when we were building this, right, at this point, you already had something that was good enough to evaluate people. So it was like, yeah, let's push it. But mvp. But I agree.
00:52:39 - Scott Steinlage
No, it's cool.
00:52:40 - Martin Sosic
Much further.
00:52:41 - Scott Steinlage
This is amazing.
00:52:43 - Martin Sosic
Thank you. We can water it. And there we go. Ah, it doesn't water. Why not? And now we can check it, actually. Let's see.
00:52:53 - Scott Steinlage
Well, at least the buttons there. It knows it needs water.
00:52:56 - Martin Sosic
I'm looking at the button. I see it's not. It's just triggering anything. Not Trying hard. I mean, but you know, this is. Now, of course, we can just. You can take a quick look at it and see why that's not working. Let's open it in here. My plans. Right. So let's say source.
00:53:18 - Matija Sosic
I mean, just open the root and
00:53:21 - Martin Sosic
we can open the page. Right. We have a. Oh, sorry, yeah, I forgot I'm opening the.
00:53:27 - Matija Sosic
So we can easily explore it.
00:53:28 - Martin Sosic
I forgot I'm opening the project.
00:53:31 - Anthony Campolo
I don't know.
00:53:31 - Martin Sosic
Don't. Is this too small? Yes, it is. I trust myself.
00:53:38 - Matija Sosic
This command plus, can I maybe Control
00:53:40 - Martin Sosic
plus make this bigger? Yeah, there we go. Maybe Much better. Much better. Right, so you can see what's app. We have clients, we have pages. Let's quickly see homepage. What is that? Getting back in a little bit here. It's a react app. Tailwind. Right. It has. Atlantic has a water.
00:53:58 - Scott Steinlage
Nothing. Yeah, Water plant.
00:54:02 - Martin Sosic
Water plants function. Yeah. And then there is a use action. Water plant. Okay, so it's not. That's looking good actually. So let's see. We have one.
00:54:11 - Scott Steinlage
It is an importing water plant. It looks like.
00:54:14 - Martin Sosic
Yeah, yeah. And we have lost actions here. Yeah. So there it is. Here's the water plant thing, which does what defines a plant and then sets. This is actually. To be honest, this is actually looking good. So I guess we need to do some debugging.
00:54:34 - Matija Sosic
We didn't see any requests.
00:54:36 - Martin Sosic
Yeah, there are no requests happening, being triggered.
00:54:38 - Matija Sosic
Or maybe you just.
00:54:39 - Martin Sosic
I'm still clicking on it.
00:54:40 - Matija Sosic
Maybe because you are zoomed in too much in your terminal.
00:54:43 - Scott Steinlage
Now all you got to do is copy that code, go paste it in ChatGPT and tell it to fix it.
00:54:51 - Martin Sosic
But it's just here. Handle Water plant is not defined. Okay. I think it's just. So this is like as a submission kind of GPT hallucinations. Right. So look here. It says water plant function.
00:55:04 - Matija Sosic
Right? Search for handle.
00:55:06 - Martin Sosic
Where's the handle? Yeah. What am I doing wrong now? Who knows what I'm.
00:55:15 - Matija Sosic
What I'm clicking or in the action maybe.
00:55:17 - Martin Sosic
No, there is some small mistake here. I'm just not my.
00:55:21 - Scott Steinlage
Is that where I said it was? I didn't even read it.
00:55:24 - Martin Sosic
Yeah. Wait, what does it say? It says, hello, water plant is not defined when I click add plant page. Oh, there you go.
00:55:31 - Scott Steinlage
So it was in the app plant page.
00:55:32 - Martin Sosic
So we are here. I wonder why does it have two pages? To be honest?
00:55:36 - Anthony Campolo
Yeah,
00:55:38 - Martin Sosic
it seems like it went a bit.
00:55:40 - Matija Sosic
Oh, this is handle. Create plant. And we should also have handle.
00:55:42 - Scott Steinlage
There's watering right there. Well, that's interval Never mind.
00:55:45 - Martin Sosic
Sorry. There it is, right in the water point.
00:55:48 - Scott Steinlage
There you go.
00:55:48 - Martin Sosic
And it seems like it just forgot to write it. Yeah. So that's a. That's GPT. But fine. Like. So now the solution will be to kind of add that and it should work. Yeah.
00:56:01 - Matija Sosic
Even the action is already ready. So you should just call it.
00:56:03 - Martin Sosic
So just a small part missing. Should we bother with it now?
00:56:07 - Matija Sosic
No.
00:56:07 - Martin Sosic
Maybe. Maybe that's not.
00:56:09 - Matija Sosic
So you can see.
00:56:11 - Martin Sosic
Yeah. We can add one more plant.
00:56:13 - Scott Steinlage
I'm so curious.
00:56:16 - Martin Sosic
Sorry, Rose.
00:56:17 - Matija Sosic
Let's make it a real plan.
00:56:18 - Martin Sosic
By the way, for example, for. For. For the my plants thing, it is actually able to generate it. Ah yeah. So it actually has two pages. So it's actually able. GPT is actually able to generate these things even without mistakes. I would say every second try, every third try. If you go and you want to make something bigger, like a blog post. Sorry, blog. Whole blog. Right. With posts and comments and followers and stuff. There's. That's almost guaranteed that it will have some mistake every time.
00:56:45 - Scott Steinlage
Sure.
00:56:45 - Martin Sosic
But it's still silly mistakes like this. So it's not like some conceptual mistake. It's more like you hunting wrong names and stuff like that. And this is for example, where GPT4 does somewhat better. Yeah. Awesome.
00:57:04 - Anthony Campolo
Is there anything else you want to talk about?
00:57:07 - Matija Sosic
Yeah, I think some interesting points. As Martin said, improvements for the future. I think a big feature is going to be actually enable interactivity before you download the actual application. I don't know. The simplest way to do is just to allow for debugging. Basically you see something is wrong in the file. You can just say, hey, this file and the missing function, for example.
00:57:28 - Scott Steinlage
Or. Preview option.
00:57:29 - Martin Sosic
Yeah.
00:57:29 - Matija Sosic
Or you can just regenerate that part of the code.
00:57:33 - Martin Sosic
Yeah. Preview option would also be.
00:57:34 - Matija Sosic
Preview option is also just go to gitpod replit or something. That's going to be fun. I think those are the main features we had in mind for the next releases.
00:57:44 - Scott Steinlage
Super cool.
00:57:46 - Martin Sosic
Yeah, awesome.
00:57:47 - Anthony Campolo
Is there anything else about WASP in general you want to talk about?
00:57:51 - Matija Sosic
About wasp? I mean, besides the AI part, which is going to be improving. We're always building new features. I think just recently we have full stack type safety for TypeScript. We added like. We are improving the LSP. It's much easier to use now. It's almost like, you know, regular ID stuff is working as you would expect. And we'll have a new launch by the end of September, you know.
00:58:12 - Martin Sosic
Yeah. Some big changes are coming. We're doing a bigger restructuring of wasp, which should make it kind of, I mean, right now WASP is using a lot of the JS ecosystem, but it's still a bit closed in a couple of places. It's all kind of going to open up now, so it's going to look much more like your normal JavaScript npm package project. So yeah, that's also pretty exciting.
00:58:35 - Matija Sosic
So, yeah, I would say stay tuned, follow us on Twitter and join our Discord. Discord is the best way to stay in touch. Plus, you know, stars on GitHub. If you like the project, that's the best way to show your support and
00:58:46 - Martin Sosic
to make Matia happy.
00:58:47 - Matija Sosic
Yeah.
00:58:48 - Martin Sosic
Awesome.
00:58:49 - Anthony Campolo
We'll include all those links in the show notes. Thank you so much, guys, for joining us and running through this. Thank you again. A lot of technical things to figure out to get this to work, but we got there. Really, really impressive.
00:59:00 - Martin Sosic
Yeah, it's the original developer experience, right? So that's super cool.
00:59:05 - Matija Sosic
That's how it looks in the real life, you know.
00:59:06 - Martin Sosic
Yeah. Thank you guys also for having us.
00:59:10 - Scott Steinlage
Yeah, awesome. Thank you so much, guys. Greatly appreciate it. All right, everybody, thanks for watching and we'll see you in the next one.
00:59:18 - Anthony Campolo
In the next one. In the next one.
00:59:21 - Matija Sosic
Peace.
00:59:23 - Martin Sosic
Okay, bye, guys.