How to Build Apps & Websites with AI | A Practical Guide to Vibe Coding | Adi Purdila | Skillshare

Playback Speed


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

How to Build Apps & Websites with AI | A Practical Guide to Vibe Coding

teacher avatar Adi Purdila, UI/UX Designer, Framer Developer, Educator

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Lessons in This Class

    • 1.

      Welcome to the Class

      2:49

    • 2.

      Quick Tour of Hostinger Horizons

      9:14

    • 3.

      What We're Building

      10:56

    • 4.

      Integrating Supabase & Doing Initial Testing

      14:42

    • 5.

      Fixing Errors & Refining the Layout

      21:26

    • 6.

      Extending the Invoice Functionality

      31:51

    • 7.

      Adding Finishing Touches

      8:05

  • --
  • Beginner level
  • Intermediate level
  • Advanced level
  • All levels

Community Generated

The level is determined by a majority opinion of students who have reviewed this class. The teacher's recommendation is shown until at least 5 student responses are collected.

568

Students

6

Projects

About This Class

Building apps or websites used to require coding skills, a developer team, and weeks (or months) of work. Not anymore. Thanks to generative AI, you can now turn your ideas into real, functional products with just a few smart prompts.

In this class, I’ll show you how I build with Hostinger Horizons, an AI-powered app and website builder. But you’re free to use any platform you prefer — the focus here is on the workflow, not the tool itself.

Together, we’ll:

  • Use AI to generate app layouts and functionality step by step
  • Build and refine a real project: a simple Invoice Manager for freelancers
  • Integrate user authentication and databases with Supabase
  • Iterate on design, layout, and logic by “chatting” with the AI

This approach is called “vibe coding” — a relaxed, creative workflow where you explain what you want, refine the results, and quickly launch something real.

By the end of this class, you’ll know how to take an idea and transform it into a working app, without writing a single line of code. Whether you’re a freelancer, entrepreneur, or just curious about AI development, this course will show you how accessible app building has become.

Meet Your Teacher

Teacher Profile Image

Adi Purdila

UI/UX Designer, Framer Developer, Educator

Top Teacher

I'm a passionate UI/UX designer and front-end developer with over 15 years of experience. For the past few years, I've been dedicated to sharing my knowledge through video tutorials and courses.

My goal is to help you master Figma and Framer by creating practical classes, so you can learn fast and design faster.

Outside of work, I'm a big animal lover and enjoy spending time with my furry and feathery friends.

Let's learn and grow together!

See full profile

Level: Beginner

Class Ratings

Expectations Met?
    Exceeded!
  • 0%
  • Yes
  • 0%
  • Somewhat
  • 0%
  • Not really
  • 0%

Why Join Skillshare?

Take award-winning Skillshare Original Classes

Each class has short lessons, hands-on projects

Your membership supports Skillshare teachers

Learn From Anywhere

Take classes on the go with the Skillshare app. Stream or download to watch on the plane, the subway, or wherever you learn best.

Transcripts

1. Welcome to the Class: We live in a time where launching profitable products is more accessible than ever. You don't need a massive budget. You don't need to hire anyone, and you definitely don't need to know how to code. That means if you're a freelancer, running an agency, building a startup or just someone with a product idea, but no clue how to build it. This course is for you. Hey, everyone. I'm Adi. In this course, I'll show you how to build a real working web app, one that you can actually use or even sell without writing a single line of code. Now, I'm not a backend developer, and building something like this with user authentication, real databases, and a clean UI would normally take a team or months of learning. But today, we're going to do it in less than an hour simply by having a conversation with AI, and there are a lot of AI powered platforms out there, and I've tested quite a few. For this course, we're using HostingerHizons, and what makes it stand out is that it's built by HostingerH've been in the hosting game for over 20 years serving nearly 4 million people worldwide. So when they promise to handle hosting domains and scaling, they've actually got the infrastructure to back that up. We'll build the app step by step by guiding the AI with prompts, building the base structure, refining the functionality, adjusting layouts and improving features as we go. The project, a simple but functional invoice manager for freelancers. It lets users log in, manage clients, generate invoices, and even download them as PDFs. And yes, we'll integrate Superbse for user authentication and secure data storage all through the AI interface. Backend coding required. By the end of this course, you'll know how to talk to an AI to build useful web apps or websites, how to structure your prompts to get better results, how to integrate tools like Super Base without depth skills, and how to build real products fast. So that idea you've been sitting on the one you keep saying you'll build someday, well, you can launch it today. No more excuses about not being technical enough or not having the budget or the team. Let's get started. 2. Quick Tour of Hostinger Horizons: Alright, so before we jump into app Building mode, let me give you a quick tour of HostingerHorizon, so you understand what we're working with. Horizons is basically like having a developer, designer, and copywriter in one AI. You just chat with it, and it builds actual websites and web applications complete with databases, user accounts, payment processing, the whole thing. There are other platforms out there that work similarly, but what sets Hostinger apart is that everything's integrated. You don't need separate hosting, email services, SSL certificates, Hostinger handles it all. So when you're ready to launch, you can manage your domain and hosting from the same platform instead of juggling multiple services. With that said, let me show you how to get started. The very first thing you need to do is create a free account with Hostinger. So you need to go tohstinger.com and click My Account. That's going to open up a page that allows you to create an account or login with your existing one. Now, I've already done that. Once you're logged in, you'll be taken to your dashboard. Where you can control your entire hosting experience. Now, to get started with Horizons, you can click on Horizons right here on the left sidebar. If you have existing projects created with Horizons, those will be listed right here. Otherwise, you can just click Add Projects. Alternatively, you can go directly to hoizons dothstingor.com, and you can start creating right away. Now, the interface here is very, very simple. This is where you write the prompt, and there are actually three ways you can communicate with the AI. You can do that via chat. You can do that by uploading an image or you can use voice, which is pretty cool. Now, Horizons actually supports over 80 languages. So you can think and speak in your native language, which is just fantastic. Now, just to give you an idea of how this works, let's create a very simple demo, right, a simple test project just to get a handle of things. So in here, I'm going to say, create a landing page for a SAS called time Tracker, and I'm not going to give it any other details. So I'm just going to hit Send and the AI just started doing its job. It's actually a very communicative AI. I just told me, Let's go. I'm about to craft an incredible time tracker SAS landing page, and it tells me exactly what it's doing. And this is going to take a little bit, while the AI is building all the pages and the whole design thing. And you can see right here it's working on it. You have a few tips here that you can cycle through while you wait. And since we're waiting, I just want to tell you that this platform actually integrates with a lot of services like PayPal, Stripe, super Base, and even Google AdSens. So this truly gives you the option to create very complex apps, and you'll actually get a taste of that in this course when we use the Superbase integration for user authentication and secure storage for our invoicing app. Alright, so the AI seems to have finished. It tells me that all done, your stunning time tracker, SAS landing page is ready to impress. And let's see what it created. And let me actually reset the Zoom here so we can see the whole thing. So just like that, it created a landing page out of, like, a sentence that I gave it, complete with animations. Even have pricing tables here, buttons, and it created everything from text to images to layout. And you can even go full screen with this and preview it. And you can also check out the mobile view. So it creates responsive layouts by default, even though I didn't ask it to do that, which is pretty cool. So this is what it gives you by default. Now, it's your job to go over what it created and start changing things and adapting them to what you need that project to be. Also, if you spot any errors, any flaws in the layout, you can simply point those out to the AI, and it's going to do its best to fix them. For example, if I scroll down to the pricing area, we can see that the most popular badge right here sits under the pricing card, and I don't want that. So let's actually tell the AI that. I'm going to say I spotted an error. The most popular badge in the pricing section sits below the pricing card, and it needs to sit above it. Please fix it. Enter, and now the AI will interpret that, and it's going to do its best to fix that problem. And it's actually going to converse with you. It's going to tell you in just a little bit. You got it. I'm diving in to fix the most popular badge in the pricing section right away. I'll pop perfectly above the card this time. So let's see if it actually does that. Okay, so the AI told me that all is done. Let's check it out. And surely enough, it now sits above the pricing card. And you can then go on and, you know, ask it to make additional changes. Like, for example, if you would like this to kind of overlay the pricing card, you can just ask it to do that, and it should be a very easy fix. Or if there are any other changes that you would like to make for I don't know, the layout, the colors, the typography, you can ask it anything you want, basically, and it's going to do that. Now, assuming you now have a product that you're happy with, the next step is publish and let me just quickly touch on that. You need to go to the upper right corner here and hit Publish. Hostinger Horizons actually allows you to publish your project on a free temporary subdomain, the one that you see right here. For me, for this project, it's pale green, true numbers numbers dot hosting site.com. And you can always click this to view your site live. And this is great if you want to present your work to I don't know, your clients, your stakeholders, your team, you have a live link that you can use to show them what you've done. Also, you can add a custom domain. And this is why I said earlier that hostinger kind of does everything for you because even if you don't have a domain currently, you can buy that through hostinger and then apply it to your project. Here, you don't need to go someplace else to do that and then come back and do the whole domain assigning thing. It's all baked in, and I think that's a big advantage. And one other thing I wanted to mention before we wrap things up, if you get stuck at some point, or you need help setting up you can get assistance 247 from Hostingers customer success team. So don't hesitate to contact them for anything support related. Alright, now that you've seen how intuitive Horizons is for simple projects, let's tackle something more ambitious like our invoice manager app. That's coming up in the next lesson. 3. What We're Building: As I mentioned earlier, we're building an invoice manager app, a project that touches on real world challenges like user authentication, databases, and third party integrations. If you can build this, you can build just about anything. Let me first walk you through the app we're aiming for, and then I'll show you how to craft a solid prompt to get the AI started. This is what I have written down as my invoice app idea. You know, quickly writing down my thoughts, you can think of it like just a brain dump, basically, just quickly writing down ideas. So I want to make this app, like an invoice tool for freelancer, and I'm thinking of calling it freelance Bill, maybe. It doesn't need to be fancy, just functional. Users need to log in, maybe via Superbse. Then they can add clients and make invoices. The app needs a dashboard with a list of invoices and maybe some stats like total revenue, number of clients, spending invoices, et cetera. Each invoice has a prefix number. It's going to auto increment, something like INV, 001, 002, et cetera. Now, when creating an invoice, I want to be able to select the client from a drop down. I want to have line items that have a description, the quantity, the price, just like any other invoice. The invoice total should update automatically. I can set the status to each invoice to either new, which is the default sent or paid, and I would like to be able to download the PDF of the invoice. And maybe later I can add email functionality so I can send the invoice to the clients directly from the app. Also, I would like a page for the clients. I would like to add edit delete clients, and I need some basic info for that like name, email, phone, and address. And I would also like a settings page where they can put in their company info and also change the invoice prefix. Clean layout, maybe with a sidebar navigation, and very important, all the data is tied to the login user. So this is kind of what I'm thinking about for the app. It's like a rough plan. This is definitely not a good idea for a prompt because it's kind of all over the place. And when writing AI prompts. You need to do it in a specific way if you want the best results. And I'm going to give you some tips and tricks for that when writing the prompt for this project. So let's create a new project or a new text document, I should say, for the prompt, and let's begin. Very first tip is to start with a clear goal and say exactly what you want to build and what it should do. So for example, build a web app for freelancers to manage and send invoices. So in our example, that first sentence would look something like this. Hi, I'd like to build a web app for freelancers called Freelance Bill. The app should help users manage clients and invoices in one place. So very clear description of what we want to achieve. After that, we should list the key features as short scannable parts. And using bullet points is a great idea. So for the core features, I would like secure login and authentication, use Superbse, create a view edit and delete invoices and clients, download invoices as PDFs, and finally, all data is tied to the logged in users. These are the most important features. After that, we can start describing the pages that we want the AI to build. And in my case, those look something like this. So I want a dashboard page that has a table showing all invoices with edit and delete actions. And I also want some overview stats that shows me the total invoice number, the total revenue, total clients, and also the pending amount. The second page is the invoice creation Editing page or the invoice form, as I call it here. So I would like a drop down to select a client add multiple line items for description, quantity, unit price, auto calculate the totals, auto generate invoice number with custom prefix, and I give it some examples of what I mean by that. And also I would like the option to select invoice status, new sent or paid. Then on the clients page, I would like a list of all the clients with the ability to add edit delete. Each client has name, email, phone address. So as you can see, I'm very detailed in my description of what I want to achieve and how I want that particular page to look like. Finally, the settings page, which has the company or personal information used as sender on the invoices, and also the ability to define custom prefix for invoice numbers. And finally, I added some tech notes. I said, use Superbse for user authentication and data storage, and also I added some design preferences, if those are important, right? I said, design should be clean, modern, responsive and use a light color scheme. At the end I said, Let's start by generating the basic structure and UI, and I'll refine everything step by step in follow up prompts. This is not necessary, but I just thought it's a nice addition. So this is what the final prompt looks like. We went from this app idea that was just a a random collection of thoughts basically to a more structured prompt that informs the AI of what it is that we want to create and the goals of that project. So with this done, let's go ahead and copy this prompt, and we'll jump back to Horizons, and we'll paste that in and start making our invoicing app. Let's go. And while this is working, there was one other thing that I wanted to mention, and you can think of it as a best practice. Don't be afraid to iterate, right? You don't need to get everything perfect from the first try. You got to treat this like a conversation with the platform. The AI, basically. So, start by laying the foundations for your app and then iterate. Then add features, make changes. As I said, treat it like a conversation. It's the best thing you can do. And here's another great tip, actually, from Hostinger this time. So for the best results, keep your messages simple, short, and focused on one change at a time. So when you want to make changes, don't write a message that says, Well, change this and then change that and then make another change on those elements. Make one change at a time. It doesn't confuse the AI that way. And it's also going to be easier for you to debug and test everything because when building stuff with platforms like this, you'll find that you have to do a lot of testing, right? After the AI makes a specific change that you ask the two you got to test and see if that was implemented correctly. And in some cases, you got to test and see if that particular change didn't affect other parts of the app or their functionality. So, you know, it's a process, but it definitely beats, you know, hiring a team of people, spending huge budgets on building an app, and most importantly, spending weeks and months building something. With this kind of vibe coding, I guess you could call it, it's really easy you can do it yourself. So we're almost done where the AI is almost done building our foundation for the app. I'm really curious to see what it built. Okay, all done, it seems your freelance bill app is ready to rock. Let me know if you'd like any adjustments. Okay, so we see a very simple login page, basically, because in the prompt that I gave it, I did say that, okay, users need to be logged in to do anything on the app. So the first logical step is to ask users to sign in. So we can enter our email, our password, and if we click on these links, they'll just switch from login to create account. We also have a small introduction here to the app with basic core features, basically. Won't work just yet because we don't have an active Superbse integration. The AI even told me here that when you're ready to upgrade to Super Base for secure authentication and data storage, you'll need to complete these steps. So how about we do that next? Because Uh, you know, integrating super Base is probably the most technical thing we have to do for this built. So I'll see you in the next lesson. 4. Integrating Supabase & Doing Initial Testing: Okay, so super Base, what is it? Well, simply put it's a development platform. You can find more information about it if you go to superbs.com. We're not going to get into a lot of detail because honestly, I don't know that much about it either. By trade, I'm not a backend developer, so I've actually never used SupABse before. However, with AI tools like Hosting or Horizons, that doesn't stop me from building an app with it because connecting it to your Horizons project is super simple. So here's how you do it. You're back here on the Horizons platform, and you would go to the top right where it says integrations. You would click that and you would select SUPABse. It even tells you you can add user signups, logins, data storage, and other back end features. So go ahead and click that here it's going to ask you to select an organization and a project. Now, I already have some defined here because I did some previous testing with Super Base. But when you first use this, it will look different for you. Essentially, what you need to do is create an organization. For me, it's called Hostinger Horizons Org. You can name it whatever you want. And then after you create that, you can create a new project. So let's do that together right now, and that's going to take you to the Super Base website where you need to log in. If you don't have an account, simply create one. It's free. I'm going to click Sign Up now and I'm going to enter an email address and a password, and I'm going to click Sign Up. So now we have to check our email to confirm the registration. The email looks something like this. You just click Confirm email address. And at this step, Super Base is actually going to tell me to create a new organization. Sure, let's do that. I'm going to say Audi's team. Personal for now, I can select the free plan. This is great for most people who are just getting started. It's more than enough. So let's click Create Organization. And then I'm going to select that organization, and I'm going to call the project Freelance Bill. And we can set a good password here, and this is going to be used for the actual database. Then you can select the region that's closest to your users, and you do this for best performance. I'm based in Europe, so I'm just going to select central U and then create new project. Okay, cool. So once this is done inside Superbse, we need to go back to hosting our Horizons, and we need to do a refresh on this project. And then we need to go back here to Integrations. Click Sup Base. Then we'll click add another organization because I want to add the one that we just created. And here I'm going to get a pop up asking to authorize API access for Hosting or Horizons, and I'm going to select that Addis team organization that I just created. So I'm going to click Authorize Hosting Horizons. And now that new organization is connected. And I can see the freelance Build project, and I'm simply going to click Connect right here in the sidebar. Okay. And it's going to ask for a confirmation, and I'm going to hit again, connect. And by doing that, I actually gave the AI a prompt and I told it, please connect my SuperbasePject, freelance bill to my website, and I got a confirmation. Of course, I'll connect your SuperbasePject to freelance Bill right away, and this will enable secure user authentication and robust data storage for your app. And in this time, the AI actually sets everything up for you. It sets the database tables, you know, for invoices, clients, and settings. It integrates Super Base authentication for secure login and sign up, and it switches from local storage to Superbse for all data management. All right. So now everything should be fully connected and I should have access to my app, and I should be able to create accounts and sign in. So let's see if that's the case. Let's start by going to the sign up page. I'm going to enter my full name ad Pod. And I'm going to enter my email as Adi Pordla gmail.com, and I'm going to enter a password, and I'm going to hit Create Account. So let's see if this work if this works. It gave me a notification saying that, oops, it disappeared. Account created, basically. So now let's go to the sign in page. Click Sign in. And it says email not confirmed. Okay, we also have some errors in the platform. It says it's a super baase error. It says email not confirmed. Let's see if I actually got a confirmation email. And I did. It says, confirm your signup, so let's confirm that. Now I get a local host refuse to connect error. Okay, this is actually common with Super Base. I did some research on the topic, and it's one of the problems you might face when building something like this. So here's how you fix it, right? You go back to Super Base, you go to authentication. You go to URL configuration, and here you can see that it's currently set up to local host 3,000. You need to change this to your actual website address. So for that, we go back to Horizons. Yeah, we publish this so we can get that URL, and, you know, we can open this and view our site. And we can copy this without the login part, and we can go back to Super Base. We can paste that in and we can save the changes. Okay, so next, we need to resend that confirmation email. The problem is that only gets sent once. So here's what we'll do. We'll go to manage users in Super Base, and I'm going to select this, and I'm going to say delete one user. So now we go back to our platform. Let's do a quick refresh. And let's sign up, but let's use a different email address this time. So I'm just going to use this one and create account. Okay. Nothing happened yet. Let's check out Super Base to see if we have, yes. This was added, and now we should check the email for the verification link. So let's do that. And surely enough, we have a confirmation link for this email address. Let's confirm. So that took us somewhere. If we go back to Super Base and we do refresh, we should now see that sign in when that happens. So now the email is confirmed and we should be able to login to the app. So let's go back to Horizons here. We'll click Sign in. So now I get a web app error detected. Ask Horizons to fix this error for you. So let's ask it to fix it. Okay, so apparently, it's all fixed, and it tells me that the layout is now correctly using the Superbase authentication, and I've cleaned up the old files. Well, how about that? So what we have here, we have freelance Bill, dashboard, clients, new invoice, and settings. Okay, and then some account information. But before I move on any further, I would like to test the login and logout functionality to see if it works properly. So I'm going to click Sign Out. Cool. Okay, so that takes me back to the sign in page. So let's choose my credentials or enter my credentials, once again, sign in. And yes, success. So that seems to be working just fine. And this is actually a little bit too bright for me. So before we move on any further, let's actually change our original statement and create this app using a dark scheme. So I'm going to talk to the AI again, and I'm going to say, I changed my mind. Please use a dark color scheme for the app with a, let's say, mint green accent color because that was just a little bit too bright for my eyes. So that also gives us an opportunity to test these kinds of design changes because changing a color scheme for an app like this is a pretty big undertaking. It does take quite some time if you were to do it by hand, as you can see, the AI does it in a very short amount of time. It hasn't even passed a minute since I asked it to do that. So let's see what it came up with. Okay, finishing touches. And just before it was done, it actually told me that yikes, it looks like a pesky error slipped into the clients JSX files, and I'll untangle it right away and get your up back in perfect working order. Interesting. So while it generated, while it changed the color scheme, it noticed that syntax error in one of the files, and it fixed it. All right. So this is what we got much better, not perfect, obviously. The designer and me just immediately notices things that should be fixed, but, you know, I didn't actually give it precise indications on how this should look like. I just told it, use a dark color scheme, and it did that. And it looks just fine for now. I also like the color choice. That's nice. We have some very subtle animations here. And yeah, so this is the dashboard showing total invoices, revenue, clients pending amount. Cool. Clients. No clients yet with the ability to add. New invoice. I can select the client from this list. I can select the status, new send paid, just like I told it in the prompt. We have an invoice date. We have a due date, cool, and then the line items, and I can add as many of these as I want. And in f click Cancel, takes me back to the dashboard, and then settings, company info, email address, business address, invoice settings. I have the invoice number prefix. Can I create an invoice? I need to create a client first, actually. Let's add our first client. Let's say client one, email, client one@gmail.com. Phone, address, client one address. Let's add it. Cool. So this was added. And then let's go back to dashboard, create invoice. Okay, it says, No clients found no clients found. So an initial testing shows that most of it is working, but we have some work to do ourselves. Let's actually go back to Super base, and we'll go to database. And here, it actually shows us the structure of our databases. So we have a table for invoices. We have one for settings, and we have one for clients, and you can see how these are interconnected. So, for instance, each invoice has a client ID, right, which is directly let me actually show you this. The client ID in the invoices table is linked to the idea of the actual client. Yeah, interesting. Okay, so everything seems to be just fine here. Let's go back to tables. And if we go to clients here and we view in the table editor, yeah, we can see the client that we just created in the app. We can see the name, the email, the phone, the address, and when it was created. So the link with Superbse works just fine. And this is all I wanted to see right now. We got probably the most complicated part of the process completed, and that was the super base integration. Now, let's just refine the app step by step and make the necessary changes to get it to the state that we want. We'll start doing that in the next lesson. 5. Fixing Errors & Refining the Layout: Okay, so the goals for this lesson are to test the following things. Can I create invoices properly and link them to specific clients? Can I change the settings properly and have them applied to the invoices? And can I associate clients invoices and settings to the login user, which means if I create a new user, will that user's data be totally different? These are the things that I want to test in this lesson. So let's start with the invoices. As I showed you in the previous lesson, we created a client successfully, but when we wanted to create a new invoice, we could not select a client from the drop down list. So let's tell the AI that exactly. When creating a new invoice, the client drop down list is empty, even though I have successfully created clients, and that's it. The AI tells me that, Hey, you've spotted it, my apologies. It seems I left a wire unplugged between your new Superbase client data and the invoice form. You know, I like the way this AI communicates. It's very polite, but it has an occasional sense of humor. So let's wait for it to fix that error. And notice that I only asked it one thing per prompt. That's a best practice that I encourage you use as well. So DAI tells me that it's all fixed. So let's see, click New invoice, select the client, and sure enough, it now lets me select client one. Let's actually create a new client here, client two. Let's add that. That was added successfully good. Now let's go back to new invoice and we can choose between client one and client two. Awesome. Okay. So client one, new invoice, today's date, due date for the invoice. Let's say end of the month line items. Let's say, I don't know, YouTube video. One quantity, let's say $100. Can we also use this to increment? We can. But the increment value here is not right because it just increments the decimal places like this. That's something that we need to fix, but it's not something urgent. We can also update the quantity here. Two, and it automatically updates the total, which was one of my requirements. Cool. So let's create invoice. Okay. New invoice successfully created, but it doesn't actually show me the invoice here in the list. Let's tell it. I'm going to say I created an invoice, but the app doesn't show it to me in the recent invoices section. And, you know, I did a little typo there where I said doesn't that doesn't really matter with AI because it understands what you're trying to say. Uh huh. So, apparently, the dashboard is still looking for invoices in the old local storage spot instead of the new Superbse database that we just created. And that's why your new invoice isn't showing up Cool. So it also tells you that this is why it's not working. Let me fix it. I like that. That's cool. And it fixed it. Super nice. Recent invoices, I can now see the invoice that I just created. Cool. Let's create another one. This time, let's select client two. New. Let's set the due date for I don't know, 7 August. Let's add two line items this time. So let's do a YouTube course for $2,000, and let's add a I don't know, marketing services. One for 1230 $9. Okay, so the total is calculated correctly. Let's create invoice. Good. Okay, so this updated the recent invoices list. It also updated the pending amount here, which is good. So this is the sum total of the invoices. Have two clients, total revenue zero. This will update, I think, when the invoices are marked as paid. It depends on how the AI made the logic behind this, and I have two total invoices. Cool. Okay, so I can create new invoices. I can create new clients. Let's see if we can edit a specific invoice or a client. Let's start with clients here. Let's say I'm going to update client two, and I'm going to say client two long address instead of address. So update client, client information has been successfully updated. That's good. So now if I go back to the dashboard and I edit invoice two, let's say I change the YouTube course to 5,000 and I update invoice. And yeah, that seems to update just fine. If I edit this and change the client, it also works just fine. Let's change the client back and update the status to sent instead of new. Yeah, that works too, and what's nice is that the AI uses these pills here colored differently depending on the status. That's a very nice change. Let's edit invoice one and mark it as paid and see how that is reflected. Okay, so that is now reflected with green and the AI now updated the total revenue. So the total revenue is made up of the amounts from the invoices that are paid, while the pending amount, as it should be, is based on the amount of the invoices that were either sent or new. And what's interesting about this is that I didn't actually specify this to the AI. Didn't ask it for this functionality, but it knew, right? Without me having to tell it exactly how this should function, it's very intuitive. So it knew exactly how this should work. This just makes things so much easier when the AI meets you halfway. Okay, so let's get back to the goals for this lesson. I said that I wanted to test if, you know, these can be edited, which they can. Also, if the settings are doing their job properly. So let's actually change these settings. And let's start with the invoice settings because by default, the invoice prefix is INV, but let's change it to AD, let's say, or ADR. And let's save settings. So now when I create a new invoice, I'm actually curious to see the invoice number and prefix because normally in my head, the invoice number should automatically increment based on the last invoice, but I should now be using the new prefix that I generated. And I did not specify that to the AI, but I'm curious to see if it actually implemented that on its own. So let's select client two and let's say, blah, with a price of ten, create the invoice. Wow, cool. Okay, so this created invoice ADR 003. So not only did it use the new prefix that I gave it, but it also continued the invoice number from where it left off. Supercool. Okay, let's actually delete this invoice. Are you sure you want to delete this invoice? This action cannot be undone? Okay. But why am I getting a browser notification instead of an in app notification? So let's click, Okay, the invoice has been successfully deleted. So now if I create a new one, let's say client one. Oh, invalid input. I didn't actually get to see that, but I think that's because I didn't get to select the due date. Okay. So let's go back to errors. Super base error. Let's copy this. And let's tell the AI to fix that. I got this error, and I'm going to tell it to make the due date a required field because I forgot to choose the due date. So that through an error. And to prevent that, I don't necessarily have to rely on the AI all the time. I can tell it, Hey, make that field required. That should take care of any problems we might have in the future. Okay, so apparently all is done, the error is squashed and the due date is now a required field just as you wanted tells me the AI. Okay. Let's see if those adjustments work. So let's create a new invoice. Yeah, select the client. The due date is now required, but what happens if I hit Create invoice now. Okay? So it tells me, please fill out this field. It actually automatically populated the due date. Interesting. Okay. So let's just do that. Let's do that. Create invoice. Okay, so that's what I wanted to test originally. If I delete an invoice, for instance, invoice 003, and I create a new one will the AI still use that 003 prefix, which it should or go to 004, because we had an invoice previously with that number, but it did the right thing. It used 003. And let's create another one because I was curious about this due date. So apparently, it automatically populates this due date with the last day of the current month. Which is, I guess, fine by me. And I think for now, this will work just fine. So I can add, edit, and delete clients, I'm assuming. I haven't actually tested the client deletion. So delete. Yeah, so it works. So I can edit delete at clients and invoices, and I can change the prefix accordingly. Now, the final thing that I want to test is if the data that was created here, clients invoices settings is linked to the login user. And for that, we just got to create a new user and create new data for it. And when we switch users, we should only be able to see the data that is associated with the specific user, if that makes sense. So let's sign out. Nice. This also updated the login screen. I like that. Let's sign up, create a new account here. And I'm just going to use a random email address that I have for testing, and I'm going to create an account with that. So now I should be getting an email. Yep, that works. Confirm. So now let's log in with this information. So we have no invoices. Of any kind. We have no clients. And when we go to settings, everything here is empty, except the settings, say that the invoice prefix number is ADR, but this is something that I added recently for the previous user. So let's go ahead and fix that. And I'm just going to say, when a new user is created, please use INV as the default invoice prefix. Alright, so let's see if that works. So this is a new user, and surely enough, we have the INV. Well, that's nice. It also automatically filled in the email that I used to sign up, and I don't think that was there before, was it? Okay, but we also have an error here. We have a super base error, so let's fix that. And just a quick tip. If you want to write more than one line in this box, you can press Shift Enter to go to a new line. If you just press Enter directly, it's going to submit the prompt to the AI. Okay, so let's see let's go back to settings, and we have another error, duplicate key values. Okay, let's tell it. Now I got this. Let's see what it says. Yikes a duplicate key error. It looks like we have a classic race condition. I don't know what that means. Both my database trigger and the settings page, we're trying to create a default profile for you at the same time. Uh huh. My apologies for the little traffic jam. Very interesting. So, it tells me that it will be fixed in a flash all done. The settings page will now load without a hitch. Let's see if that's the case. Hey, it does. Very impressive. Okay. So this is the thing that I wanted to test. Let's create a new client, and I'm going to say Demo client one, Demo client one@gmail.com, and I'm going to add it. And then let's create a new invoice here for Demo client one. Let's call this Logo design. $1,000 create invoice. Okay, so for this user for the user Audi, I have invoice 001 for Demo client one for $1,000, right? So if we now sign out and we use my other account, yeah, all the data is now associated properly. I have my client one and client two that we created initially. I have the three invoices that I created there. And in terms of settings, yeah, I have the INV prefix, although I remember changing this to ADR. So now if I create a new invoice, hold on. So let's change the prefix here to ADR. Okay. So now if I create a new invoice, it's going to be ADR 004. Okay. So now if I sign out and I login to the other account, and I go in here and I change the invoice prefix to I don't know, let's say, HHH, save changes, and I create a new invoice. Yeah, see, this is not right because it doesn't use that new invoice prefix. So let me tell that. Let's say the new changed invoice prefix is not used when creating a new invoice. As you can see, this whole AI building is very conversational, right? You ask it to do something, you test it. If it doesn't work, you tell it to do it again. You test other things. If those don't work, you tell it to make changes. That's all there is basically. But the nice thing about it is, of course, you don't need to know how to write code. The AI does it for you. Uh huh. So the problem, apparently, was that the invoice form was still looking at the old cached settings instead of fetching the latest ones. Okay, so let's test this properly. So now if you go to settings, we have the HHH prefix. So let's create a new invoice. And now it's using HHH 003, but I don't actually want that hyphen. So I'm going to tell the AI, I don't want a hyphen in the invoice number. Just use prefix plus number. HHH, for example, HHH 03 or 003. So yeah, I just spotted. An error, and I asked to fix it. So your role, I guess you could call it here, is that of, you know, supervisor, team leader, even quality control person, you're the one with the vision, basically. You need to know, you know, how you want the project to look and how you want it to function, and then you need to convey that vision to the AI by, yeah, speaking to it. It's a very interesting world we live in right now. All right, let's once again, create a new invoice HHH 04. And if I change that to DDD, and I save the changes and I create a new invoice, let's create the client. Let's select the client, actually. Yes. DDD 05. Okay, let's do one more sign out and sign in with the other account. And I want to check out the settings here. It's still using the prefix ADR. Let's also change this to OOOO I don't know, QQQ, save changes, new invoice. And it's now QQ q005. Cool. Okay, so everything that I wanted to test in this lesson works just fine. I can add, edit, delete clients. I can do the same for invoices, and all the data that I create for the logIn user is associated with that logN user, which is super cool. Now, coming up in the next lesson, we'll start adding some more advanced functionality to our invoice app, and as usual, we'll test things thoroughly and make sure everything is working. And if it doesn't, we'll just ask the AI to fix it. So I'll see you in the next lesson. 6. Extending the Invoice Functionality: Alright, so I have a very specific target for this lesson. I want to implement a download as PDF functionality in my app. And also, I would like to implement an invoice preview. What does that mean? When I create a new invoice or I edit an existing one, I would like a preview somewhere on the side that's going to show me how that invoice looks like as it will be when it's downloaded as a PDF, if that makes sense. So let's do that. Let's start with this. Is the Download button working here? PDF download isn't implemented yet. You can request it in your next prompt. Okay, let's request that. I'm going to say, please implement PDF download for invoices. Very simple request. We're working one request at a time. As I said, that's a best practice because it's not even the best practice for the AI, but for you as well because it limits the things that you want to test. When you're asking or if you're asking the AI, do you know five things in a prompt, you got to test for five different things. But when you focus on one thing at a time, it's much easier for you and it's also much clearer for the AI. I'm always very happy to read the responses that the AI gives me. So here's my game plan. Install Auto table, which is a tool that will help me create professional looking tables within your PDF invoices, create a dedicated page, build the PDF generation logic. It tells me that I'll add a download PDF button to the new view page and update the necessary items. Okay, so let's see what it did. So it changed the download icon. To an eye icon. And when we click that, Oh, that's super cool. It actually shows me a preview, and this is what blows me away when using tools like this. I wanted a preview, right? I wanted it in the edit page or the ad page. But I never thought about, how about we add a preview functionality here outside of it? I didn't even ask it to do that, but it did it anyway. Invoice number, company info, client invoice date. You can see the contents of the invoice and then you can download it. Let's download it. Invoice QQQ 05 PDF. Let's download it, and let's see what it looks like. It has all the necessary info. It has my company name, Bill from Bill two. So it got the client, correct? Yes. Quantity unit price, is that correct? Yes, it is. Thank you for your business. Yeah, so it works. How easy was that? And if I edit the invoice, do I also have a download button? I do not. So the only way to currently download the invoice is to open this and then download PDF. And I can also click Edit and it's going to take me to the edit page. Yeah, I'm okay with that flow. I think it's going to work just fine for now. And I can also click on an invoice, and it's going to take me to the preview page NIE. These are actually some best practices when it comes to UX, and the AI just implemented them automatically, which is very impressive, very impressive. Okay. So the download PDF part is done, and that took minutes. Very cool. Let's implement the part where it shows me a preview when I add or when I edit an invoice. So, for instance, when I enter this page, I want to be able to edit the invoice details just like before, but I would like to see a preview of the final invoice here on one side. So let's do that. So let's ask it this. When adding or editing on invoice, I would like to see a live invoice preview on the side. Live, meaning it's updating its contents as I'm changing the invoice details. Let's see what it does. Of course, a live invoice preview is a fantastic idea. I'll redesign the invoice form to include a beautiful, real time preview that updates instantly as you type. Let's see what it comes up with. Can you imagine sitting on a beach somewhere with your laptop, you know, building apps, building products? Very, very good. Okay, let's go. Let's edit. Surely enough, we have that preview on the right side. Change the due date to the first, that updated instantly. Cool. Let's change the description here to videos, that updates in real time. Let's change the quantity here to two. That works. Let's change the price. That's a problem. The form here is just too squished in. So we need to change that. So change the quantity to three. Yeah, Prices update automatically. Cool. Let's add some notes. Hey, thanks for working with me. Update invoice. Okay, so that was, I believe, this one. Yeah. Okay. So that was the edit page. If we open up the new page, yeah, it works just fine. So functionally, it works, but we need to fix some usability things here. So first of all, these fields are now too small. I mean, the quantity, yeah, I guess it's okay because it usually holds just a small value, but the price is too small. The total is too small. As you can see, the text kind of overflows here. And I have a feeling that the side bar here is just wasted space. So let's start by removing the side bar and moving this content into a top bar. So I'm going to tell it the following. The side bar is taking up too much space. Please remove it and move its contents in a top bar. Should be easy enough. And again, this kind of change would take, I think, probably several hours to complete depending on who's doing it for you if we're talking about, like, a live people. But yeah, the AI will just code it in no time. Okay, this looks much better. It moved this whole thing to the top. It shows me the dashboard, the client's new invoice, but no settings. Also, Ah, okay. So it made like a drop down menu here where it shows me, the user, the settings page. And then the logout link. Pretty cool, except for the fact that I just have a G there and it's not a circle, basically, so we got to fix that. So I'm actually going to say the drop down menu button in the top bar doesn't look right. It just displays a G in a vertical pill shape. Please update that to show a user icon and move the user name and email outside of the drop down menu. So that should be easy enough. So the user can always see his name, his email when he's logged in. All right. So that looks a little bit better, but it's not yet perfect because this shape here is very odd. It's like a pill shape, but we do have access to the settings, which is nice and the logout link. Cool. But let's actually fix that problem. So I'm going to tell it the icon background is still a vertical pill shape. Please make it a circle. Alright, let's see how that does. Okay, and I think that finally fixed it. The button now looks great. It works as it should. I have the information here nice, and I can switch between these pages. Okay, now, since we moved the sidebar out of the way, let's actually edit this edit invoice page and see how that is with the extra space. Now, obviously, on a live website, we don't have this side bar. It's going to look like this, basically. But, you know, we still have to make sure that this layout works on a lot of different screen sizes. So this is what it looks like on mobile. Okay, which is not too shabby, and the menu there still works. Nice. But on desktop, I feel that we're not there yet with this form. So let's see how we can fix this. And you know what? Actually, I'm not even going to try and find a solution to this problem. I'm just going to describe the problem to the AI and see what it comes up with, because if it does something and I don't like it, I can always revert back to a specific version of the app by clicking the Restore button. So after every chat, yeah, we can restore a specific version of that app if we don't like the change. So I'm actually going to describe my problems here. And the problems are basically in the line items section because we don't have enough space for the quantity unit price in total. So I'm going to say the invoice form in the line items section doesn't offer enough space for the line item fields, especially the price fields. Can you find a solution for that, right? So I'm just describing the problem, really. I'm not trying to find it for the AI. I'm just waiting to see what suggestions it gives me for that. And if I don't like them, I can always revert back or ask you to make further changes. Let's see its plan here, actually. So it says it wants to rework the grid layout and improve the mobile view. All right. Well, let's see how that goes. Okay, new invoice. Let's see. Hm. I mean, it didn't really do much, did it? So if I change this, no, this still doesn't work properly because the total here, if we're dealing with larger amounts, it still overlaps or it goes outside of its bounding box. And let's actually see the mobile view because it said it updated the mobile view. Let's ask it this. It didn't really make any valuable changes, so I'm not going to revert back to an older view, but instead, I'm going to ask it to move these around a little bit. So I asked it for a solution it didn't really give me a good one, so I'm going to tell it what to do. In the line items section, please make the line item description full width and move the quantity, unit price, and total price on their own or I should say, on the second row. That way, the data has enough room. Okay. And one other tip here, and I've actually done this before, if you ever find yourself not being able to communicate with the AI, if you're asking it to do something, but it just doesn't seem to understand what it needs to do, then try and use another AI to generate a prompt for it. So I used to do this in the past. I would ask the AI something it wouldn't understand, and then I would ask CHAT GPT to write a prompt for me to give the AI. And I explained what I wanted to do to hATGPT. So then hATGPT took that, wrote a very detailed, very technical prompt, which then I gave this other AI, and it finally got the job done. It doesn't work all the time, but it usually helps. Okay. So now let's edit the invoice. Yeah, there we go. That's much better. Now we have plenty of space for both the description and the other three fields. Something else I would like to add here is a currency to the unit price. So I will say, add the US dollar currency to the unit price as well. Okay, so the AI made changes. What does that mean? We got to test them. So we edit. We now have the dollar sign there as well, and changing this also updates the amounts here and also updates them right here in the preview. Very nice. If we check out the preview here, it still works. And if I create a new invoice, select the client, there is one little thing here. The invoice number seems to be cut off. So it's not cut off. In the edit page, but it's cut off in the Create page. Interesting. We're going to tell it. In the create invoice page, the invoice number is cut off, please fix testing new invoice. So now it says A, select the client invoice number, date, due date. And if I edit, so the invoice number is shown correctly, but I don't want that hash sign there. Okay. But it's not displayed correctly on new invoice. So this prompt for this time would be remove the hash sign from the invoice number in the invoice details page. Also, when creating a new invoice, the invoice number shows A, please fix. So I kind of broke my own recommendation there because I asked it to do two things in one prompt. Let's see how it does. Normally, as I said, I wouldn't really recommend that because it's much easier for you and also much clearer for the AI. But let's see how it does just this one time. Okay. So now, it removes that hash sign from the invoice number, and when I create a new invoice, QQQ 06, yes, that is correct. As you can see, this now fixed the issues, and it shows me the correct invoice number. Now, let's quickly check out the other details that should appear on the invoice. So when I select the client, it selects client one, client two, that's correct. But what about my own personal details? So let's actually go back. Let's go to settings. And let's fill in the company name here. Let's say, I don't know, Pordla Designs Ic DiPord my email address, phone number. Sure. Let's just say just a dummy phone number, the address. Let's put uh, the address, and let's actually fill in all the fields here. Okay? Save changes. Cool. So now when I create a new invoice, yes, it fills in my information correctly. Although it doesn't display my website. Oh, no, yes, it does. I didn't see that. Cool. Okay, so let's set the client client one status invoice date, due date. I automatically populates this. Due date tomorrow. And let's say, I don't know, YouTube, quantity two unit price 100 and hit Enter, to create the invoice. Cool. And we have an error here. I'm not seeing the client for this invoice. If I change that to client two, do we see it? We do not. Invoice QQQ 006 is having some issues. If I create a new invoice, do we have the same problems? Yes, we do. Okay. So we have just discovered a new problem. This is why you have to test, test, test, and just keep on fixing things. When creating or let's say, the client is not displayed in the recent invoices table for new invoices. That's a weird behavior. Let's see if it fixes that. So apparently, the client's name wasn't being saved properly when creating a new invoice, which is why it wasn't showing up on your dashboard. Stuff like this happens, you know, even to the AI. When you're making these changes, you're changing the code itself. So it's only natural that when you change something, you might mess up something else, but it seems to have fixed it. So now if I create a new invoice for client one, yeah, I displays it correctly. Awesome. Okay. And the invoice number is shown there correctly. One thing that I noticed is that the invoice preview that I see here is actually different from the invoice preview that I see here. So we might want to change that. Let me ask you to do that. So I'm going to tell it exactly what I told you. The invoice previews are different between the preview page and the ad edit pages. Please make them the same. Alright, let's check it out. So this is the preview. It looks a certain way, good. And if we go to edit, yeah. So I think that looks pretty much the same. So I'm happy with that. So if I download this invoice now, the 008 invoice, and I open it, it shows me the correct information, right? Yeah. But the design of the actual invoice doesn't really look like the preview that I see here. And it would be nice for all of these to be the same thing. So let's do that except the preview is using this dark color scheme, and the invoice that I generate should be on a light color scheme because you might want to print it on paper. So in this case, let's ask it this. Make the downloadable PDF format look exactly like the two previews you just built except use a light color scheme for the PDF. Let's see if that's possible. Oh, man. I love this. It seems there's nothing the AI can't do. I mean, I just asked it to do this, which, in my mind, is a very complex task, right? But the AI tells me that, Hey, you got it. I'm going to install this and update that. Pretty cool. So let's see if it did any changes to the previews here. I did not. So if I download the PDF now, Oh. Okay. What is this? Yeah, this is not good. So maybe I wasn't very clear. It seems that all it did was grab an image of the preview that I had in the app and just placed it on a white background. And that's not what I wanted. I want basically to have this format, this layout of the invoice, basically, but on a light color scheme. So let's ask it again. I'm going to say that's not the right solution. Please use the same format and layout for the PDF as you did for the preview, or I should say, for the invoice preview. However, the PDF will use a light color scheme. And I think that should be enough. Let's see if that's specific enough for it. If not, well, I think I'm going to talk to my good friend Chad GPT and ask you to craft a better prompt for the AI. Let's preview, let's download. Yeah, this is still not right because yeah, it uses the format, but it doesn't work properly. This is the first invoice. And the text was actually selectable here, but in these two, this is not even selectable. This is an image, basically. So let's actually go to hATGPT and try and find a solution to this. All right, so after talking with CHADGPT, I basically told it that, look, I'm building an invoicing app with Hosting Horizons. I'm trying to get it to match the format of the PDF to the preview from the app. So I gave it a bit of context and asked it, can you help me with a prompt? So it gave me a prompt. This one, which is a little bit too detail. So I told it, that's too detail. The AI already knows what we're building, so it gave me this smaller prompt. So let's try it like this. I'm just going to take that. I'm going to paste it in. And the prompt here basically says, Make the exported PDF, match the onscreen voice layout exactly same structure, spacing and alignment. The only difference, use a light color scheme, white background black text for print, keep the design clean and consistent with the preview. So let's see if this helps in any way. From my experience, as I said, this works most of the time because having another AI write the prompts for you, usually results in more detailed, more technical prompts, but that's not always the case. If this doesn't work properly, we might be looking at, you know, something the AI can't do, but I doubt that's the case, honestly. So he says, or it says, you got it. My apologies. The last tent wasn't quite pixel perfect. Okay, so let's click this. Let's click download PDF. Let's see if no, this doesn't seem to work properly, not even this time. So let's tell it this. You keep on putting an image in that PDF. The text is not even selectable. Please generate the PDF the same way you did when first creating this app. But use the layout and structure from the invoice preview on screen. So, we're kind of attacking this from a different angle. Let's see if that does anything. I am truly sorry for the repeated missteps. I'm implementing this correct solution now, and I'm confident you'll be happy with the professional quality of the results. Well, that remains to be seen, my AI friend. Uh huh. So, apparently, what it did was it was using a HTML to canvas package to create that. So now it's removing that and it's bringing back auto table to build a PDF with real selectable text. Okay, let's give this a go. Oops. Let's download. Aha. There we go. So now it seems to display it properly almost. It's not like 100%, but it's pretty close. Like, all the information is in the right place, except on the invoice. This is kind of a box layout with the header, the table header being colored like this, and the preview just shows it like that. Think I'm going to take it. I think I can tweak that a little bit further, but this lesson has gone for way too long anyway. So I think for now, we got a pretty close resemblance with our preview here, and I'm going to take the win. So the targets for this lesson were to implement the invoice preview and also the download as PDF. And as you saw, the work just fine, you can click on any invoice to see a preview here. You can download that as a PDF and also creating a new invoice or editing an existing invoice will actually show a preview on the right side. And that preview updates live as you're updating the invoice details. So what else do I need or do I want to make for this app? Well, it seems to work really well for now. The one thing I think I would change right away is the fact that we have too many buttons, let's say new invoice, right? We have one here, and we have one here, and the main menu here also says new invoice. So I think I would like to streamline that and kind of have a single button, maybe here or maybe here in the header. Remove this menu item and then maybe make some design changes to make this look a little bit more polished. But that's for the next lesson because as I said, this is already too long. So I will see you in the next lesson where we're going to implement the final changes for our app. 7. Adding Finishing Touches: Okay, welcome back to the final build lesson of this project, and the goals for this one are very simple. We got to thin out the new invoice buttons because there are too many, and they're scattered all over the layout. And we also need to make some aesthetic changes. Just polish the EUI a little bit more. So let's start with the button. So I'm going to say, we have too many buttons for creating a new invoice. Keep a single one accented in the top bar. And I think it goes without saying that the other two should be removed. So let's see if it does that correctly. And apparently, while it was doing that, the AI found an error, a pesky semicolon. Okay, I didn't see that, but apparently it did. So yeah, we have a single new invoice button now that takes us to the Create New invoice page. Nice. And when we click Edit, it takes us to the Edit invoice page. So that's target number one. Target number two is to make some aesthetic changes. And for that, I would actually like to test this image feature. So I would like to find some images that show the kind of layout I'm trying to achieve give them to the AI and ask it to match the colors and, you know, the spacing and everything to the images that I just gave it. So let's see how that goes. Let's actually go to dribble, and let's search for what would this be dark dashboard. Let's see if we can find something that I like and that I think would work well for this kind of project. So this is interesting. From use mind. This looks interesting. So let's save that. And that actually saves it as a web P image. I'm wondering if the AI accepts web P uploads. This is too dark. This looks interesting. Again, I'm not going to try and pronounce your name. So let's save that image. Okay, let's try it with these two images, right? So we'll go back here and click Upload. I'm just going to select those two web P images and see if that works. So apparently it did. Okay, cool. So let's actually give it a prompt. Please use the two images as a reference and change the colors and spacing of the UI I'm really curious about this because if this does well, then it's really easy to build an app that not just works good, but also looks good because you can have a professional designer create a design for that app and you can just ask the AI to match that as close as possible. It's saying that the plan here is to revamp the color palette, refine spacing and layouts, and go through each UI component to ensure they're perfectly aligned with their new color scheme and spacing. All right, right. Well, the plan sounds great. Let's see the implementation. And here we are. So for reference, I opened up an older version of the UI. This was, you know, before we made the layout changes here. And this is the new one. So yeah, it's definitely different than what we had before. Let's open one of these. It's not like night and day, but I think it's an improvement. It changed the accent color because the two images that I gave it yeah, they were using this kind of orange orange color. Yeah, I definitely did some changes here. For instance, it added, like, a light background color to all of these sections. It kind of lowered the contrast of this border. And it also added I just noticed this. I added like a blur, like a background blur effect to this, to the stop bar, and I think it made it fixed. I don't think it was fixed before. So now it stays in place when we scroll up and down. Okay, so overall, yeah, I like these changes, and I think I can just keep on talking with the AI and perfect this and make it look like what I have in mind. It's really just about how much time you're willing to spend with the AI. If you're, you know, trying to build an MVP, like a minimum viable product that you want to show you know, stakeholders, then, you know, creating something like this is more than enough. It looks great. It's responsive. You know, it works on mobile as well. It's clean, and you can always make visual changes to this. So I just want to do one final round of tests just to make sure everything works perfectly before moving on. So let's go to clients. Let's add a client. Oh, it also changed these fields here. It also changed their appearance, basically. Okay, adding clients. Works, editing clients. Works. Let's go back here. Let's create a new invoice. Select client three. Yeah, cool. Quantity item description, two of them for $300. Hey, let's great invoice. Yep. So that worked. I can preview it just fine. I can download a PDF of it. And the PDF looks like this. It also changed the colors on the PDF, even though I didn't ask it to. Cool. I can edit the invoice, and then I can delete invoices. Nice. And I think I'm going to stop right here with this app. I think I got it to a very decent state in what? An hour. Maybe the course is going to be a bit longer than an hour, probably, but you have to understand that if I was to do this entire process without talking to the camera, it would obviously take less time. But I'm happy with what I created so far, and I'm going to end it here. Please join me in the next lesson for the conclusion and next steps. I'll see you there.