Make Apps with Claude Code: Build, Launch, Improve, and Scale | Chris Barin | Skillshare

Playback Speed


1.0x


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

Make Apps with Claude Code: Build, Launch, Improve, and Scale

teacher avatar Chris Barin, Certified Photoshop Expert

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.

      Introduction

      4:57

    • 2.

      How to Get the Most Out of This Course

      5:37

    • 3.

      Our First Project in Claude Code

      11:41

    • 4.

      Why an App?

      4:55

    • 5.

      Set Up Claude Code and the Other Programs

      7:46

    • 6.

      Claude Plans Explained: $20 vs $100 vs $200

      12:16

    • 7.

      Claude Code vs Codex vs Cursor vs Lovable

      10:23

    • 8.

      What We'll Build and Why

      5:42

    • 9.

      Don't Ever Make This Type of App

      4:29

    • 10.

      How I Lost Apps That Were Making $800 per Day

      14:44

    • 11.

      Work with Certainty: Save, Back Up, and Roll Back

      6:41

    • 12.

      Make Changes and Use GitHub

      10:53

    • 13.

      Section Conclusion

      3:09

    • 14.

      Start Building the App

      10:10

    • 15.

      Launching the App

      6:12

    • 16.

      Keep an Eye on These Objectives

      4:06

    • 17.

      Optimize the App and Save Your Progress on GitHub

      7:10

    • 18.

      Moving from Local to a Server - The Easy Way

      10:13

    • 19.

      How to Get Answers That Are Actually Helpful

      5:24

    • 20.

      From Firebase to Cloudflare

      6:35

    • 21.

      Add New Assets the Smart Way

      7:59

    • 22.

      This Is Where the Fun Actually Begins

      6:35

    • 23.

      How Do You Make Money with Apps?

      7:57

    • 24.

      How to Show Ads in Your App

      7:08

    • 25.

      Explore Multiple Ad Formats

      8:42

    • 26.

      Improve the Experience with Another Screen

      5:15

    • 27.

      The Reality of Ads and Making Money

      11:52

    • 28.

      Add More Features for Extra Engagement

      14:56

    • 29.

      Find New Ways to Add Ads

      5:59

    • 30.

      Create a Subscription for Recurring Revenue

      11:19

    • 31.

      Tech Debt: What It Is and How It Applies to Claude

      9:29

    • 32.

      Take It to the Next Level - Introduction

      3:45

    • 33.

      Push Notifications: Bring Users Back

      5:54

    • 34.

      Push Notifications: Test and Ship Safely

      10:49

    • 35.

      Server-Side Push: Send Offers on Demand for Free

      9:54

    • 36.

      Server-Side Push: Connect Firebase and Send a Real Notification

      10:55

    • 37.

      Ask for Ratings the Smart Way

      10:05

    • 38.

      Subtle Live Effects: A Premium Feel with Minimal Battery Use

      8:32

    • 39.

      Onboarding: Sell the Benefits in Three Screens

      7:14

    • 40.

      Onboarding: Polish the Flow and Ship It

      6:00

    • 41.

      Analytics: See Crashes and the Numbers That Matter

      8:26

    • 42.

      A Remote Control for Your App: Make Changes Without an Update

      7:43

    • 43.

      Speak Their Language: Unlock New Markets

      9:14

    • 44.

      Take It to the Next Level - Conclusion

      4:02

    • 45.

      Google Play: What You're Actually Signing Up For

      6:26

    • 46.

      Creating Your App in Google Play Console

      4:27

    • 47.

      The Store Listing: Your Shop Window

      6:05

    • 48.

      App Content: The Forms Nobody Warns You About

      6:18

    • 49.

      Signing and the AAB: The File You Hand to Google

      5:15

    • 50.

      Testing Tracks and the Twelve-Testers Problem

      5:00

    • 51.

      Going Live: Production Access, Review, and Rejections

      6:03

    • 52.

      After Launch: Vitals, Reviews, and Your First Update

      6:45

    • 53.

      Optimize and Scale - Introduction

      3:23

    • 54.

      Paywall Design and Pricing Psychology

      6:44

    • 55.

      Ad Mediation: Earn More from the Same Users

      7:59

    • 56.

      LTV vs CAC: The Equation That Lets You Scale

      5:25

    • 57.

      Ad Consent and Privacy: The Mandatory Essentials

      6:39

    • 58.

      Staying Off the Ban List: Protect What You Built

      7:29

    • 59.

      Build an App Portfolio

      5:01

    • 60.

      Optimize and Scale - Conclusion

      3:34

  • --
  • 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.

15

Students

--

Projects

About This Class

Build a mobile app from scratch with Claude Code, even if you have no previous coding or AI experience.

In this beginner-friendly class, you will follow the complete process step by step: setting up Claude Code, planning and building an Android app, testing it, launching it, and improving it after release.

This requires a paid subscription to Claude Code: $20 / month - prices may vary!

You will learn how to:
• set up Claude Code and the other required programs;
• plan and build an app with clear objectives;
• save your progress, use GitHub, and roll back changes safely;
• move from a local project to online services;
• work with Firebase and Cloudflare;
• add assets, screens, ads, subscriptions, and engagement features;
• implement push notifications, onboarding, analytics, remote controls, and translations;
• prepare the app for Google Play, testing tracks, and release;
• review performance and scale the project responsibly.

The class focuses on practical workflows and principles that can be reused for future apps. Complex technical concepts are explained in plain English so you can concentrate on the process and understand why each step matters.

By the end of the class, you will have followed the complete lifecycle of a mobile app and will know how to apply the same workflow to your next project.

Meet Your Teacher

Teacher Profile Image

Chris Barin

Certified Photoshop Expert

Teacher

Chris Barin is a professional web and app designer with nearly 10 years of Photoshop experience. By being self-taught, he managed to gain the trust of over 190.000 students from all over the world through his Photoshop courses. A staple of his materials is a hand-on, down-to-Earth approach that focuses on getting maximum results with minimal effort.

Chris started out as a freelance web designer and built a loyal client base, earning over tends of thousands of dollars by designing sites part time. Today, he runs his own Android design studio, 20 strong, creating fantastic looking apps for clients; his apps have over 100 million downloads to date.

Passionate about teaching, Chris teaches because he has been disappointed in the quality of training materials available ... 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. Introduction: Let's build mobile apps together with Cloud code. We'll make them from scratch with no previous experience. We're going to build them step by step through vibe coding. So that's with the help of AI, artificial intelligence. I'm going to show you how to launch the app, monetize it, and grow it into a serious business. And this is all beginner friendly. Hey, there. I'm Chris Chris Barin, and I founded and ran a mobile lab design company for over five years. In that time, I managed to get over 100 million downloads, and I've generated over half $1 million in revenue. I'm telling you all that so you know that I have real world experience. I've been in the trenches, so this is not just theory. I've lived it. And in the past, you needed a team of expensive developers to build, launch, monetize and maintain mobile labs. But nowadays, we can do everything with Claude Code. Cloud Code is an AI platform that anyone can use. Just tell it in simple English what you want done, and it's going to create all the working code for you. So it's going to code for you like an employee. But just to be clear, this course doesn't assume that you know how to code or you know how to use AI or even Cloud code specifically. No, we're going to take it step by step by actually installing Cloud code together. I'm going to explain everything in detail. So this is very much beginner friendly. And at the end of the course, you're going to have your own mobile lab launched, but more than that, you're going to know exactly what you need to do to build the next one. Now, in this course, we're going to make an Android app on the Windows machine. But you're soon going to see that all of that is irrelevant because everything I teach can be used on any device and on any platform. And that's because I teach principles that are universal. So if you're on a Mac and you're looking for an IOS app, you want to build one, no worries. Everything in this course still applies. And here's why this course is different because I'm a designer at heart. I'm not a coder, so I'm not going to complicate things with difficult terms. I'm going to explain all the complicated stuff in simple English so you can focus on the big picture. And here's my perspective. Actually, building mobile labs with clot code is not going to be too difficult. Follow my steps, and you're going to see you're going to manage just fine. Windows or Mac doesn't matter because the tricky part is getting users, making money through ads or subscriptions, making users come back to the app every single day, not getting suspended on the app store and so on. So those are some of the principles I'm going to talk about. And here's everything that's included in this course. And as you can see, coding with AI is actually a very small part of it. This is the real value of the course. This is where my five years of experience in launching and building a successful company will really help you out. I'm going to tell you the actual good stuff, not just prompts or how to use AI. You can find all of that on the web. What you won't find is these fine details that make all the difference. Like what stats you need to check, what type of ads you need to show, how you can grow your revenue and so on. So all the fine details that make or break your app. So this course is for everyone who wants to start something exciting and nothing beats the feeling of a growing MRR. And that's monthly recurring revenue. And here's the thing. You make $0.10 today, then $0.20 tomorrow, then $1 per day, then ten per day and so on. MRR, monthly recurring revenue. The number keeps growing, and you realize that this is an incredible way to make a living. Now, is this going to be hard? Of course, 100%. Cloud code changes every single day. But I'm going to teach you how to manage that, how to get over all of that frustration and get results as fast as possible. Now, there is one more barrier, besides this being somewhat difficult and you needing patients. You can start with a $20 plan for Cloud code for this course. But if you plan on actually launching multiple labs, you will soon have to upgrade to the $100 plan. Well, that's pretty expensive. It's still incredible value for what you're getting. A good mobile lab developer charges that for 2 hours. So 100 bucks is actually fantastic value because, again, a good developer charges that per hour or maybe 50 bucks an hour depends on the region. But, yeah, this is going to be exciting and it's going to be something for the future. Invest into your career. Have a look at the lesson plan, and you'll see that this course is different than most regarding mobile labs. Now, let's get started and build something exciting. 2. How to Get the Most Out of This Course: Come back. Let me set the stage so you can get the most out of this course. So number one is ask for help when needed, because things are going to break down. I'm going to show you a red button on my screen, and I'm going to tell you to press it, but you're going to have a blue button in a totally different position on your screen. Now, does that mean that I made a mistake? No, things change all of the time with AI literally every single day. That means you have to have patience and you have to recognize this is how working with AI is. You got to be ready to overcome obstacles. You have to know how to ask for help. And first of all, you ask the AI, and I'm going to show you exactly how to do that in a different lesson. The second thing you can ask me in the comments section. The thing is, sometimes that's a bit too slow. You may want to fix the problem fast and keep building. If that's the case, come to my discourse server. So this is a totally free chat room, and you can talk to me and a bunch of other students. Make a free account, install the program on your computer, not on your phone, and join the server. Ask for help in a clear way, and a few of my students may reply. Don't say something like it's not working or I got an error. Instead, mention the lesson, the time code and your specific problem. For example, in Lesson five at the 1 minute 35 second mark, I don't have the apply but unavailable. It's grade out. So use this chat room to get answers faster. But more than anything, be prepared for the issues. Again, I'm going to be there just about all of the time, but sometimes I may be busy, I may be recording and whatnot, so use the entire community. Now, is the most important thing that you have to know right away. AI is non deterministic. Now, what does that mean? If you give it the exact same instructions as N so copy paste one to one, you're still going to get a different result. This is not a bug. It's not a problem. It's simply how AI works. You test this out in the free version of Chad GPT. You can simply test it out. You copy paste the same prompt a bunch of times in different sessions, and you're going to see slightly different results. All AI platforms work this way. There's no exception. So I repeat, different results are expected, even if you copy paste and you do everything precisely and different errors as well. Now, in my recordings, I'm going to show you every single problem that I'm going to encounter and how to fix it. But you may have different ones, which can feel a bit frustrating. This is part of the game. It's like sweating in the gym while working out. Or, you know, feeling that dreaded muscle soreness. It's a byproduct. You can't avoid it. So please, my advice don't get angry. Don't get frustrated because as smart as AI is, it's actually incredibly dumb at times. If you keep calm and understand that's the price to pay, you're going to be flying. Now, next, this course is for everyone. I'm going to explain things in a simple manner so beginners can understand what's what. If you have some experience with AI or building gaps or whatever else, please skip ahead when a lesson isn't all that exciting. Having said that, please know that this is going to unfold like a good movie. So this is a story that builds on itself. So while skipping a lesson here or there is probably fine, you should not skip a whole bunch of lessons because you're not going to get the same learning experience. This is not a course where you can just pick it up at any certain point. For example, say, the monetization chapter, you're just interested in making money, and you skip to that part. No, that's not going to work. Finally, know that updates are coming at a rapid pace. If you have a newer version of the program, if the interface is slightly different, if you have a newer model that's faster, smarter, basically nothing changes, nothing fundamentally changes. It's like having a slightly faster car with getting more horsepower. It doesn't fundamentally change the result. You want to drive to a place? Well, with more power, you may get there faster, but the path is the same, like setting up analytics, choosing what type of *** to run, how to update the app, how to make the users come back, knowing what features to add and so on. So when a new model comes out, I'm not going to remake the entire course because there's no need for it. I built this course with this flexibility in mind. So if you want to use a different coding platform, you can still follow along. Instead of plot code, maybe you want Codex or maybe Groce maybe whatever else. I build this course with that in mind. So that's why I structured the course in this specific way. Now, with that being said, again, please be patient because things are going to break. AI is going to be super dumb at times. You're going to be shocked by how dumb it is at some points. And yeah, ask for help, do skip lessons and work along with me on your second viewing. The first time around, just watch the video and see what's happening on the screen, understand what's going on. At the end of the lesson, rewind from the top, go and clod code, and start working with me and pause as often as you need to. So don't try to work along on your first viewing. You will not be able to keep up. So pause as often as you need to on your second viewing. And with that, we're ready to rock and roll. 3. Our First Project in Claude Code: Welcome back. I know you may be a bit surprised, but it's time for our first project together in Cloud code. Obviously, you don't have anything set up on your end, but I want you to see the process, how it all works, what it's all about, and you got to experience it for yourself. Then you can dive deep into all the setup with a lot more excitement. Oh, the plan is this. Watch this lecture, then continue so you can install Cloud code in all the needed tools. Then come back, use my Notepad file and do the same thing on your end. So just to be clear, you cannot execute anything right now, even if you may have Cloud code on your computer. No, you got to do the setup from the next lecture, then come back here so you can work along. Okay, so here are my instructions for the Cloud code. This is called the prompt, and I'm basically saying that I want a one page website for a family vet, okay? Simple enough, Coil stuff. So he's cloud code, and as time goes by, it may slightly change on your end, but the essentials are still going to be here. Now, the first step, select folder. Click on this button because we need to create a brand new one, an empty one on our computer. My advice for real projects, place it well. I have all of my projects on drawbox, but for this course, I'm going to keep them on my desktop so I can get to them fast. That's not ideal, though, for your end. Now, the name of the folder doesn't matter, but it's a good idea to be fairly descriptive, something like vet website, something like that. As you add more and more projects, obviously, naming them will help. Claude is asking me if it can read, write, or execute files inside of this folder. Of course, yes. So the first step choosing a folder. Done. It's an empty folder. Good stuff. Now, step two, choosing a model. This is where this course is going to be updated fast because new models come out every single day. Now, I'm exaggerating a bit, but again, every few weeks, you will see a new model. Now, think of the model like the engine in the car you're about to drive. Do you want a big V eight engine super powerful, or maybe you want a frugal one liter hybrid? It depends on your wallet, how long the journey is, and how important it is for you to arrive at your destination as fast as possible. Now, I always use the best model for my real world projects, but, of course, I'm on the big plan. I'm on the $200 plan, right? And that's because I have paying users and I can't afford any bugs, any problems. And by the way, if you enable fast mode, you're going to burn even more fuel. So fast mode is the following. Imagine you have a V eight with a supercharger and two turbos. So that's a bit ridiculous because it's going to be super fast, but it's also going to be a gas guzzler. It's gonna be incredibly expensive. Now, if you're on the $20 plan, use one of the lower models. Okay, next is the effort level, and the default is this one here. So I'm going to keep it set like that. Now, as you can imagine, if you have a very complicated project, you will have better results with the smarter models and with a higher effort level. But again, you will burn more fuel. You will see what that means in just a minute or so. Okay. Step three, we're about to start. So bypass permissions. In short, I don't want Claude bothering me every single minute. There are no risks in this situation, so I wanted to do everything on its own, get staff from the web, write, save, delete files, whatever, because this is all fine. This is just a standard project. It's not going to be anything too complicated. So rather than stopping every 30 seconds or so and asking me if it's fine to start a server or whatever else, I'm just going to put it on auto mode. So it's going to work automatically now. Is this a bit risky? Yes, 100%. But that's how I prefer to work. It's faster, more efficient, and overall, a better experience. Now, when you choose bypass permission for the first time, Claude may take you to the setting page where you have to confirm that. You actually have to scroll down a bit. And while we're here, I'm going to change a few settings too, like the size of the text. But here is the actual important part. Allow bypass permissions mode, plus enable remote control by default. So that's how I like to work. That's it. Now we can start building, but because of that setting screen, we're no longer in code mode. So Claude has another different area in which you can chat with it, use the co working feature, but we're not interested in all of that. So focus here and choose code. This is essential, so don't skip it. In my case, you may see some stuff from previous projects, but I'm going to blur them out so they won't distract you. Okay, checklist. One, the folder, empty, all good, all set up. Two, the model and effort level, all good, all set up, and three bypass permissions, which is how I like to work. It's a bit risky, but again, that's how I prefer to work. Okay, let's paste the instructions. Okay, and we're off. Now, I'm going to speed up the recording sometimes as much as 20 X because this will take some time. After about a minute, it finally has something for us. It tells us the goal. You'll see how it thinks and what's going on behind the scenes, so to speak. We even have a small timer here and how many tokens it's using. You can think of tokens like the amount of gas that's being used, though you shouldn't really focus on it, to be honest. Files start appearing in our folder, which is good stuff. It wants to use JavaScript for the better experience. Okay, fine with us. And now it's asking us to allow it to use Python so it can start a server. Okay, yeah, of course. There's already a preview here directly in Cloud Code. It has a built in browser, and we can already see quite a lovely page. Let's pause at the beginning, you'll constantly check this bit. Contact window, five hour limit, and the weekly limit. For now we've used about 7% of the context window. And what does that mean? The more you fill it, the worse cloud is going to perform. It will simply start for getting stuff. So I'm going to say that again. It's simply going to start for getting stuff because it has too much to remember. So when you go over that limit, it will automatically reset, but you can expect worse performance. More on that a bit later. About the five hour limit. This is all Lata explained. But again, in short, this is the fuel that I was talking about. So choosing the best model and setting it to the maximum effort level, you're going to burn through the entire five hour limit in just a few messages, which can mean a few minutes. So that's what the fuel analogy was all about. Now, just to be clear, this is something like 100 gallons of fuel. This is not a guarantee that you can use it for 5 hours. No, it says that you have 5 hours to spend to use those 100 gallons that you have allocated. Does that make sense? So if you choose a Vight engine, you're gonna burn to it and say 2 hours, an hour. 20 minutes, okay? If you use a smaller engine that's a bit more efficient with a lower model, with a lower effort level, you could probably use the full 5 hours, and then you're going to be stopped automatically. Does that make sense? So the model basically determines how fast you're going to use that fuel, how fast you're going to spend it. And the weekly limit is just about the same. More on that again a bit later on. Claude is actually scrolling on its own and checking the design, which is fantastic. It's making sure things look okay and that they actually work. This is all on its own. It does see a problem with Google Maps, but it looks for a solution on its own, which I love. It's proactive. I love this experience. It knows best. And the thing is, there is no need for it to stop and ask me about it. Okay, after the while it's done, and we get this link that we can use in any browser. This is a local website. We can't share it with anyone. But yeah, this is great. And by the way, it even gave us a read me file, which we'll check out in a bit. Now, let's ask it to change the prices to dollars and change the colored scheme. So this is a fairly standard request. And just like that, we're at 11%. Remember, it's not about the minutes that are passing by. No, this is the feel of the resources that are allocated in the $100 plan, the $20 plan, the $200 plan. So, for example, here, if you on the $20 plan, you might be at whatever, 40% in the exact same time frame with the exact same messages. So if you use copy paste, your percentage may be higher than mine, simply because the lower plan has fewer resources. The preview may not always work as expected, but if you refreshing your browser, you should already see the change. I'm going to let it run, but with going to 13% and growing. Now, the goal here is not to make you nervous, but I really want to address the elephant in the room because I'm sure you're going to worry about it. I no longer worry about it. I don't even think about it. So in short, it's this. You're paying to learn, okay? So compared to any mentor, any developer that may tutor you, any books or courses, what you're doing right now, this is incredibly valuable. So what you get to experience here for 20 bucks or 100 bucks, this is a game changer. This is going to completely change the course of your life if you really stick to it. With that in mind, considering that you're paying to learn and you're paying such a low price to learn. Yes, use it. Use this fuel in the real world, you're not going to get anxious about your usage. The thing is, even I sometimes run out, but typically I have to wait maybe for an hour, maybe 2 hours at the most, and then I'm back to it. But yeah, this is how you should frame it. You shouldn't protect these resources. Don't protect your fuel. Use it, spend it, so you can get to learn. Getting the skills is far more important. And yes, this is our website. The mobile version, that looks great, too. And we're at 13%, and we started at 8%. Overall, this is Cloud code. This is how you build software. You tell it what you want, and it does it for you. Now, what's next? Continue watching the next lessons and set up everything on your computer, and then I'm going to tell you when you can come back to this lesson and remake this website on your own. For now, please move on to the next lesson so we can set things up. Thank you. A 4. Why an App?: Welcome back. Let's talk about why you should build a mobile app, whether it's for the IOS store or for Android devices. Now in this course, we're going to focus on Android, but as you're about to see, the same principles apply to any app store. So a mobile app is a fantastic way to deliver value to you and users. Now, you may ask, why not make a responsive website and be done with it, right? Now, most websites work fine on mobile devices. So why do we need to complicate things? Well, it's like working out in the gym versus in the park. Sure, you could work out everywhere, but in the gym, you have so many more tools that will help you achieve your results much faster. It's the same thing with apps. They live on your phone. They can send you reminders. You can quickly make payments. You can take photos, you can scan stuff, and you have a tailor made experience. So I'm quite sure that you are comfortable using your phone. You know all the gestures, the swipes. All of that translates inside of the app. So the same can't be said about the website. But let's talk about our upside as developers. So is it really worth it? Oh, yes. And here's the key. It's MRR, monthly recurring revenue, MRR. Just be clear. This is not solely focused on making money. Having a monthly income is fantastic, but this is actually a proxy for the value you're delivering. Otherwise, said, if you're making good money, you are probably providing a good service to your users. Even better said, it's about making an impact. Changing people's lives. If your users are happily using your app and generating an income for you through ads or subscriptions, then you're doing something right. We can't measure user satisfaction directly. So that's why we're looking at MRR, monthly recorring revenue, so we can better understand if we are on the right track. And MRR is a statistic you're going to track every single day because it's so fun. You start off by making your first $0.05 per day. Then you'll slowly grow to maybe $0.10 per day, then $0.50, then five bucks per day. Five bucks per day is already 150 bucks per month. And where does it stop? Well, that's the great thing about it. There's no ceiling. Some of the biggest apps are making millions per month. And I do mean millions, a lot of millions. But here's the thing. Go on Twitter now called x.com, and you're going to see regular people making ten, 20, 50 K per month with a couple of apps. These are not geniuses, and their apps are not the next Facebook or some type of revolutionary AI. No, it's regular apps that remind you to drink water to see how you would look like with different types of hair, to remind you to pray that help you to meditate, stuff like that. It's nothing incredible, right, but they're quite popular. And that's why I love making apps because everyone can do it from any part of the world. It doesn't matter who you are, how old you are. What's your background? Nothing like that. And you can build an app per month, maybe one app per year or one app per week. It's really up to you how you want to implement your vision. More on that later on. Now, my goal is to teach you how to approach these mobile apps so you can have a complete picture. Just building it and publishing it doesn't mean much. You can actually make something functional in maybe an hour or so, but that doesn't work. And you can think of it like publishing a website. Okay, you publish a website. What then? How are people supposed to find it? How are you making them come back day after day? How do you make money out of that traffic, so you can take that money and actually improve the website? These are the things that actually matter, and that's what we're going to focus on. But rather than me giving you never ending lectures, no, we're going to take it step by step, and we're going to build something together from its features to how to monetize it to how to make people come back and to give them more value and so on. So to sum it up, making an app is a fantastic way to make a living while delivering great value to a lot of people. It's never been easier to handle the coding part with the help of AI, but the real difficulty comes after that. How do you grow the app so that it actually succeeds? That's what we're going to focus on. Let's continue. 5. Set Up Claude Code and the Other Programs: Welcome back. It's time to set up Cloud code so you can do the first exercise on your own. Now, on Windows, you can follow along, but know that you can't just build IOS apps. It's just not possible. On MacOS, you have the exact same programs and tools available, and that means that you can build both IOS and Android apps without any problems. So that's the first limitation you have to be aware of. Okay, let's install Cloud Code. So you can use Google and search for Cloud Code, but you may get a lot of ads from other companies, and those can easily distract you. The easiest way go to cloud.com. Here, you're going to find Cloud code in a nice big download button, and it's going to be the same on MacOS. Let's installing. Let me show you cloud.com, the homepage, in case you typed it in manually. Now, I'm sure this is going to constantly change, but you're looking for Claude Code in the navigation somewhere. Now, there are other things available, but we're only interested in Claude Code, not cow, not Claude on its own, okay? It may be a bit confusing, but the code part is the essential debt. Once it's installed, it will ask you for an email in case you already have an account, which I do. I'm going to put it in, and I'm going to get a link that I have to open on this device to confirm that it's me. So I got to open up my email. You will be very likely taken to the pricing page, and I encourage you to start with the $20 plan, though eventually you will have to upgrade to the $100 plan fairly fast if you want to build multiple apps. Now, cross that bridge when you get there. But you can start with a $20.01. Don't go for the yearly plan. Don't go for credits. No discussion. For now, step one is all set. You should have Cloud Code installed as a dedicated program, and it should look something like this. But without all the notices in the center, those are from my past projects. Okay? So again, pause as often as you need to and work along on your second viewing. Now, step two, install Git. Again, available on both Mac and Windows. When you search for Git, your browser may allow complete to GitHub, and that's a separate thing. This is what we want, and this is the actual website. Okay? So that's Git. Here's a nice bright button that we can use to install Git and here's the download link. I will constantly speed up the recording so we don't wait too much. One uncomfortable thing, Get asks a lot of questions. My advice go with the default values. So basically just hit next on every page. Okay, at the end, there's no need to launch. Let's move on to step three, and that's Node JS. This is the website, and as before, it's available on MACOS as well as Windows. Click the big Download button and then use the Installer. This isn't anything too exciting, but this setup is going to give you a much, much better experience. Okay, once you begin installing NoJS, there's one thing here that may be a bit tricky. Automatically install the necessary tools. This is like having a set of ten different types of spoons, depending on what you're going to eat. Now, could you just manage with two or three spoons? Of course. A ten really needed? No, but they may come in handy. And it's the same thing here. The trouble is, this is going to launch multiple windows, and you may download a few gigabytes of stuff. Specifically for visual studio bull tools, which aren't all that needed. If you want to get started faster, skip it, and when something like not having Python installed is going to cause an issue, you can ask Claude to fix it. So again, you can skip it. I'm going to enable it so you can see what's going to happen. Now, initially, no JS will install, but after the few seconds, it will start getting all the other tools involved. Chocolate, Python, Visual Studio Bull tools. The thing is, you won't know when it's done or if it's stopped. So that's a bit tricky. You will see some messages that are in green and they say approved. But other times it will hang for a couple of minutes, and you won't be sure if you should close it or not. So this is the part that's not beginner friendly, but I wanted to showcase it. Again, if you skipped it, you won't have it. But if you're following along, you might have something similar. Now, there's nothing that you have to do, but you do have to wait for the few minutes. And again, you're not really sure what's going on, so it's a bit uncomfortable. But if you're in doubt, and check that option, like I said, and it is what it is. If you do enable it, you're going to see something like this. And yeah, after a while, you should just close the window if after the few minutes nothing is happening. Now, the final check, you need to type in CND in the start menu, CMD. And now you will type in these three commands one by one. And if you don't see any error, then you're golden. You're all set. You should probably see something like this, but very likely a newer version. But yeah, that was it for this step because, yes, there's a bit more, and I'm sorry about that. And that's installing Android Studio, which is available on MacOS, as well. This is going to take a good while, at least ten to 15 minutes, but it's quite important throughout work. In case you want to build IOS apps, you should replace Android Studio with Xcode, and Xcode is installed like any other program on MacOS. Simple enough, totally free. Now, back to Android Studio, it's a bit slow and clunky. The installer is over 1 gigabyte, but be patient because you'll only have to do it once. And after that's installed, you will have to launch it and agree to a few things, so then it can continue downloading valuable tools. The great thing about it is this, we'll spend 90% of our time in Claude Code, so you don't have to learn any of these tools that we just set up. Just make sure they're available for Claude to use them because that's the plan right here. We're installing stuff so Claude can actually use them. Okay, now, please watch this video again, install them, run the three commands to check that everything is good to go. Then you can go back to the initial project, the Vt Clinic project. Now, for me, it's really essential that you build it. I don't want you to save fuel. No, I don't want you to save resources, even if you're on the $20 plan. I want to see your own version because, yes, even though you may copy paste my messages, you will get a slightly different design. That's normal, that's expected. When you're done with your version, take a screenshot and upload it to the comments section. I want to hear your thoughts. So how was the experience? Did Claude take a long time? Did it spot any mistakes? Did you have the same error with the map as I did? Tell me about it. I read every comment. So go back in the course, download my text file, make changes to it if you feel like it, and do the exercise. Don't continue without doing it. It's quite important. Okay, have fun with it. 6. Claude Plans Explained: $20 vs $100 vs $200: Welcome back. When beginners use cloth code, the first question is, if I pay 20 bucks, 100, 200 bucks per month, how long is that going to last me? And the simple answer is, it depends on three things. The model you use, the size of the project, and how long the session becomes. Now, a better way to look at it is this. How much does a vacation cost? So when you go to a vacation spot, how much does that cost? Genuinely, can you answer that question? Of course, it depends. Where are you going? For how long? How many people are you going by car, boat, train or plane? There are so many factors, so nobody can tell you a certain specific price, right? Now, back to Clog, think of you a subscription like a fuel tank. So every task uses a bit of fuel. A small task uses, of course, a little. A big task uses a lot of fuel. So you saw how we built the website, and that took about 5% of my five hour plan. But keep in mind I'm using the $100 plan. And, yeah, all in all, in just a few messages, 5%, okay? Now, the result was that good enough? Are we happy with it? That's the main point. That's what you should focus on. Are you making good progress? Is the result quite decent? That's the actual job, you know? Now, back Width Claude right now has three options Claude Pro at 20 bucks per month, Max five X at 100 bucks per month. And finally, the biggest one MAX 20 X at $200 per month. But here's the thing. There's no standard unit of measurement that I can tell you that you can understand that would make sense. Something like 10,000 lines of code or 3 hours of coding. It doesn't work that way because it depends on what you're trying to build. How complex is it? How many messages are you send a bunch of factors. Now, let's connect this to code size. So Claude does not charge you by lines of code, okay? It uses something called tokens. A token is a small piece of text. It can be code, comments, file names, prongs, and Claude answers all count. Those are all tokens. But to simplify it, let's just think about it as lines of code, even though again, that's not 100% correct. So if your project has, say 100 lines of code, that's quite small. For example, a simple HTML page, a very small script of a very tiny Android app. So Claude can usually read that fast and easy, right? But task like explain this file or fix this small bug is light work, okay? So if you're doing just that, you can use the entire session, the entire 5 hours nonstop without any problems, right? Now, if the project grows, if it's something like 1,000 lines of code, Claude has more to read. Now, this could be a small app, a simple website or a basic Android project. So tasks that are still somewhat reasonable. But if you ask Claude to review everything again and again and again, of course, usage is going to grow. It's like asking someone to read one single page of a book and then answering questions about it versus five or ten or 50 pages. Obviously, it takes much more effort to read and comprehend and remember 50 pages. And that's the key thing when someone asks you to remember 50 pages and you have to answer the questions based on what you remember. Obviously, that's a bit tricky. That's the usage part. That's why it's so complicated. And, of course, this goes on and on. If your project has 100,000 lines of code or more, that's a large app. And a real company, you know, it can have an app that can easily reach something like millions of lines of code. So a Netflix like product with mobile apps, backend services, recommendation system, payments, video infrastructure, internal tools and testing, those are millions and millions of lines of code. But what does that mean for you? So initially, any project, you know, the usage is going to be quite small. As the app grows in features and in complexity, it will obviously require more usage, more resources. So Claude will have to work harder. Now, the smarter way to work is this, don't ask something vague inside the huge app project. Instead, pinpoint what you want to do. Claude, look at the log inflow or Claude, inspect the video player module, something. Claude that's a billing issue, that's a bug in the checkout process, something. So you make Cloud code, focus on a small piece of the app, and that way, it won't use up too much fuel. Now, I know that this is a bit frustrating, but nobody can tell you with precision how much juice your proms are going to use. Just click on the interface from time to time and you're going to see how the usage goes up. And with time, you will get a better sense of how things go. Now, let's talk about the models just a bit more. So every company has multiple models. So faster, some smarter, some more expensive, some for image generation, some for voice, and so on. And that's the case with Enthrop. So enthropek built Cloud code, okay? Now, here's the situation as of now, though. Again, this changes constantly. So Haiku is the lightest. I'm not sure that's how you pronounce it, but that's the way I say it. So this is basically for super simple tasks. Think of it as a one liter hybrid car, very small, very fuel efficient. It's not for serious work. I personally never use it. And by the time you're watching this, it may have been already removed from the list. Son it is the default. For the beginners that only want to use the $20 plan, again, this is probably ideal. Now, for me, I would not actually use it for my real world projects unless it's something quite safe, like a portfolio website or something that only I'm going to use or to that people don't have to pay for. So if it's free, that's totally fine. Bugs of expected, that's totally good. Now, I prefer to stick to the top two models because, you know, it's much better for actual paying projects. And when I use it up, I'm just going to wait a few hours until it resets. But to be clear, on the $20 plan, this is probably the best choice, this one right here. Now, Opus is a bit stronger, but it consumes a lot more. This is the bigger V eight. Well, I would say probably a V six, maybe. But yeah, this is a lot more powerful. It's a gas guzzler. It consumes a lot more fuel versus the other ones. But of course, it's also smarter and it's quite efficient. And as time goes by, more and more models show up and older ones get removed. It's exactly like with phones, iPhone 15, 16, 17, and it's the same thing here, Opus 4.6, 4.7, 4.8, and now 50, and so on. So these classes constantly get updated. And of course, there's the V 12, so to speak, the absolute maximum able five. We'll talk more about that later on, but we're not going to use it for this course in short. Now, there's also something called context window. So this means Claude memory. It includes your messages, Claude replies, the files that Claude has read. And basically, if the context window is small, Claude performs better. It works better. If the context window becomes too full, Claude may start forgetting older details, or it may need to summarize everything. Now, this can make answers less accurate. Now, every AI company has the same problem. It's not just Cloud code. Too much information can make the AI less sharp. Think of it this way. If I ask you to read a page of a book and remember it, remember what it says. You could probably do that fairly well. But what about two pages? What about 20 pages. So as you add more and more pages that you got to remember, you will forget small details with about 200 pages, or 2000 pages. So that's basically the context window in a nutshell oversimplified, but that's the gist of it. So when you're working for hours on end and you're sending hundreds of messages and writing tens of thousands of lines of code, Claude forgets, specifically the model that you're using forgets. I can't remember everything. I can't remember what you told it until a few hours ago. But a few 10,000 lines of code ago, right? So again, it's forgetful exactly like we are. So this is why long Claude Code sessions can become expensive and less focused. So, the more files Claude reads, and the longer the conversation becomes, the more usage you're going to use up. So you're going to need more fuel. So my advice, everybody says the same thing. It's quite simple. Make a new conversation per task. And I'm going to show you how you can do that later. Basically, you talk about implementing the checkout, that's one conversation. Then you talk about implementing another feature, that's another conversation. And that's that it's much easier to work that way. Everybody's happier, and they'll be happier, as well. And now one final concept, the cool down. So Claude has a usage window that resets every 5 hours, though that may go away at a certain point. So the idea is that if you use too much in that window, you may need to wait. So if you're doing a lot of complicated stuff, all at once, if you ask for too many things at once that's going to take up quite a lot of resources, you will use your five hour fuel tank. In just a few minutes, maybe half an hour or an hour. And then you're going to have to wait. The session starts when you type in your first message. So again, it really depends on when you want to start. Typically, most people start at 7:00 A.M. So that means it's 12 and then 5:00 P.M. And then 10:00 P.M. The final session. But you do you. And, of course, there's also a weekly limit, and that's separate. You can see your reset time in settings usage. So what plan should a beginner start with the $20 plan? That's good for learning for small projects and light coding. And very likely you're going to use Sonnet, because if you choose that one, probably you can make the most out of your plan. Now, obviously, the $100 plan is much, much better if you are planning on coding quite often and if you want to launch multiple apps. But again, take it step by step. Now, obviously, the $200 plan is for the heavy daily users, so it gives you a lot more room to work with. But larger projects. We'll still drain those resources fairly fast. That's what I eventually ended up with. So I started with a $20 plan, then 100 and now 200. Now, one final takeaway, nobody can tell you, Hey, on the $20 plan, you're going to get ten messages with this model and 15 messages with this model or an hour or whatever. It does not work that. So the only thing that you need to focus on at this point is this, if you can afford the $100 plan, go for it. You'll have a much better learning experience. But again, I think you can start with a $20 plan, right? If you prefer that, you can use a slower, a bit dumber model. But as you're about to see, it's not going to be a night and day difference. So that's the thing. You can start with a $20 plan and then eventually go up. And that's my take. That's the easiest way I could think of to explain how this works. I know it's still a bit complicated, but stick with me, and the more we go along, the more you're going to learn. Thank you. I 7. Claude Code vs Codex vs Cursor vs Lovable: Welcome back. We want to build mobile labs with the use of AI. This is called vibe code. We tell the program what we want done in plain English, and then the AI does the heavy lifting for us. It writes all the code. It even does the testing, and at the end of it, we're going to get a mobile lab, and we can launch it and monetize it. Great. But the problem is, there are so many platforms out there. How do you know which one is best? What's the right choice? Is it Cloud code? Is it Codex, which is now Chat GPT, Cursor or Lovable. And that's just to name a few they have actually a bunch more of them, so all of this can make your head spin. And let me clear everything up right now. At this moment in time, there are only two main choices. It's Cloud code from the company called Anthrope or Codex, which is again just now CHAD GPT from OpenAI. Again, the company behind HADGPT that we all know. Now, you can think of it like Samsung versus Apple. So these are the top two companies. They both deliver a fantastic product, but in slightly different ways. What about the rest? Well, it's exactly like with mobile phones. There are many other companies out there that try to make a name for themselves. They have fancy launches. Some focus on having a bigger battery, a better camera. But, in essence, most people still use a Samsung or an Apple device, and only a handful of them go for Huawei, Google Phones, Xiaomi, or any other brand. So that doesn't mean that Codex and Claude will always be on top. Of course not. Cursor has been bought by Elon Musk, and that means it's getting humongous resources that may change everything in months. Google is a sleeping giant right now, and it's really not competing. So as I said, things may change fast. Plus, Mark Zuckerberg just came out of the blue. He reactivated his Twitter account, X account, and he posted something about launching his own AI, which is absolutely incredible because there's a lot of competition. But here's where you get relax. The differences between the top layers are not substantial. I've used Cursor. I've used windsurf, which is now called Devan. I've used them quite a lot. I can confidently say that as of right now, they're second tier and by a big margin. Lovable is more for beginners and very casual users. Plus, it's much more expensive, and you're basically just paying for the better UI for the better interface. Now, for the big eyes, again, I've used Codex, hat GPT, and Cloud Clot code, nonstop head to head, and they are basically neck and neck. Okay? In this course, we're going to use clot code, but honestly, you could just as well use Codex because that's pretty much on par. The building experience is just about the same. Now, what about their models? So again, that's GPT 5.6. That's Fable five, which was banned after the launch, it's Opus, there's a lot. But if you're still curious about why there's no clear winner between these two companies, let me explain because it's fascinating. So imagine you're buying a car and you love speed, okay? You want a fast car. Well, that's pretty easy, right? You look at the price, and then the zero to 60 time. So to simplify it, let's just focus on horsepower. That's even easier, right? So let's say that for 20 K for $20,000, you can get a car with 200 horsepower. And for 30 K, you can get a car that has 500 horsepower, so much faster car, okay? And then the question is simple. If you can afford it, it's a done deal. Get the faster car, right? Now, with that mindset, you might want to compare Codex versus Cloud code, but they have the same price, and that may change as well, but as of right now, they're constantly neck and neck with the entire plan. But maybe they can compete in pure specs, right, in specifications. No, and that's the biggest issue with AI models from all companies from every single one of them. There is no fixed horsepower that's guaranteed to you. This is what you need to understand about all of these AI platforms. So when you purchase a car that has 300 horsepower, that's exactly what it has. If you want better fuel efficiency, sure you have the option to lower your power, and that's quite intentional. This an eco mode, and you will see the car will become much slower, okay? But it's under the US control. You can see that you had an eco mode and you're doing it to save fuel, totally fine. Well, with these AI platforms, they can put you in eco mode or in sports mode without telling you. So I'm going to say that again. You have a subscription with company X. You put in a prompt. You may get a ten out of ten result right now. But after an hour, the same thing, you may get a five out of ten result. Why? Because I repeat, they have put you in eco mode. Some say that clod code is incredible, while others say it's absolutely horrible. How can that make sense? Some are in sports mode, some are in ecomde. The company Anthrope is constantly adjusting your horsepower, and you have no idea about it. So when you fire up any prompt, when you send a message, you may get 100 horsepower, you may get 1,000. In most cases, you're going to get somewhere near the middle. Now, you may be furious, right? You may be angry about it because you want what you paid for. But again, nobody promised you 1,000 horsepower, a specific zero to 60 time or a ten out of ten result. Nobody promised you that. They gave you access, and that's it. This is why the pricing page is so vague. Five X, 20 X. What does that mean? The truth is, you step on the gas pedal, the message gets sent to the company anthropic or open Ae or whatever. And then based on 1 million factors, you're going to get a result, better or worse. To really nail this point, some people say that at 9:00 A.M. There's always massive traffic and that the platform, Cloud Code, for example, is dumber. Why? Because more people are using it at that point in time. Because obviously, they're getting to the office, they're starting their laptops and they're starting to use Cloud code at the same time. And here's the thing. These companies and Tropical Open AI, they don't have unlimited resources. So what they do is they throttle usage. They limit consumption. They put you in ego mode. And that's simply because they don't have enough processing power or electrical power to fulfill the needs of everyone that's using their service. They can't admit it. If they did so, their stock price would fall off a cliff. They would lose investors, market share users. Everyone would flock to their competitors. But here's the thing. All companies, all AI companies have the exact same issue. This is why they're all building data centers and power plants. They're trying to get nuclear reactors. They need more power. So that's why they're constantly putting people in eco mode. So this is, by the way, why they're purchasing so many GPUs from Nvidia. This is a gold rush for these companies. These are multibillion dollar companies, and multibillion just doesn't even cover it. So the numbers are staggering. People are getting rich. But the thing is, they can't be transparent because that would collapse their business. So when people say, Oh, Codex is incredible and people say Codex is slow and dumb, they're both right. I've experienced it. I've been using Codex and Claude at the same time in parallel, and I can tell you that both are fantastic and horrible. The situation changes day in day out. For me, it's clear this day that in certain periods, it may be a few hours or in some cases, a few days, something happens and my power is limited. I'm being put into eco mode. Now, I'm not being singled out by these companies, by the way. No, this is happening to lots of people all at once. So what I did was I've learned to accept it because of one simple reason. Even though I'm not sure if I'm getting 200 hortzpower or 500, I'm still getting 20 times as much as walking. So this experience, where everything is fluctuating, is still miles better than not having access to these tools of simply coding it yourself or hiring a developer, it's still a much, much, much better experience. So in conclusion, there is no best to all, and most if not all AI companies adjust the power you're getting on the spot. So that's why I encourage you to choose one and stick with it. The competition is so intense that even when something fantastic comes out of company one, say, Cloud code, then open AI will release something similar in a matter of days at most a couple of weeks. So with that info, I hope you can relax about chasing the absolute best tool because there isn't one. Now, my car analogy is not 100% technically correct, but I think it gets the point across. You press the gas pedal, you send a message, and you're not sure what you're going to get. It is frustrating, but it's still a fantastic experience versus all dotted options. So stick with one, and that's it. Codex with Cloud code, and you're done. Let's continue. 8. What We'll Build and Why: Welcome back. I'm sure you're curious about what we're going to build and if it aligns with what you want to build, right? To cut it short, I'm going to tell you that, yeah, you will be able to build just about any app out there because the principles from this course are universal. So let me explain. We're going to build a wallpaper app for Android phones. Now, I know that sounds super basic and not that exciting, but it allows us to focus on the big picture, and that's actually the real value of the course. And here's so we're going to have some lovely photos, and we'll create an app that has a button. Once you tap that button, the image will become your phone's wallpaper. Okay. But then what? Well, then we have to think about getting users, and that requires paid ads and app store optimization, which is the same thing as SEO, search engine optimization, or otherwise said, getting organic traffic. But if you want to launch paid ads, you have to generate some money through the app, right? And that breaks up in two buckets. And on the flip side, you can use a paid subscription. But then how can we be profitable by showing ads if we're also running paid ads? Does that make sense? So where do we get our ads from? Is it going to be from AdMob or meta, Facebook, or one of these many other ad platforms? Who pays the best so we can actually make a good return? And moving on to the paid subscription side, how do we make certain people pay a certain amount of money on a monthly basis? What features are going to get them excited, so they can gladly pay? And how do we implement those features? How do we think about them? How do we approach them? And on the organic traffic side, because maybe you don't want to spend money to promote your app, right? Okay, how big is the app size? If you include too many photos inside the wallpaper app, it's going to get bloated. Say it's 50 megabytes, right? That's going to take too long to download on most four G phones, and Google won't like it. But if you have only one single photo, then again, that's not a great app either because people won't pay for that. But what if you add multiple images but compress them? Sure, that may work, but if they're low quality and pixelated, users won't be happy. And how do you make sure that users are actually happy? What analytics should you check? What type of analytics exist for apps and what should you look for? Will these analytics show bugs or crashes? That would be quite important, right? And then when you want to make an update, how do you do that? And how do you make sure that people actually update to the newest version? So that's yet another thing to discuss and closely related, how do you make people use the app often? If they use it one single time, it's hard to generate revenue. If they use it every other day, that's fantastic. But how do you get to that point? The thing is, if you're too aggressive with your ads and engagement, you may lose your account. Google may suspend you. Now, is that a big deal, or can you just make another account just like that? For example, like on TikTok, which allows you to do a whole bunch of accounts just like that. We'll have to talk about that. Now, going back to organic traffic, again, you're going to need ratings. But how do you get ratings? Again, if you're too aggressive about getting them, you may get permanently suspended permanently. And if you have too many features, how are users going to find out about those features? Well, you're going to need some type of onboarding, some type of initial presentation where you show off the main features of the app. This has to be beautiful but concise. But what if users don't speak English? Well, that takes us to the app store optimization and getting organic traffic. You need to translate your app, but you also need to translate the screenshots, as well. And talking about screenshots, if your app doesn't look beautiful, people won't use it, even though it may be technically fantastic. And all of this can make your head spin. And I'm just scratching the surface here. There's far more to it. This is what I'll teach you in this course, step by step, all totally explained. That's why we're making a simple wallpaper app, so you can focus on all of these other things around it because how you get ratings, how you monetize it, how you check the analytics, how you update the app, all of this can be applied to any other type of app. But with not doing anything too complicated for the functionality of it, like an AI app that whatever talks to you or any random game because that would defocus you from what actually matters. Those buckets are incredibly important. Without them, you cannot succeed. Apps don't become viral on their own. No, you have to use this framework. So while you may not want to launch a wallpaper app, which I'm sure you probably don't want to do that, this will help you tremendously. This shows you how a very simple concept. You have a photo, you tap it to set it as a wallpaper, and that's that. How that simple thing becomes an incredibly complex thing in no time at all. Stick with me and you'll see what's what. That's what we're going to build. With these principles, you can then build anything that you want. Let's go for it. 9. Don't Ever Make This Type of App: Come back. I want to stop for a moment and give you a clear warning. Don't ever, ever make a game. That seems a bit odd, since a lot of people love playing games on their phones. And if you're the great designer, you could come up with some fantastic graphics and make something quite beautiful. So then why not? The mobile game industry is huge. The biggest companies are generating hundreds of millions of dollars in revenue. Hundreds, no exaggeration. So you making a mobile lab game on your it is like trying to find oil, get it from the ground, and then selling gas all on your own. Well, it's technically possible, you're far better off trying to win the lottery. It just doesn't happen. See, the most well established games out there have an army of data scientists, incredibly talented engineers, and tens of senior designers. This is not about gameplay or beautiful graphics. It's not about that. This is data extraction. This is about making the app as addictive as possible and trying to squeeze out every single cent out of your users. This is done by tracking every second, every second the user is inside the app. I've seen some presentations where developers spoke about how this is incredibly complicated. And they were comparing it to your feed on TikTok, Instagram OM. It's not random. It's not by chance. These algorithms, they're engineered by some of the most brilliant lines in the world to make you stay active, to keep scrolling, to keep playing. To show you the right content at the right time. In the game, they measure your reaction in milliseconds. They put you in brackets. If you're a casual user, a potential whale, if you're the type of person that spends 5 minutes per day with 5 hours per day, they give you rewards and special power ups and they're checking everything that you do everything, every hesitation, every tap, they're feeding that back to their dashboard and then making it more and more and more addictive. It's like running a casino. Now, sure you may know how to play Blackjack or whatever, but the industry behind gambling behind the casino is so incredibly complex that you can't touch it. Now, at this point, you may say, Ah, Chris, I just, you know, I don't want to make the next candy crush. I just want to have some fun and build a lovely game with some cute characters. Nothing too fancy, right? Sure. The problem is, it takes so much time, so many resources. You will spend literally years building it. You're going to get tired of not having anything to show for. It's the fastest way to burn out. Even if you do a simple game like Tita toe, connect, whatever, small puzzle, it will still take you ages in terms of money, energy, whatever you want to call it, all of your resources, it's going to suck it dry out of you. So the thing is you're going to be focused on cue designs, on character animation, on development, on story lines, on a visual style. And then here's the thing. You're going to neglect everything that actually matters like monetization, ASO, app store optimization, onboarding, analytics, paywalls, retention, repeat use. That's why I don't want you to waste your time. Instead launch two, three, five simple apps based on my framework in this course, and then you can move on to more exciting ones. But the initial one, no, make a weather app, a note taking app, an alarm that reminds you to drink water, the most basic things. Something that's incredibly simple. That's what you have to do like a wallpaper app that we'll go to build in this course. But again, with a twist, you know, be it a feature, or maybe a beautiful design, but that's it. Don't complicate it. Don't try to make the next flappy birds or whatever else. Please don't make again. 10. How I Lost Apps That Were Making $800 per Day: Come back. I want to tell you how I started developing mobile Labs and how I got to about 800 bucks per day and how I lost it all at least three times. So my best months were over $50,000 in revenue, and I explained everything in detail in my book, 1 million from Photoshop. I do want to come across as being arrogant to at both the thing is, I really want to make sure that you understand that I've been in the trenches. I've lived it, and I have a lot of experience. Now, a few years ago, my team and I were designing apps in Photoshop, okay? To keep it concise, I started making keyboard teams for a popular app on the Google Play Store. That app was called go keyboard. It was one of the most popular keyboards at that time. Now, one of my friends found out how to use different software to find out how go keyboard worked, and that allowed us to create skins with themes for. So if you were a fan of, say, red and blue, we had an app for that. We had a skin for that. If you loved Minecraft, we had a theme designed in that style. And as we launched more and more themes, some of them went viral. The apps were fairly simple. The process was this. You download it, you hit Apply, apply theme, and then the skin would get applied to go keyboard if you had it installed. If you didn't have it installed, you had to go and download that as well. Now, we started around 2012 or so, and we grew to about 300 400 bucks per day. So that took us about, I would say, maybe a year, maybe two years, something along those lines. But because we wanted more and more revenue, we tried different ad platforms that promised us better pay. And here's the thing. When you enter the you were shown full screen ads or various types of banners. Now, the full screen ads obviously did better than the banners, which were much smaller. But some of these full screen ads, called interstitials, had sound, okay? Some had fantastic animations. Some were scanny and they told you that you had a virus on your phone and that you had to install this specific antivirus app. Now as a publisher, you don't really know what's being shown inside the app. There are loads of companies that serve ads. For example, AdMob is owned by Google. So they review every app, every publisher, everything that goes on quite well, so you won't really get any spammy or malicious ads, right? Now, META doesn't review them as well. So you may get more aggressive ads, okay? And there were quite a lot of companies out there. Ah, basically, it was a tough choice. Now, again, some ad platforms only showed surveys. So paid you very, very well, but not based on when the user clicks, but based on when the user actually installed something. Some only paid you if you showed the ad. No matter what happened, no matter if the user clicked on it or not. Now, as you can imagine, it's a hard topic to navigate. But in short, you can think of it this way. A basic ad would get you whatever. Let's say $0.05. A more intrusive ad may get you $0.50. Getting app installs may get you two bucks. Getting a survey may get you five bucks and so on. So really, it's a matter of how you optimize for that traffic because you have the same amount of people every single day, say 100 people. But if you change the ad format with the ad structure, the ad provider, you could potentially make ten more money, 20 more money. Now, the thing is, this is not purely about greed. It's about trying to maximize your ad revenue. And here's another factor. So say that you're using meta ads. So Facebook as your ad provider. But most of your users come from, let's say, Germany, whatever, any country, right? Let's say Germany. And let's say that Facebook ads doesn't have a whole lot of ads from Germany, okay? There are no people that want to advertise to German people, okay? Let's imagine that. So you know what would happen? No ads would get shown inside your app. So that would be a problem. Or they would see ads that didn't make any sense for them like a lawn cutting service in the United States in Idaho. Of course, your revenue won't be as good if you don't show the right ads to the right people. So that's the thing. It's not just about greed. Diversifying where you get your ads was quite important. Well, back to the story, we used a lot of ad platforms, but we lost our entire Google Play account because of one provider. That provider seemed like a good company, a serious company. They said they were compliant with Google Play. We saw their ads on our phones and they seemed all good. Again, this was a huge company. I was not something that was shady or whatever. But yeah, after the few months, they were blacklisted, and Google simply suspended all developers that showed ads from that particular company. So that revenue of 3400 bucks per day all gone in one failed swoop literally zero notice. There wasn't any warning, nothing of that kind, 100% suspension, permanent. And here's the thing. We had well over 100 apps, and we had multiple developer accounts, something like two or three, at least, and all of them got suspended. Because Google found out that they were somehow linked. They found out through various means. It really doesn't matter. Now, the best you could do when you got suspended was to fill out a form and under 500 characters, not words, characters, 500 characters, why you should be reinstated. And basically, that never worked. That never actually worked. That's what you'll find with Google as a company, whether it's YouTube or Google Play or AdSens AdMob, whatever. Sometimes you're going to get suspended for no good reason, and there's nobody to talk to. There's no department, no email, no live chat. It's all automatic. It's all copy paste answers. You violated the terms and conditions, you're done. And again, if you look on YouTube, you're going to find the same story over and over again. The thing is those creators don't get any traction. But that's the thing, this has been happening for years. This is not a new thing. The thing is, nobody is going to cry me a river for, you know, losing an account that was making 400 bucks per day, because, again, it's not something that most people can relate to. Back to the story, we saw the huge potential, so we then got an office. We hired people. The team grew fast. And at our peak, we had about 20 people. We had product managers. We had coders. We had a lot of designers, a big team. So we were making 800 a day on average, but we had months where we did over 40 K in revenue, $40,000, $50,000, even more than that. But, um, and the thing is a good chunk of it was indeed profit, but with the team, it was less so than at the beginning, even though it was more revenue. But in any case, at that point, we decided to be on the safe side. We decided to make our own keyboard app so we would not get suspended. So we would not rely solely on go keyboard because that's the thing. I go keyboard didn't allow us anymore to skin dip own app, that was not a good idea, right? So we made our own keyboard. Then we decided to only use AdMob and one other huge company to get ads, okay? Even though it wasn't 100% performance, even though we were not optimizing our traffic, we decided, let's not be greedy, okay? We reduced the number of ads. We did everything that we could. We never designed stuff that was copyrighted with Trademark. We knew people loved Marvel movies, Pokemon, and whatever else. But we never did those types of things because suspension would be certain. We used VPNs, virtual machines, different credit cards to create different developer accounts, and a lot, a lot more. And even so we still had suspensions, permanent suspensions from time to time. But as Google Play evolved, their terms became a bit clearer because here's the thing. For loads of years, they would say stuff like, Don't show an ad in an unexpected place. Okay, what does that mean? Seriously, what does that mean? The only example they had for years and years was this. If your app is a game, you can show an ad when the player fails level. Okay, well, if it's not a game? Nothing. No answer. We begged and pleaded, and then we obviously got hit with more and more suspensions, and we didn't know why. Was it the position of the ad, the number of ads? Was it the content of the ad? Was it the ad format? We tried everything that we could, but nobody would answer. Sure, other companies around the world saw the same opportunity. So it became a frenzy. At one point, we had a lot of competition, and they had the exact same issues. We were monitoring their accounts, and boof they would get suspended, and it would say that they were suspended. So lots and lots of companies around the world could not figure this out. At one point, we were getting well over 100,000 downloads a day, sometimes as high as half 1 million downloads per day, because we had thousands of apps, okay? Red keyboard, blue, pink teal, red and blue, pink and blue, whatever you can think of, we made it. And again, other companies did the same thing. But like I said, other companies had the exact same problem suspensions without any warning. And in late 2016 or so, Google Play really clamped down with huge teams got completely suspended. Apps with over 50 million downloads, one single app with over 50 plus million downloads, just like that removed. Everyone got liquidated, and there was nothing that you could do. And slowly but surely, just about every single company went under. Mine included, because again, you could not speak to anyone. You did not know what the problem was. Google Play just kept suspending us, and that was that. So that's how I lost everything a whole bunch of dimes. This is the reality of working with Google. Things have much improved recently. But, yeah, just so you know you don't want to get suspended. Just so you know you don't want to get suspended. It's permanent and it's incredibly difficult to do anything after that. I do want to say that I tried to hang in, but I lost a lot of the profit I previously made just because I didn't want to fire my team. So I kept hanging on, but, yeah, I lost a whole bunch of money because of and the fortunately, after over 18 months of trying to get back and more and more accounts getting suspended, I had to call it quits. And so did most of the companies out there. And once you're suspended, I want to make sure you totally get it. That's it. If you try to start a different account, another one, you're going to get suspended immediately, sometimes after a few minutes, sometimes after a few weeks. It was gut wrenching. It was really awful because you didn't know what you did wrong. You didn't know what was the issue. If they could have clearly said, Hey, you know, don't show an ad when the user wants to exit the app. Okay, not a problem. We could have immediately done that. We could have updated everything. But, yeah, suspensions came out of nowhere. And I just got sick and tired of it, you know? Plus, when you launched a new app, it didn't get the regular boost that Google would usually give you. So they used to send you some traffic to see the quality of the app. And if people liked it, Google would promote it to more and more people organically. And if they also liked it, it obviously grew quite a lot without you having to pay for users. But after a while, that stopped, as well. You can actually see how the number of apps on Google Play grew, and then it sharply went down. And now with vibe coding, it's coming back up again. But while you may think we showed too many ads or that we were too aggressive, let me be clear. I would have been happy with 50% of my daily revenue if I had the certainty that I would be safe. Greed was not the issue. I really want to be clear about it. It was the lack of any clear documentation about what's allowed and what's not. Even today, there are loads of people that are begging me to publish their app on my account. And why? Because once you lose your account, you're done for forever. It's not a one month suspension, not even a year. You're done for life. I have no idea why. But, yeah, that's the game that Google plays. So to sum it up, you can make great sums of money, but tomorrow, all of it may be taken away by a robot. I remember when we lost one app, one single one because of nudity. It was a Sand team keyboard, sand dunes, right? And the algorithm saw it as nudity. So this was about whatever ten years ago, so AI wasn't that smart as it is today, right? So basically, we got used to that instability because when things worked out well, we were flying. But when things were bad, the frustration was unbelievable. That's why you have to be smart about what you publish, what ads you run, how you promote the app, the whole 9 yards. I hope my story was somewhat helpful and it scared you a bit because good, that's the point. As fantastic as this space can be, it can also be incredibly nerve racking and frustrating. So my advice, please follow the tips from this specific course. Don't try to maximize the money just yet. Don't publish any random ideas. Start with what I recommend in this course. Okay, let's continue. 11. Work with Certainty: Save, Back Up, and Roll Back: Welcome back. I want you to work with certainty, with confidence, but AI is sometimes incredibly dumb. It's silly. It's ridiculous at times. You're about to see that throughout this entire course. Sometimes it doesn't make any sense whatsoever. So how do we manage that? Well, it's quite simple. By saving our progress, and if something bad happens, we can jump back to a version that actually worked. Think about it like a video game. So before a hard boss, you save, and then you go into battle. And if you die, it's not a problem. You load that saved game, and then you try again. We're going to do the same thing with our app. Every time we get something working, we save a checkpoint. We save the game. If Cloud Code breaks something later, we can just load up the good checkpoint, right? Nothing lost. So the tool that does this is called Git and we'll back up those checkpoints online on a site called GitHub. So Git is a huge complicated topic. Branches, merges, pull requests, all that scary stuff. We're going to skip all of it on purpose. You don't need any of that to launch an app. Of course, it helps, but we want to get flying as fast as possible. So I've compressed it to only three things. So the first one, save a checkpoint when something works. Two, go back to a checkpoint if something really breaks and three, keep a backup online on the cloud. So if your computer dies, your project is safe. Just to be clear, we can save and load all we want, but if our computer catches fire, right, if the SSD breaks, whatever, you're done for. So that's why saving and loading locally on your computer is not enough. We have to put it all online. The code has to be online, so it's nice and safe. And in case we need to switch to a new computer for whatever reason, we can always download the latest version from the web. And that's that, let's start. First, this is a new session because I restarted my computer. Now, before we begin, let's check. We are in the correct folder. We can see that here. We are bypassing permissions. Good. This is the model, and this is the effort level. Cool. Oh, it seems we on 9% for this session just in case you're curious. Now, let's tell you the following. I want to backup this project on GitHub, help me create and connect my account. Not the best spelling or phrasing, to be honest, my apologies, but Claude understands. So he names this session right here, and then it starts working. Okay, after the while, it's asking us a key question, public or private. This is fantastic and easy to understand. Read the description, and you can decide. Now, in most cases, you want it private. In case you want to get a job where you're about to have the interviews, you probably want it public. Okay, next question. We have two choices, but notice how Clog tells us the first one is the easiest. So just in case you're ever unsure about these choices, you have another one here where you can simply ask a clarifying question. Tell it, I don't understand this choice. I'm a beginner. Help me choose. And that's that. So this approach always works. Okay, next, what name? Doesn't matter for this point. For this example? You can probably choose one on your own. And Claude begins to do some stuff, and it's actually fascinating to watch it to watch it work. Should you read every single line? No, not really. But I do encourage you to try to follow it, even though you may not completely understand it. This is a good habit to have. Now, do your best to read up. And it did install something, another tool that can use to help us use GitHub. Okay, great stuff. Now we see some steps. Now, I'll skip to this one here as this is the most important one. So this is the official GitHub website, and we have to sign up. This is exactly like signing up for Gmail or any other platform. So this is totally free. There's nothing special here, so I'm just going to zoom to the web. It will ask us to confirm some stuff via email, put in some codes, but that's all done. Good stuff. Now, when you're done well, you can tell Claude. And here's the thing. The power shell step isn't too complicated, but if you want to test Claude limits, you can tell it. Hey, you do step three. There's absolutely nothing wrong with that. Now, if you want to save as much fuel as possible, obviously, that's not a good idea. If you can send fewer messages, of course, that's going to help you in usage. But here, I want to show you how Claude responds. Note that I forgot about step one about choosing a name, but Claude can still continue. Okay, after the second, Claude says that he can do it on his own. No need for anything complicated. You just got to copy basin code, which is fair. That's painless, quick and easy. And one thing to note, this time it automatically detected that we executed those steps. Other times, you have to tell it, Hey, I'm done. Here I typed in done, but actually Claude already started the process. That's fascinating. Let's pause. So this message was cued but not sent. So Claude is busy doing some stuff and it doesn't actually acknowledge my message. So once it finishes, then the color of this message will change, and Claude will actually read it. Now, in this case, we should remove our message because it won't be relevant anymore. Plus, it's going to save us fuel. So I'll simply go next wet and click on the X symbol. Great stuff. Okay, so it's working. It's created everything. Then, yeah, that's basically the entire process. You only do this once, and then you can simply say one of two things. Commit, which means save a checkpoint, save. So commit a save, and then push, which means send it to GitHub, so it's backed up online. So it's in the cloud, so it's always safe and available. Now, let's pause for the moment so you can catch up. And in the next video, we'll try it out. For now, please pause, watch the video again, work along with me, and pause as often as you need to work along. Have fun and only then continue. 12. Make Changes and Use GitHub: Welcome back. We've set up our GitHub account, and Claude says everything is safe and sound in our repo. Repo means project. Now, let's have a look and see. The name of this project is first website, and that's based on the name of the folder that we created. We can, of course, call it anything we want. Now, inside GitHub, here's the thing. You don't need to look at much. You have a quick description of the project that Claude wrote. You can see when it was last edited and so on, okay? But just to double check, let's ask Claude. Is this version of the website on GitHub? So when in doubt, it's much better to ask and burn a bit of fuel rather than not understanding what's what. And yes, Claude confirms it. Now, because I restarted my computer, I don't know if the URL is still the same, so I'm just going to ask Claude about it. I'll tell it my objective. I won't complicate things. Then yeah, this is all good. So let's make our first change. Let's completely change the color scheme, for example, by simply saying, change the design of the site to a dark theme, okay? That's how we can test out GitHub, and it will really be helpful. But note what's happening. First, the response from above is quite long. I only wanted the link to the live website, but Claude responded with a mini story with a novel. So sometimes it's a chatter box, and it's wasting fuel and energy. Here, it's been a minute and it's hesitating quite a lot. Let me speed this up. So at the five minute mark, it's still not ready. Now, higher up you can see it saw a typo that tool timed out. And this is quite strange stuff. And that's what I actually want to focus on for a minute. So the task is simple. Change a few colors. There's nothing complicated about it. It's one of the easiest things you can do. But at this time of the day, this model with this effort level is having issues, even though it's super simple code, not a lot of code, and it's code written by the same model. So this is a slam dunk. This is the ideal situation. It's also a fantastic model for the coding, again, the effort level is set to extra, I believe, right? Yeah, so this is the reality of working with AI. But let's back up. If it's not the instruction that's bad or complicated. If it's not the context window, that's too full because that's not the case. If it's not a very cheap model with a very low effort level, then what's the problem? Nobody knows. And here's how you can test it out. You have to recreate all of my steps, right? When you're going to ask for dark mode, there's a very good chance that it won't hesitate this much. There's a very good chance it will work just like that. And that's because, again, AI is non deterministic. That's a fancy way of saying that you never get the same snowflake or drop of water, okay? It's always different, even with the exact same circumstances. By the way, this is why fast mode exists. It's taking ages. This is why effort levels exist because again, you may want to speed this up, right? You could speculate that, you know, with a different effort level. Maybe with fast mode turned on, maybe this would have not happened, right? But the truth is, nobody knows. So right now, we're just going to wait, and that's that cause here's the thing. Too many people may be draining resources from anthropic right now. So maybe the company doesn't have enough power, so they're putting me in eco mode, I repeat, I don't know. You won't know. Nobody knows. The takeaway is that you need a lot of patience and you got to be understanding, again, this is a clear cut case. It's a slam dunk. It's a simple task. Claude wrote it, right? But again, it is what it is. So just to be clear, this is not my fault. I didn't do anything wrong. My setup is fine, but this is a bad session that's eating up resources for no good reason, and it's going to happen to you, no doubt about it. Maybe not in this scenario, but it is going to happen. So I love the fact that I got this on video because if you try to explain why AI is so bad at times, you couldn't do it without this recording. So after about 12.5 minutes or so, literally, it says that it's done. So let's check it out in Chrome, but it's the exact same as before. Nothing happened. 12.5 minutes for nothing. And we grew our context window, and we wasted a part of our five hour usage for what? Now, to be completely fair, I had to use Control Shift R, and it did say right here that I should do that. I wasn't paying attention. So again, take it with a grain of salt. But yeah, after 12 minutes of staring at my screen, then seeing a huge response from Claude for no good reason. Yeah, that's on me. I jumped the gun. But again, it will likely happen to you, too. This is why this is so useful a Again, these things are going to happen left and right, very, very often. So I did say I don't see the changes, but after the hot key, yeah, it was fine. So I decided to stop it so we wouldn't waste any more time. So now back to GitHub, we saved the initial light version. Okay? Now, let's ask it to save this dark version, which is done through the command Commit. Okay? Then upload it through the command push. So commit and push, okay? Commit and push the dark version. So something pops up and we have to sign up. No worries. He accept. And after the second or so, we'll be done with the second version. Okay, now we can see the number of commits. We have two checkpoints, two saves, and the second one is nicely labeled dark theme. If you plan on doing a lot of visual changes, you can ask Claude to include a screenshot in the description of the checkpoint, so you can better see what's what. But I'm going to do this. I'm going to ask Claude to change the currency from dollar to euro, and this is just an intermediate step, okay? This is a cool test to see how smart this model is. As you probably know, the dollar and euro have slightly different values, not by a huge margin, but some conversion is needed. Will Claude do the conversion or will it just change the dollar symbol? That's the test. Now, previously from my local currency to dollars, yeah, I did a great job. But not this time around. No, this is a bit of a failure, so there's no conversion. It just replaced the symbol. Okay, this is not ideal. Again, this is how you can better understand different models and different effort levels. Okay, now let's use the load game command, so you can see why GitHub is fantastic. So let's assume that we made multiple changes and we're in a bad spot. Maybe we broke the website. Now, we could potentially fix it, but that would cost more resources. So let's just go back to the safe point where the website was working fine, the light version. So I'm going to tell Claude this. I don't like it. I want to go back to the light version. Now, funny enough, Claude is very, very chatty in this session, very affable, friendly. Good news. The original light version is safely saved in your GitHub history. But here's the final interesting point. Claude decides for me that it's going to keep the Euro symbol. Typically, when you go back to a previous point, you should lose all progress. So imagine we put in a different form. We added more photos and so on, right? Typically, that would all get thrown away because the safe point obviously doesn't include them. But here, Claude is thinking that I'm quite likely going to want to keep the eurocurrency. I have no idea why it made that assumption. But, yeah, that's fascinating. Let me know if it does the same on your end because, again, these things change. And yeah, after a while, it's going to give us the original version, but with Euros, again, this was not supposed to happen, but the model is quite smart. So overall, this is how you can use GitHub. You can create multiple checkpoints so you can work with confidence. If you ever go down a rabbit hole, like, spend whatever hours trying to edit something and it all goes wrong. Now you know how to load up a saved game. But note one thing. Claude is giving us a heads up. Hey, this is basically a new version, okay? Sure, it's the saved light version that's already on GitHub, but it has some changes. So this is a third state of the project that's not saved on GitHub. And yes, we should commit and push it again. Though the change is a bit small, I would not make a new commit for these small changes. I would actually bunch them up together so there's more progress. But, yeah, that's GitHub. And to be fair, how often you save is really up to you. You could be a maniac and do it for every single step for every single feature, but most people prefer to hit the save button when they finish a level or they defeat the boss or something big. So when you manage to implement a big change, then you should save. One more notice that I hope you won't have to go through. At times, Claude misunderstands you, and it begins changing a lot of stuff, stuff that's not related. So you ask for the new color scheme and the map doesn't work anymore. The form doesn't send anymore emails, stuff like that. So saving on GitHub is not just about you being undecided about a design related thing. No, it's a real safety precaution because at times Claude, like all AIs, is incredibly dumb. Let's continue. 13. Section Conclusion: Welcome back. I'm going to be short. We started a mobile lab career with a website, and we spent quite a lot of time on things that aren't exactly related to mobile labs. And why is that? Because it was easier for you to get started. You can see a website from top to bottom. You can quickly see how a colored scheme should work or how saves Load Gain feature is useful. In an app, your changes won't be as visible. Most of the time, we're going to do a lot of code editing that's anything but visual. It's basically invisible. And the biggest issue with that is that sometimes Claude makes silly mistakes. It makes silly decisions, and it goes down some rabbit holes that have no sense. You ask it for the glass of water, and it goes to the closest ocean. Which technically, yeah, does the job, but you wanted drinking water, and you wanted it in minutes, not days or weeks. And then if you tell it that you actually wanted to drink water, it's going to make a water cleaning power plant. So everything except saying, Hey, I made a mistake, let me go grab a bottle of water from the fridge, okay? So it refuses to acknowledge its mistake. It takes the water from the ocean. It makes a power plant to actually treat the water so it can give you actual water, and it doesn't make any sense. And the chances that you're going to discover this behavior you know, to catch it early, it really doesn't happen. Chances are you're going to catch it in the act that's way, way down the road when it's far too late. So that's why the GitHub lesson was very much needed. Claude sometimes builds these massive things that aren't needed. I've worked with Claude Code for months on end at least at the very minimum 8 hours per day every single day. And at times, I'm so happy. I get to ship beautiful apps and websites and all of that without being a developer myself, you know. But other times, I see it struggle with basic things. I see it take up so many resources for something that's so simple, so basic, something like, again, changing a few colors. So yeah, I'm waiting for my glass of water, and Claude replies that he's near the ocean, that I just got to wait a few more days. That's the thing. You have to be constantly skeptical about what the AI is doing and what it's telling you. You have to try to keep it on a good path. And at times it will surprise you. It's going to give you fantastic ideas. It's going to be proactive. It's going to do some extra work that's really thoughtful that you didn't even consider it, you know? But as of right now, you got to keep your guard up. You got to stay focused. You have to guide it every step of the way with a very clear path. Otherwise, you have toast. Well, at least your bank account and your usage. But with that being said, let's get started. Let's get to the meat and potatoes of this actual course. Let's go for it. 14. Start Building the App: Welcome back. Let's start building the Android Wallpaper app. Okay? I have clot code opened, and we're going to take it step by step. First of all, this is how the UI looks like when there's an update available. This pops up on its own, so you don't need to manually check. I'm going to update right now, and it will automatically start again on its own. Sometimes it takes a minute or two. Okay, next, let's make a brand new folder on our computer. I like to make a new folder on my drive called Apps from Mobile Labs, and inside it, I'm going to add another one called Wallpaper App Android. And that's where Claude is going to build everything. Okay, and Claude launched, but it seems it has yet another update, which is a bit odd, but okay, I'm going to update it again. But first, let me set up my folder. So we'll click here and we'll browse to that specific folder that we just made the Wallpaper App one. Okay, this is it, and yes, I do trust this word space. Speaking about that, let's change this setting to bypass all permissions because that will keep things going. It won't stop every few seconds to ask us for permission. Okay, now let's update once again. And while that's going on, I'm going to tell you why I won't use the absolute top of the line model for this course. In short, that's a rolls Royce. It's extremely expensive, and it's an overkill for what we're about to do, and most of my students are not going to use. You will need the $200 plan for that, and that's a bit ridiculous. The whole point of this course is to teach you how to think and how to plan for the successful career as an app developer. The actual coding part is maybe 30 to 40% at best. So I'm going to say that again. The actual code is not the biggest concern. Getting traffic, getting organic traffic, monetizing it well, checking the right analytics, getting repeat users. These are some of our priorities. Name a few. That's a bunch more. So that's why I won't go for the absolute best. And the same thing for the effort level, this is what I'll use. But keep in mind right now I'm on the $100 plan. If you have the same one, fantastic. If you're on the lower plan, please go for the lower model, probably this one or a much lower effort level. Otherwise, you're going to be out of resources too fast and we won't be able to finish. One final setup, let's go to slash.com and find a lovely portrait image that we're going to use as our wallpaper. I like to use the search bar, then the filters. This is going to give us the best results. This one seems lovely, so let's download it. The way, I like to set my browser to download everything on my desktop, and I encourage you to do the same because it makes it much easier to find your files. Now, let's put in our first message. Build the native Android wallpaper app. I'm attaching the two images I want to use, test it out on a virtual device. Once that's pasted, I'm not going to hit Enter just yet. I'm going to first drag and drop these two images from my desktop. Okay, let's go for it. So this is going to start building our actual app. Keep in mind, we did do some previous setup, but it will still need to do quite a lot of stuff. Now, the first time around, it's always going to be tedious. It's going to take ages. But keep in mind, you're going to do this once you're going to go through the setup. You're going to build your first tap and the second one much, much easier. You'll be off to the races. But that's where the good news stops. I really wanted to showcase some real world issues that you might encounter, and boy am I in luck? See, I knew that dragging and dropping the files into the chat may cause some issues. I knew about that. It doesn't always happen. It really depends on the computer, the setup the model and a lot of other things. But here, the model clearly says that it can't do it. Why it really doesn't matter. That's something you'll soon have to learn. Well, initially, you may be intrigued and even excited to read what Claude is thinking. You'll soon get sick and tired of it. Countless technical terms that you don't know or understand, and it's all stuff where you have little to no input. That's why I do recommend using bypass permission mode because most of the time I really couldn't help it. I can't decide if I don't know what it's talking about. So again, you will get sick and tired of seeing it reason, think, but I still recommend you have a look at it from time to time because it is fascinating and at times it will be very useful. I'm going to speed this up because this will take quite a while. I want to be clear. On your end, you're going to have problems too. Very likely they will be different. But surely you will have some snags, especially at the beginning. This is why most people stop learning. Getting started is honestly horrible. I won't say it's clear sailing, but after a while, it becomes much, much easier. Like I said, your second app will be a breeze compared to this one because everything will already be set up. Anyway, Claude is working on multiple fronts. It's downloading stuff, installing stuff, and you just have to wait. This is how the excitement fades. But here's the thing, depending on various things, you may get something like this, and this is a beautiful teaching moment. So because Claude can't copy paste the files from the desktop to its own folder, which we previously said, that should be simple enough, it's actually going to render faithful standings. It's going to make new images that look like the ones that I downloaded. So it's going to generate images on its own. Now, while, that may sound exciting, that's not what we want. That's not the scope. That's not the objective. You don't want Claude changing your game plan. What if that's a picture of me and my mom, right? So you say you want to go to the beaches of Spain to get a tan, and Claude decides, Hey, you know what? You are actually going to visit the mountains in Norway. That's not a plan. Sure, that's still a vacation, but that's not my plan. So this can be infuriating. Don't change my goal, right? More than that, generating faithful images is likely going to cost us a lot of resources. So this is not good. This is not a good sign. If you're worried about your session resources, this is actually quite a red flag. Notice, it didn't ask us. That's the thing. It just decided for us. This is the flip side, the bad side of bypass permission. Overall, I still prefer it, but this is one of the many disadvantages. To sum it up, one very simple, small decision, not adding photos to its folder, caused a big overreaction. You can, of course, make a note of that and say, always move images inside its folder. You can make a mental note, right? And while that may prevent this specific problem, sure, the thing I wanted to bring to your attention is the haphazard nature of it, the chaos of it. You would never imagine that such a small decision would make Claude change the goal, create a separate task that generates images and so on. That's the actual teaching moment here. One small decision can have a massive impact, even though for you, it seems irrelevant. It's AI. It can code anything in seconds. Why can't it copy paste something from the desktop, right? But back to it, Claude is still struggling with the initial setup. It's unclear why, but we don't really care, and there's nothing in our power that can help it figure it out. Even if I type in a message right now, it won't receive it because it's actually busy. It's actually going to be queued, so it will process after it will stop working. So by then it will be useless. And stopping it right now would be a big mistake. So I'm just going to wait it out. But of course, I'm going to skip ahead in the recording. Now, after the while, you may get a window that will ask you for permission. I'm going to click Accept and now let's talk about the second teaching moment. An emulator is a virtual device, a virtual phone that pops up next to Claude. This is a great way to test your apps without actually connecting a physical device, right? More than that, it's a great way for me to show you what's happening on the phone without adding a separate camera without filming my own device. Plus, if you have an iPhone, that would be a bit of a bother, right? So that's why I actually wanted to use an emulator because you can use that as well. You can use a virtual device. But here's the thing. Claude can't do it. It gives me a reason. And in short, I tried for about 40 minutes to fix it, but I couldn't get it to work for one reason or another. I have a separate computer. It works just fine. I have a MacBook. It works just fine. Here, it doesn't that's another reason as to why beginners give up for things like this. So in the end, I decided to connect a real Android phone to a USB cable and use a special program to show you my screen. Aah. So again, you will see my real phone on the screen. It's not a virtual device. It's an actual physical phone. But let's pause, and we're going to continue in a second. Don't start the project just yet. Wait for the next lecture. 15. Launching the App: Come back. We're at this point where Claude is asking us to move the files as the app currently ships with the generated stands. Okay, so it already did that, even though we didn't want it, okay? Next, notice it's mentioning we move the files to incoming, which is a folder that doesn't exist. That may confuse you as it seems like it's a clear instruction. Actually, we can add them in any position inside the main folder. So I'm going to make a new folder called images as that seems a bit more appropriate. Then I'll move them there and get the path. This is done through a single click, then Control C, then Control V and Cloud. Tell it in simple terms that the images are located in that specific folder. And after the short while, the app is done. We're looking for an APK file. This is what Android phones use, at least older ones. Now, in our case, we have a 16 megabyte file, which is quite big. Keep in mind, this is a super mega simple app, okay? But Cloud continues for a bit, and it can process our images. Okay. This being a fairly smart model, it sees that Unsplash gave us huge images, absolutely ridiculous ones for the phone. So it does decide on its own to scale it down to 2,600 pixels in terms of height. Even that size is more than generous, but since we didn't give it any other instructions, we should be happy about it, okay? That's Claude being proactive. Now, I would be curious to see the generated images, but maybe some of the time. But the quality, I'm sure, is going to be quite modest, so no need for that. Okay, to skip ahead, Claude is asking me what to do in terms of the virtual phone. It can't start at. To be honest, I tried to make it work for well over 30 minutes, half an hour, 40 minutes to be precise, but finally, I gave up. So on your end, it may work just fine. If not, grab a USB cable and plug in an Android phone. If you don't have an Android phone, you will have to make it work. You got to use an emulator. Okay, now, in the physical phone, you have to enable developer mode. I'm going to attach a guide on how to do that, so please check the attachments. It's nothing too complicated. It's just a few steps. Okay, let's test it out. So this is a default wallpaper app, so let's launch it. So Claude decided to call it wallpapers. Okay. And it also added an app ice on here. Okay. So depending on various things, your experience is likely going to be different. But yeah, for example, it may ask you for the app's name, and it may ship the first version without an app icon. Always keep that in mind. Even if you use the same model, effort level, the exact same prompts messages, your results will be slightly different and that's totally normal. Moving on, let's see the app. Now, interestingly, we do have a preview of the images. Okay, we have titles in a short description. That's nice. Though I'm not sure where Claude got those from, and we even have a title and some instructions here. Fascinating. So this is quite solid stuff. Claude built a lot of these things without asking us, and I'm quite okay with that. There are countless other ways to show these two images, but Claude went for a modern approach, that's actually quite solid. And when we tap, we see the entire image plus a very clear call to action button that also has a nice icon. Awesome. This is where models and effort levels make a difference. The button could have been black. It could have been simpler without an icon and maybe just pure white text. This is a bit more refined. Maybe it's not the final version, but it's nothing to be ashamed of. Actually, it's quite good. And let's see if it works. Yeah. This model is native to Android phones. It's not built by us, but, yeah, it works fantastic. And we get a success message. And yeah, good stuff. It works. Congratulations. We now have a functional app. Now it's your turn. Go back to the first video and pause as often as you need to so you can work along. It's really important that you work along. It's up to you if you want to move the images straight into Claude dedicated folder, or if you want to do my exact steps and see how that experience would be like. Same thing for the virtual device. These are a great way to try your app on loads of other devices, cheap ones, expensive ones, and maybe it will work out just fine on your end. Maybe not. Try it out, you know. You'll have a bunch of similar decisions throughout this course. But here's the thing. Don't be anxious about it. Explore. This is exciting. This is cool. If you try a virtual device and it fails, simply go the other way exactly like I did. See my guide, connect on Android phone, and that's that. So you got to be flexible. Same thing with images. If you have the exact same issue, Okay, move them, move them exactly like I did, and that's that. Learning to go through these motions is the important. In the past, most courses focused on the technical side for hours on end. As you can see, we already have the app built. It's a crude, basic version, but it's built. Now, what I want you to do is have an open mind, get comfortable with all of the issues that you're going to face and try to have fun with it. Okay, go for it and don't continue with the course unless you're at this point. We'll build this project out step by step. We're going to keep adding stuff. So it's essential that you work along. You can't skip anything. Okay, go for it. 16. Keep an Eye on These Objectives: Come back. We have an Android app that we could potentially launch right now. Now, the question is, should we? Well, no, of course, not. It's way too early, but here's why. There are a few things to keep in mind, right? The number one thing is ASO app store optimization, which is quite similar to SEO, search engine optimization. Otherwise said, Do you want free traffic from Google? Of course you do. Without it, you're going to need a serious budget to get the ball rolling. So how do you get free traffic? Well, you got to play by Google's rules. And one of those key rules is the user's experience. Specifically, waiting time slash speed. Think of it like this. If your website loads in, say 10 seconds, Google is going to show you the website on the tenth page, right? 5 seconds, fifth page, okay? Tell me how many people actually go to page number five in the search results. Very few, right? What about page three, page two, actually, the stats or something like this. The number one result on the first page gets 50% of all clicks, position two, 23%, and position three, 13% and four just 9%, which is still a huge achievement to get to slot number five on the first page. That only gets you about 6% of the clicks. So imagine that. Being number one is incredibly valuable. With that in mind, you got to take speed as one of the most important factors because it's quite clear that Google favors that. It's the same thing with apps, maybe even more so. If your app downloads and say 20 seconds, it won't be favored by Google, so no organic traffic. 10 seconds better but still not ideal. Now, keep in mind that some people may still be using three G. Yeah, I know. It sounds quite silly, but keep in mind, we're in a bubble. Most people don't have, whatever, a $1,000 flagship phone. Most people don't have five G or incredible Wi Fi around the clock. No. So if you want massive traffic, you're going to need to lower the bar considerably. So the time to download it has to be as short as possible. The second thing is usage or engagement. So if you add one single wallpaper, who's going to use your app more than once? It's really impossible with about two or three wallpaper. See, now the app size grows. So you're being penalized in the search results. That's why adding 3,000 wallpapers may not be a great idea. But here's where all the fine details come in. Do we really need an image that's 2,600 pixels tall? Can't we lower it? So we get a decent quality but a low file size as well? Sure it's a good idea. And what if we don't actually place all the images inside of the app? What if they can be downloaded from a server? This way we get two things. One, a smaller app that's faster to download and two diversity for the users, so they won't get bored. So there's a higher chance they'll use the app again and again. For now, let's do this. Let's create a save point and then upload everything on GitHub. That way, in case something breaks, we can load from this point. Then let's try to lower the image size to a place where it looks good on most phones, but it's under say 500 kilobytes. Now, the smaller, of course, the better. Finally, let's move these two images to a server so we get the best of both worlds. Smaller app, but a lot of diversity. Of course, this principle applies to absolutely every single app out there. But yeah, now let's implement all of these changes. Let's get to it. 17. Optimize the App and Save Your Progress on GitHub: Welcome back. Before we jump into compressing our app, I have to tell you yet again that sometimes there's a lot of traffic, and progress is slow as hell in cloud code. So imagine peak rush hour bumper to bumper traffic, where you spend an hour to cover just a few miles. And it's the same thing with this session. My computer actually crashed because the recording was way too long. Since then, I freed up a lot more space, and hopefully that won't happen anymore. Honestly, I wasn't expecting an hour and 30 minutes for something that's quite basic, but here we are Okay, so to shrink the app, let's ask Claude exactly that. I want to make the images smaller in size, so the app downloads faster. What options do we have? Now, I'm framing it this way because smaller images may also mean something like whatever, 400 by 800 pixels, right? So I'm clarifying my intent faster downloads for my users. And next, I'm asking about options. And that's because I know a few ways to achieve the same thing. We could go for JPEGs, which are naturally smaller, but they quickly become pixelated, low quality we could use Tiny PNG or a similar service to strip away some of the information from the PNGs, but have the same quality. We could potentially use web P, even though that may not be available on all phones. So even though I'm quite knowledgeable on this topic, I still prefer to ask Claude just in case something new came up. Maybe something that's Android specific that we could use. If I just said, Hey, convert them all to JPEGs, Claude would not push back. Nine times out of ten, Claude will just execute, even though there's a much, much better option out there. So I want to make sure that this point is quite clear. If you have a bad idea, Claude is very likely not going to tell you that. Now, from my experience, models don't like to tell you bad news or question you. Okay, no matter what you use, if you use fable or the opus Opus five point, whatever, they don't really push back. The same thing on the other side with Codex. Now, if you ask for help, they'll happily provide it. But yeah, here's the response. Good question, but the answer depends on where the images live. Okay? This is already a great sign. Claude is already potentially thinking about moving the images to a server so they won't be bundled inside the main app, thus bloating it. But after they analyzed the app, it saw that the photos can say that most just 1.6 megabytes, which isn't a whole lot. The entire thing is about 18 megabytes, but most of that is actually code. And that's quite interesting, okay? Then it continues, and it gives us four choices in total. So JPEG, downscale AVIF, which is a special type of format, but it's not available on all phones. And finally, D, use a server. Okay. More than that, it's telling us that if we enable Right, okay, and we ship a new type of format called App Bundle AAB, things are going to go much smoother. Okay, the download will be drastically smaller. Fantastic. Great news. And while it's quite a lot of text, Claude is giving us his advice, one, two, and three. I got to say, Yeah, go for it, of course. All of this took a while, but the outcome was quite solid, and Claude started working. And here we can see that the webi conversion alone saved quite a lot of space about 900 K, 900 kilobytes. Now, I love that even Claude seems a bit surprised about this this amount of saving. About the on demand side, Claude gave us a document. Now, if you want to take it slow and try to understand as much as possible, going through it would be fairly helpful, but simply skimming through it is enough for me, especially at this point. In short, I want the app to be super small, and when the user wants a specific wallpaper, he can download it from the web because the images will already be processed and optimized, the download is going to take mere seconds. So that's fantastic. There is one big decision here about where do we want to host these files. As you can imagine, you need a place to actually physically store them, so to speak, right? Now, Claude gives us five choices, which is quite a lot. We have Cloudflare, GitHub, firebase, superbse S three. Now, these are all detailed here, and you do have a breakdown of what's what the short version. Now, what caught my eye is firebase because of the notes. Easy, if you want to later add analytics, which I had planned for. More than that, Firebase is fast to implement. It doesn't take a whole bunch of setup. I've done it countless times before. Okay. Now, back to the progress. The final size is just 1.63 megabytes, which is incredible. When you get such a result in just a few prompts, you feel like Superman. You're flying, right? So Claude wrapped up and it's telling us two things, but we're not ready to release anything just yet. The app should not be released. But a point taken about the app bundle, that's a superior format versus the APK file. So, of course, we'll use the superior one. Now regarding the server side, downloading the images from a server, we have a big plan. Well, we could continue here. It's quite a serious amount of work, so I would much rather do it in a different session in a new session. Remember the context Window thing. So again, when you finish a task, you should start a new one, especially if it's a big task. So I'm going to ask Claude to give me a prompt for a separate conversation, and it's quite a big one. But before we jump into that, let's save our progress. Remember, commit, that's the save command, and then push that's the upload command. Claude looks at the situation. He sees there's a GitHub account already that's logged in, and it's going to do exactly that. There was no project set up, but it's going to do that on its own and it's going to make it private. Fantastic. So this is Claude being proactive. This is the experience you want. Now, other models or lower effort settings may give you a much more fragmented experience. In short, every few seconds, you're going to be asked to confirm this or that or even worse, you'll have to make big decisions on your own. And as I hope I demonstrated, even if you're fairly technical, the best approach is to let Claude guide you. That's how you get the most out of it. Okay, let's continue. 18. Moving from Local to a Server - The Easy Way: Welcome back. Let's get to it. We have step three, which should ideally be done in a different session, just so we can get the best results. Now, could you continue here? Of course, the issue is the degradation inequality is not going to be obvious, right? So the downgrade won't be apparent. You won't realize it. Now, I'm not a fan, but imagine drinking whiskey and you have the capacity to drink, say, 20 glasses, okay? Well, after a certain point, maybe after the second glass, maybe after the tenth one, the 14th one, part of the whiskey gets replaced with water. Imagine something like that, right? Now, that happens at an increasing rate. So with every new glass, you're getting more and more water rather than whiskey. To a point where over 50% of the drink at one point becomes water, so by the time you realize it, you've already wasted a lot of your money, what you thought was good quality whiskey, right? And the same thing happens here. The model doesn't give any clear indication that it's misfiring. Maybe you can sense it. Maybe it won't suggest web P. Maybe it won't make the PAO GitHub private by default. That's the thing. It's quite hard to spot. So again, after the medium session, I recommend you click on New Session. First, we have to copy the prompt that I requested. No need to select it manually. We have an icon for that. And after you click on New Session, make sure the same folder is selected, the same model and the same effort level, though if you do want to upgrade or even downgrade, a new session is the ideal moment to add more gas to the fire. Switching the model or the effort during a session is not ideal, especially the model itself. The effort less so, it's not as bad, but yeah, switching the model is not typically a good idea. Okay, here, let's paste. The model is going to look at the current code and any documents the previous session may have created. This is going to take some time, though you always prefer the model to think about it, you know, rather than jumping straight to it. Now, zooming ahead after about 5 minutes or so, the model is actually working on something. And, yeah, after about 10 minutes, it's still coding. This is why I don't do live boot camps with AI related stuff. I've done this in the past, and it was significantly faster, like two, 3 minutes at the most. Things are changing nonstop. So it is what it is. Claude is going to launch the app on my actual phone. It's going to test that everything is working correctly, which is quite a nice touch. Notice, we didn't say anything about a case where the user doesn't have Internet access. But Claude, well, specifically, this model attacked that head on. So that's good stuff. That's why some people are in love with these models. I'm going to skip ahead. This is done. It's quite happy with the progress, and it's asking us a key question. Do we want to use GitHub pages to host our images, our wallpapers? Now, remember, we want our users to download a very small file from the app store, then download individual wallpapers as separate downloads, okay? That's because the smaller app size is heavily favored by both the users as well as the app store. So that's the thing. But there's a situation here. I'm not happy with GitHub pages. It's not a great idea, as you'll soon see why. So I propose Firebase, and I'm going to say exactly that. I'd like to use Firebase to host my images. Can you make that work? I prefer to use tentative language so I can show the model that I'm a bit hesitant and open to other ideas. And Claude says this is a good choice, and it takes a look at my computer, and there's a bit of technical detail here. Now, it's asking me if I want to use file based hosting or Cloud storage. Now, I love that it recommends one option, though you should be aware it's not always correct. It's not always right. Yeah, here with after the races in a short while, well, to be fair, I'm speeding up the recording quite a bit. But yeah, after the few minutes, Claude is asking for some help. So option A, I deploy by using those commands or option B, which is much more comfortable, we simply log in, and then Claude does the rest. I'm going to go with B. This will require me to log in, so I'm going to skip that. It's quite fast. It's free. They have no tough choices. Again, it's like signing up for the Gmail. Now, there will be some serious waking time involved on your end as well. But maybe with Opus 5.0, maybe that's going to be a bit faster. So yeah, hopefully you won't spend as much time as I did here. But yeah, this model is not happy and it's asking me to run a command. Though the seem quite scary, you should simply ask the model what to do if you're unsure. For example, do we use command prompt or Power Shell? Maybe it matters. So let me just ask it. And Claude says, either one works. Okay, let's go with Power Shell. Simply use Control V to paste that command, and let's see what happens. But no, that's an error. That's a problem. No worries. Let's just copy paste that back to Claude. That's the go to. This is what you should do, as well. And after the second, it actually tells us to use Command Prompt. This is done by using the start menu, and you can type in C and D, or you simply write out the entire name. Funny enough. So I asked and yeah, gave us the wrong answer. Anyway, we have that command, and let's paste it and go for it. There's a question here, I'm going to hit yes even though I'm not a big fan of Gemini and Firebase. That's their own model, their own AI. And let's see the next step. Okay, it seems like we need to put in some type of code somewhere. Let's pause. This seems scary, but it's just following instructions. Whenever you feel stuck or overwhelmed, just take a break and then come back. It's as simple as that for me. This was something that really changed the game. It's such a basic thing. Just go grab a cup of tea, coffee, and then come back. Here, I'll copy that link and open it in Chrome. I'll have to give it access, but there's nothing too difficult about it. Okay, and finally, I see the session ID, and it matches the one we previously saw. Okay, right. Now we have to get a bit of code and paste it back into CMD command prompt. This initial setup is done once, and then you can concentrate on all dotted parts. As you get used to it, this will become second nature. Moving ahead, Claude is asking us for a project ID, which doesn't matter at all. So let's continue. And let's see if we're finally done. Now, I know that this part is not super beginner friendly, but this is much easier than the other ways. I'll show you all about that in a minute. But yeah, here, it seems like we do have a problem. We have an issue where Claude can't create something on its own. It can't do it. Okay, you'll see that quite often, accepting terms and conditions, solving COPTA. The thing is the model is very much capable of doing it, but it's a safety feature, and it refuses to do so. So it can do it. But its parent company said, No, don't do it. So we have to manually go through some of these steps. Worries. It's all good. Let's set up the project name. I'm going to call that wallpaper app and then accept the terms and conditions. And now we need to make a new Google Analytics account. That's tiresome, but okay, let's do it. We can't really skip this step. This is not optional. You do need a couple of cups of coffee for these longer sessions, but with patients, you'll get there. Okay, let me jump ahead, and I'm done at this point. I'm going to tell Claude that, and now it's looking for the Firebase project. By the way, Firebase is a Google product. And whenever possible, I do try to use Google products because you're quite unlikely to get penalized for it, and it's often easier to work with. Meaning it's something like the Apple ecosystem. The watch, the phone, the laptop, the iPad, they all connect together. Same thing with Google, Google AdMob, Google Fat Base, and so on. Now, maybe it's not as seamless as Apple, but yeah, they still work together. Now, Claude doesn't see the project, but that's because I used a different name. Let me paste the URL, which actually contains the name. Let it think for a second, and let's see if this is job well done. Okay. Yep, yep, we're all set. So this is good to go. Claude is, again, quite chatty. Notice how much text this reply contains. But yeah, if you want to know as much as possible about our progress, this is helpful. So yeah, now our photos come from a server, and we actually have instructions about how to add more. But let's pause because I want to tell you how to get held fast straight from Claude. So let's stop and talk about that. Then we'll continue building. I'll see you in a second. 19. How to Get Answers That Are Actually Helpful: Welcome back. Asking questions is very much normal, and I encourage you to stay curious, and here's why. There's a reason most developers spend four or five years in college, then one, two years shadowing a senior. It takes quite a while to learn the ins and the outs. Now, my approach is to get you real world results in the shortest amount of time without cutting too many corners, right? One of the compromises I have to make is not explaining everything. I don't assume that you know them. Instead, what I propose is that you stay both practical and curious. This is where the regular cloud comes into play. The part that acts like the chat GPT that you know when your browser. So we will work probably 99% of the time in the coding tab, right? But when you feel confused, you don't know how to continue, click here on home and then start a new chat. So this is a different area in Cloud. Now, underneath, you can find all of the previous chats in case you want to follow up, in case you want to continue a previous conversation. But here, you can start a new chat, and this doesn't need any folder, any project. You just select the model and the effort level. I'm going to use the same as before, though for the basic questions, you can always use a much cheaper model so you can keep your resources for the heavy lifting in the coding side. But, yeah, here tell it the following Hey, I'm making an Android app. What's the difference between APK and AAB? So this is how you're staying curious. On the practical side, hopefully you've understood that AAB is better. It's a better choice because the user gets the app at a smaller size. He gets a file that's made specifically for his phone. Okay? So again, practical and curious. And now here's the answer. And if you want to explore the topic some more, you can say something like, Okay, I still don't get it whatever, any type of follow up question. Now switching from code to this separate area seems like a bit of a chore, but it's actually the better approach. That's how I like to work. By having cleaner coding sessions, without all of these basic questions sprinkled in, you'd actually optimizing your result. Sure, it's the same intelligence, and this separate chat still consumes tokens, resources, but because it's separate, it doesn't pollute the coding session. It keeps it nice and clean. It keeps it small, so Claude doesn't have to work as hard to remember everything. Next, we have multiple choices, right? Multiple choices about where do we store files online. So let's ask Claude about Cloudflare, hats Firebase because these two are some of the most popular ones. So let's see if we made the right choice. Let's have a look. And it seems like Cloudflare R two is the clear winner and notice the certainty here. And it does explain why, though through a technical term egress, it continues with pros and cons because I asked it to do that. But here's the thing. Don't hesitate to ask even more questions. But what about beetle options out there? Because I mentioned too, but maybe Claude knows about even better options. So let's see. That's a good follow up question. Yeah, it seems like that some other ones, though, funny enough, Claude even mentions that one of them is a trap that we should 100% avoid it. So that's quite interesting. And you can read up and make your decision. Though in most cases, you can just go to the bottom line, especially if you're not technical. And it seems like, again, Cloudflare R two is the best option by far. So we did implement a different one, fire base, but it seems like this was a better choice. Now, to be fair, I've used both of them in the past, and I know that Cloudflare actually takes a bit more work to get up and running. Nothing too crazy, but it's definitely more elbow grease, so to speak. Now, having said that, we will implement it just because I want you to see how that would look like. I also want you to be able to pivot when there's a clear indication that there's a better way. Here, Claude says the cleared winner is Cloudflare. I also know that it's completely free. So yeah, this is a good choice. Now, the other better option like bony.net is very likely going to require a purchase. A small amount of money, but for this course, I would rather not go for that. But yeah, now you know how to talk to Cloud and get advice without polluting the coding session. Please use this feature whenever you're unsure about something. Again, for me, it's difficult to cover absolutely everything, so this is a compromise I have to make. So when you're unsure, please use this feature. Okay, so now we have a new task, remove Firebase and put in Cloudflare. Okay, let's get to it. Let's make it happen. 20. From Firebase to Cloudflare: Come back. We had a chat with Claude, and he said that Cloudflare R two is a far better choice for our photos. Now, it said that file base is fine, but it's not ideal. Okay, so let's switch back to coding, and I'm going to keep the same session for now. I'm going to say that I've changed my mind. So let's remove Firebase and use Cloudflare. Tell me if you need anything from me. And now we're off to the races. The thing is I was vague. I said Cloudflare, but in the chat, Claude clearly told me it was Cloudflare R two. Now, because I was vague, we now faced with a choice. So Cloudflare pages recommended or Cloudflare R two. So this is tricky because I tend to go for the recommended option, but here, this doesn't seem ideal. But that's why we had that previous lesson where we learned we can always pause the coding session and then ask a question in a different chat. So let's do that again. So I'm going to switch and ask if I should go for pages or R two. I'm not really sure what's going on with my phrasing. I'm really sorry about that. When I record, I do get tired and bored, and maybe that's why I'm a bit sloppy. I do apologize for it. It's a bit embarrassing. Anyway, the correct choice seems to be R two, and there are clear details about why that's best. Okay. Thing is, it is going to require a credit card, but it's totally free. Okay, so this was one of the reasons why I avoided it and I chose Firebase instead. But I don't want to leave you hanging, so let's do it. R two, it is. So go back to the coding tab, and let's choose R two. Okay, now, let's see what's what? So after the while, we have to create an account, and we see the link right here. So let's do it. The great thing about it is we already made the GitHub account, so that makes everything that much faster, which I strongly recommend. Good stuff. Now, the next step requires me to activate R two. Trouble is there are a bunch of them. Now, when and do, again, always ask. That's the best way to work. So here's what I recommend you get used to get a screenshot tool or use the built in one and focus on that specific part of the screen. Then paste it back into Claude. If you're on the lower plan and you're worried about resources, use that chat, so keep this session nice, clean and compact. But yeah, here I'm fine. And Claude answers quite fast. To be fair, you can see these answers. Don't take a lot of resources. But still, if you have a bunch of them, it's best to keep them separate. Okay, I need to put in my billing details, so I'm going to blur out any sensitive information, but there won't be any charge to begin with. I just have to put in my details. If you have serious usage, then yes, of course, there will be charges, but for us, no worries at all. Okay, good progress so far. One last step. We have to log in by using this command. Okay. I still have a command prompt open, so I'm going to paste it here. After you hit the Enter key, Chrome is going to ask you a question about authorizing something, and of course, hit yes, and I think that's about it. Now Claude can continue. Now, one thing, I'm using throwaway accounts here, but I still prefer to blur them out. This is also a Windows testing platform. That's why it's not actually activated. It's not a real machine. It's something that I use when I need a clean slate without all the setup, all the bells and whistles already installed, and that allows me to actually show you all the issues on a fresh system. But, yeah, Claude is hard at work. And after the while it says migration complete. Your app now serves everything from Cloudflare R two, and it's verified on my actual phone. Congrats. Great stuff. Okay. We also get instructions on how to add new images. But first, Claude is asking us if we want to save our progress and push to GitHub, I'm going to say yes. And in a few seconds, yeah, Claude will do just that. But it's asking me if I want to open a PR. Now, since this is the end of the session, I'll ask a question here because I'm very likely going to start a new chat for the next step. And let's say what's a PR and what do you recommend? Simple enough, right? And Claude answers, Okay, so I'm going to go with Merge, but never hesitate to open a side chat. This is more about best practices, about how you work within a team of coders, how your projects look like when you want to get hired, when you want a job. But as a solo developer, this isn't all that important. Back to it, two things. We have to remove the Firebase project, though that doesn't hurt anything, and we need the production URL. Okay, I'm going to tell Claude to start with number one. And after a while, we'll have this choice. And in short, I don't want to purchase my own domain name like cresbarn.com or use any of my actual ones. Okay, so I'm going to choose the first option, which allows us to continue without any major downside. I love when this is presented, so no blockage of any kind. We can continue. And yeah, after the moment or two, it's going to ask me for a name. I'll choose my first name, and I think that's going to be that. Okay, let me zoom ahead. Let me skip. So Claude has a lot of checks to do. It's quite a lot of work. But yeah, at the end of it, yes, we're all set up on Cloudflare, and we can add more images, more wallpapers. And since everything is buttoned up, we can make a new save right here and then push it to GitHub. It's really up to you if you want to install Firebase in middle my steps, or you can skip right here to Cloudflare. It's really up to you. I wanted to showcase all the ups and downs, so you have a better idea about how these things go and what's the price of changing your mind. But, yeah, congratulations. You've made it. Let's take a break and then we'll upload new wallpapers. 21. Add New Assets the Smart Way: Come back. Cloudflare is up and running. So the next step is to add images. While I saw clause instructions, I prefer to start a new session and ask it for help. Now, I'm going to state my objective. Add a few new wallpapers to my app. Now, I'm being vague on purpose regarding the actual number, but I need them resized and compressed before they're uploaded to the server and then sent to the actual users. Help me do that. Okay, now, here's the thing. Before I hit the record button, I downloaded a few other images from Unsplash. Now, I was completely shocked to see that Claude found them. Now, I have no words. I really didn't think it would do that. So, in any case, you can see the huge images, the size as well over 4,000 pixels. And funny enough, Claude starts working on the titles and subtitles before anything. Okay. So this assumption may be awesome. Or it may be draining your resources for nothing, because here's a question. What if those images weren't our images, what we wanted to upload? What if those were personal images? That would be wasted tokens for nothing, burning fuel for nothing. Anyway, after the while, Claude is asking me to confirm that those are indeed the images I want to upload. Finally, yeah. And about the titles, yeah, whatever I don't care, use whatever title you want, though, again, that's something you should probably address if you want something in particular. But finally, after the good few minutes, it's creating a script that we can reuse so we can optimize the image size, which is great. That's exactly what I was hoping for. But I did want Claude to come up with a solution on its own. That's the thing. I knew that something like this would be ideal, but again, it's best that Claude actually is proactive. And, yeah, it did shrink those three images, but two of them, they're still too big. So Claude realizes that, which I love. There's a lot going on here, but I'm skimming through some of these messages. And yes, now it's uploading them to the R two bucket, basically making them available online. But here's the question. Here's the thing. Why did we choose 2,600 pixels for the height, whatever that was? That seems a bit random. You can see the conclusion here. So all three new images have been processed, and yeah, this is their height. Plus, we have that script, so we can reuse it, though it does seem a bit complicated. But yeah, 2,600 pixels. Mm. Well, I think about that. Let's save and push to GitHub, and let's check out the images. Now, do they look okay? Are they okay? Are they blurry? Never trust what the Ahi says. You got to go and test it, verify it. And there's a small hiccup. This is why some people say AI is quite dumb at times. So I wanted to see the images, but on my phone, not as links to the server. I mean, sure, technically, I could see them that way, but not ideal. So this is a cold shower that we often need. We got to remind ourselves that sometimes you got to be very, very clear about what you want, because we're so impressed with Claude at times. But yeah, something like this happens, and, yeah, it's a good reminder that we still have a long ways to go. So I'm going to manually close all apps and restart the wallpaper app, which by the way, we didn't even name. We didn't choose a name. Claude just added an icon and put its own name. Okay? Again, is that a positive? Is that a negative? Because again, we didn't actually name it and we didn't come up with the icon ourselves. You'd be the judge. But, yeah, all the images are indeed inside the app. And yes, we can download them. I'm on a limited WiFi connection to check things out, and the download is quite fast. It's quite acceptable. So, yeah, we did it. Congrats. This is another milestone. But I'm not done just yet. I'm going to ask the following, how much space would we save if we shrunk the images from 2,600 pixels to say 1,600. Can you show me multiple sizes so I can see where the quality starts to degrade? Or can you do that on your own? 2,600 seems a bit high for most phones. Like to be a bit chatty, so Claude can sense where I'm coming from. What's my context and what's my objective, right? Now, in this case, after about 2.5 minutes, it's finally starting to reply, which is quite interesting. And it seems like it's rejecting my idea, which is great, about 1,600 pixels for the height, because that would give us a lower image quality, a quality that won't be acceptable. It's calling it a softness. Okay. But it does seem to like my idea of testing things out. Testing a range from 2,600 all the way down to 1,200. Beautiful. Okay. After a while, we get this lovely table plus a clear bit of advice. 2000 pixels is the preferred choice. That's the optimal choice. This depends on a load of factors, but, yeah, I would probably go for 1,600. But, yeah, in this case, it seems like 2000 is better. Now, for the real world app with real artwork I would ask to see individual images side by side, not a composite that's shrunken down because you can't really tell at this size, right? But yeah, in this case, let's go at 2000 pixels. And interestingly enough, my next thought would be, Hey, this is for these three new photos. Okay, but what about the initial ones? But here's the thing. Claude has us covered. It's asking us if we want to redo the entire catalog at this new size, which is fantastic. I love it. Great stuff. Very happy about that. Okay, so let me skip ahead. Here's the table, only 1.73 megabytes, 31% reduction in size, but the quality is supposedly still top notch. So the quality is still up there. And here's another unexpected bit. Okay, but this is quite welcomed. Claude is talking about the situation where a person has the old 2,600 file on their phone, but the new one came out and is proposing to clean up that process, so everything is according to our own design doc document, which Claude Code made, by the way. It says that this is not a big deal, but before releasing the app, this should be handled. Okay, I'm going to give it the go ahead. I'm going to let it run. And in the meantime, I do hope you're enjoying the process. It's exciting to see how AI works, how it thinks, how it sometimes does stuff for you, how it solves problems, but at the same time, it's also quite dumb. Funny how that works. Now, if you figured out how to avoid major issues, you should be flying in no time at all. Again, Claude is asking for some cleanup here, okay, to keep things tidy. And I say, Okay, yeah, go ahead and clean them now. And yeah, we're basically done. We can save and push the GitHub. But overall, we've made fantastic progress. And the app is, again, basically ready. The core of it is done. It's functional, it's optimized. But the question is, should we ship it? Should we publish it? Oh, let's pause so you can catch up. Then we'll think about this some more. 22. This Is Where the Fun Actually Begins: Come back. We officially have an app. Now, it's not amazing or groundbreaking, but it's doing its job. We can add photos. Our system optimizes them, then makes them available inside the app. So this is great news. Now, the user can download the wallpaper and apply it. So this is basically job done, right? It's the end of the course, right? In a sense, it's what Uber does. You want a card to take you from point A to point B. Actually, the biggest apps have very few features exactly like Uber. They allow you to do one thing very well in a very efficient manner, and that's the name of the game. That's how apps should be built with simplicity in mind. You have a clear objective, apply a wallpaper. Well, that's what this app does. But now comes the business side. How do we make money? It's not greed, it's not pure capitalism. It's what's needed to keep the app running to hire designers or developers or pay for other stuff. Maybe staff, maybe to get funds to continue to develop it, maybe get some motivation to keep things going. Seeing some money generated from your work is exhilarting. But as it stands, the app fails to achieve any business goals. So this is where the fun actually begins. Yes, you may have a great product, and let's just assume that the artwork is fantastic. Maybe it's your own artwork. Maybe it's your own designs. Maybe it's a Q rated list of photos that you have the right licensing for. Okay? So let's assume that the content itself is an eight out of ten, okay? We're using gun splash just as placeholders. The actual app should have original artwork or stuff where you do have permission or licensing. Okay, say that's done, okay? With the snap of my fingers, we now have tens of beautiful original wallpapers, okay? That still doesn't fix the business goals, okay? See, no matter how awesome the app is, there are countless other ones out there. So we have to stand out. And then in short, this means a few things. We need either a lot of users that may only use the app once or twice, and that can generate some revenue, or we need a small amount of users that are going to use the app a bunch of times. Next, we either need to use ads so we can monetize those large groups of people, or we need to create a subscription of sorts for those hardcore fans, which aren't a lot, but they're able and they want to support us. They want to support the app and the artwork. So we need a way to get people engaged and excited to use the app, but there isn't a whole lot you can do in the app. So you know, we should probably add more stuff for engagement because after all, if you scroll a few times, you're going to get bored, and that's that. So you won't probably open the app again, right? So if we add more features, we are going to complicate the app, which means we'll likely get more bugs, more issues, more crashes, more resources that we're going to use in clock Code. So that's the thing. That's quite inevitable, though. So we're going to need to find a way to fix those problems, to find them and fix them and quite fast. And if we add more features, we have to present them in an intuitive way so users can actually see them, recognize them, and they can get the most out of them. But if they don't know about those features, they can't really use them, right? But if we add more features, we got to be careful about the battery life because that's one of the biggest things. If the app makes the phone hot or if it drains the battery, that's a nog. And still on the feature side, the more things we add, the bigger the app gets, the less likely Google will be happy with us. The less likely people on slower networks will download the actual app. So as you can see, this is the hard part. You want a fast car, so you get a bigger engine, but that burns a lot of fuel. You want it to be spacious, so you make a bigger car, but now it's slower because of its weight. So you got to have an even more powerful engine, but that burns even more fuel, and you want creature comforts. You want massaging chairs, plushy ones that you can sink into, but that adds even more weight. So then you want it to be smart and you want to have lots of screens, but that means you may get electrical problems or software bugs of all sorts. This will also make the car much more expensive. So on and on it goes. The more things you add to a product, be it an app or a car or a phone or whatever, the more chances of things going wrong. So it's the exact same thing with apps. One change can make the app feel like a fragile house of cards that can fall down at any point or like a Jenga tower, whatever visual metaphor you prefer. So this is the hard part. Coding up until this point was fairly easy. But now you face serious choices that have big consequences. If you don't show enough ads, you won't make enough money. If you show too many ads, people are going to be upset. They might stop using the app or they might give you a low rating. Low ratings and poor engagement gives a strong signal to Google that your app is not good enough. So organic traffic drops. And then that means that you're now forced to spend money on ads, but you're not making any money, so that's a net negative. But let's pause. We'll go through all of these decisions step by step. I can't promise you that these choices will guarantee success, but at least you have the knowledge to make your own choices in your own app and see what's what. The important part is that you're aware of the impact of all of these decisions and that you really have to think about it. This is why we can make whatever 100 people can make the same app, but have a different experience. Let's see what's what. 23. How Do You Make Money with Apps?: Welcome back. So how do you make money with apps? Now, there isn't one perfect answer. The right business model depends on what your app does, how often people use it, and how much value it creates. So let's go through the main options. The first model is a paid app. The use of pays before downloading it. And I'm going to be short this is very likely not the right choice for you. It can work for specialized tools or very well known brands, but it's nearly impossible for a brand new app. The second model is a free app supported by ads. So inside, you're going to get advertising. Now, the user pays nothing. Advertisers pay to reach that user, and you receive a small part of it. Now, this works best with lots of users, long sessions or frequent repeat users. So a game, a news app, a wallpaper app opened every day that has more potential versus a tool that you open twice a year, for example. Now, keep your expectations realistic. One download does not equal a fixed amount of money. So revenue changes with the user's country, the ad format, advertise of demand of the season, use of behavior, there are a lot of factors. More ads may increase today's revenue, but in the long run, that can cause bad ratings and installs. So that's a poor signal, and organic traffic is going to drop. Next, we have premium. This is a different type of business model. So the basic app is free, but some parts of it are reserved for paying users. So the free version proves that the app is actually useful, and premium gives people a reason to upgrade. And on the wallpaper app, that might mean HD downloads, high definition downloads, exclusive collections, live wallpapers, or no ads. So the app is free, but you have a good incentive, a good reason to upgrade to a paid model. Those upgrades are usually sold through in app purchases, IAPs in app purchase. Now, this simply means the user buys something inside the app through Google Play or Apple's App store. Now, a consumable can be bought repeatedly, for example, game coins, AI credits, hints, tokens, whatever. And once used, the user could potentially buy more. Now, it only makes sense when something naturally runs out, of course. Now, a non consumable is a one time unlock. So for example, in our case, remove all ads, unlock a premium feature or buy lifetime access. Users often like this, but you only get paid once, even if you support the app, you continue to develop it for years on end. Now, subscriptions, these can be weekly, monthly or yearly payments until the user cancels. Now, these subscriptions, which I love, these can create MRR, monthly recurring revenue, but they need recurring value, such as new content, whatever the cloud storage, AI processing, fresh data, something. So a subscription for a simple one time tool will likely make your users unhappy and they will cancel. Yeah, overall, these are your choices. Ads in app purchases slash subscriptions, and, of course, you can combine them. So a free app can show ads and sell remove ads upgrade. A freemium app can offer both lifetime access and subscription, like whatever, 799 a month or 40 bucks for lifetime access. So how do you choose? Well, we're going to chat about that, but ads are 100% on the table. Ads are something that you should use. So how do you show ads? Well, one of the biggest platforms out there is Google AdMob. You add it to your app, you create placements called ad Units, and basically AdMob does the magic. It shows the advertising by magic. So AdMob offers several formats. For example, a banner is a small rectangular ad at the top or the bottom of the screen or maybe inside scrolling content. It's quite simple, but uses very little screen space, and usually that doesn't earn you a lot of money. People are so used to banners that they basically get ignored 99% of the time. Now the next type of ad, an interstitial ad. This is a full screen ad. This is your main dish. Most apps rely on interstitial ads because they're quite versatile. You can place them just about anywhere, though Google does give you certain rules that you should follow. Next, a rewarded ad. This gives the user a choice. So you can watch an ad and receive something valuable, such as a life, a hint, credits or whatever, an HD download, for example, in our case. And this is awesome because it's a great experience. The user knows that he is about to watch an ad, and in return, he gets something back, right? So he chooses it. Whereas before with an interstitial, again, the same full screen experience, that may feel like a surprise, an unpleasant one, because again, the interstitial just shows up. Whereas the rewarded interstitial, again, the user clicks it, and he says, Okay, yeah, I want to watch it. The next one, a native ad. This fits into the app's content. It can be a sponsored card in a feed, for example, I can feel less disruptive. It integrates in a native way. It feels organic. Typically, it requires more design work, and one thing you should clearly mention that this is an ad because sometimes the user thinks, Hey, this is yet another wallpaper, and he taps it and it's actually an ad. The next one, an app open ad appears while the app opens or returns to the foreground. So it monetizes the loading moment, but it can create a poor first impression. So timing and frequency do matter. Now, during development, we use Google's test ads, never live ads, and we never click on our own live ads. So please tell your friends the same thing. If you launch something, don't click on ads, thinking they can help you, thinking they're actually generating you money. They're actually getting you band. So please never click on your own ads or ask your friends to do that. In short, that's the big picture. Please go ahead and sign up for AdMob. There's nothing technical about it, but you will have to verify quite a few things. You will need a Google account that's a given. Use a real account, a serious one, and it's the same story with your phone number. You will only have one single ad mob account, so please take it seriously. Just follow the instructions, and at the end of it, you will need to set up a payment profile. I have a business account, and it does take quite some effort and a lot of paperwork, but it's a one time thing. So try to power the web. You don't need a company 100%. You can actually work without a company, but probably that's best. I can't really help you in any way with the AdMob account. You just have to upload your paperwork. So, unfortunately, I'm going to hand it off to you. Please sign up and see what's what. I'm sure you'll manage. If not, come to the discourse server, but again, ask Claude and see what's what. Good luck with it. 24. How to Show Ads in Your App: Welcome back. So let's get to work. My AdMob account is all set up. Again, you'll have to do that on your own because it's just a matter of following instructions and putting in a lot of personal information. You can't really skip this step. AdMob is by far the best. But, yeah, this is how your dashboard should look like, and this is what you wake up to every single day. Once you see this number start to climb, you're gonna fall in love with it. Even though it's just $0.04, it's something, right? And when it grows to $0.08 per day, you're gonna celebrate like you're a millionaire. At least that's my experience. But anyway, once you've logged in, you can go to Claude and tell it, Hey, I want to add ads from AdMob in my wallpaper app. Add a banner at the top of the app and test it on my phone. And that's all it needs. Cloud Code handles everything on its own. Of course, this is a brand new session with bypass permissions already set, plus my model and effort level are as before. Though you could always adjust the effort level if you believe that this session warrants it. Anyway, Cloud code sees my phone. We have it on the side of the screen, and it's going to check the official SDK. You can think of an SDK like a specific type of code that allows your app to talk to AdMob. So the SDK is in the middle. It's basically like a bridge. In essence, our app is going to ask AdMob to give it some ads and AdMob can respond. Either it's going to give us some ads or it won't serve us any ads because there isn't any advertising in that region, maybe that's a technical issue or loads of other reasons. So that's why you always got a test. But I have to praise Claude yet again because it decides on its own to use test ad IDs. And why would you do that? Because clicking on your own live ads on your own device may get you suspended just like that. So this is good stuff, proactive stuff. This is beginner friendly. And we didn't ask for anything, but it's taking us on the right path, and I applaud Claude for that. Now, to be clear, we're not going to show real ads from Coca Cola or whatever other publisher. No, instead, we're going to use demo fake ads. And if everything is fine, when we're ready to go live, we'll simply tell Claude to swap the test IDs, which are just numbers, basically, with real ones. And that's going to show actual ads from Coca Cola or McDonald's or whatever. So there's nothing tricky or difficult here. Actually, one of the most important things is this, always ask Claude if the app is ready to go live to be published. And in most cases, it will do a thorough check, and it will let you know if something is not right. And I have to say that this takes a while. Maybe it's the time of day, maybe it's the effort level. Maybe it's because Opus 5.0 is coming out. It just came out. It's tricky. But, yeah, fact is, you got to wait quite a while. Um Okay, though, you know, the thing is, overall, I'm going to speed up the recording like before, and throughout this course, I'm going to do that. But on your end, please be patient. You will see Claude find issues, various bits of code that are not compatible with what it's trying to do with what it's trying to install. Think of it like updating your phone's operating system about these updates. You know, from time to time, something new comes along. And you should upgrade. And sometimes it may break stuff, but another update is going to come in, and it's going to fix that as well. So we're installing one SDK, but most apps will have lots of them, and sometimes they don't play well together. It's the same thing here, so it's going to be a lot of moving parts, so for ratings, for showing ads, for collecting bugs, for getting analytics. So all of these have to be maintained. Now, if you don't do it for a few months, now, is the app going to stop working, if you don't update it? No, most likely, no, I will continue to work, but Google doesn't like it when you don't take care of your app. It can see how often you update it, and it's one of the key factors for getting organic traffic. It's not a big one if you do it every day. It's not going to help you out, but if you abandon it, Google won't be happy about it. But yeah, after about 10 minutes or so, the app is finally ready to be tested. Claude does that automatically. And yeah, here's the banner. You can see it says test ad. By the way, ad is always spelled with one single D. It's ad from advertisement. Ad with Ds means addition to bring something to the table, you add something to the table, so that's with two Ds. So in terms of advertising, it's one single D. Claude is going to check through a screenshot, but we can see it's all fine and well. I love the fact that it's going to go inside to see if the band is shown by mistake. That's proactive. That's looking out for us, which I applaud. And moving ahead, now, the conclusions are quite long. But in short, it's telling us that this is not ready to be published, of course. We still need to do a few things. Yeah. What I want you to focus on is how easy this was. We didn't code anything. There were no tricky decisions. We enjoyed the process from start to finish. Again, quite a few minutes, but that's fine. That brings me to the next part. Do you think that this banner is going to generate serious revenue? Is this going to make us a lot of money? Do you think a significant amount of users are going to tap it? Because I don't think so. The good news is that this is sticky. It stays at the top of the screen, along with the title wallpapers, and then the subtitle. Now, I'm not sure I like the title is taking up that precious space, but we'll talk later about that because that's the real point of this lesson. Now that you see that the technical part is actually quite easy, you can now focus on the actual experience. Do you keep the banner at the top, or do you place it at the bottom? Do you add a second one inside the wallpaper? What about other types of ads? So this is the hard part. Too many ads means a poor experience. Not showing enough means you won't make enough money to stay motivated to continue to develop it. It's hard. It's tricky. You got to have a vision. But let's add a few more so you can see what's possible, and based on that, you can decide how many you can actually show. I'll see you in a second. 25. Explore Multiple Ad Formats: Welcome back. We have our first banner ad, but it's nothing special. So let's add a few more so you can get a complete picture. Then you can decide what you want to run. So I'll say this. I want to add more ads. One, when the app opens, there's a special category adm for that. The second one, an interstitial ad when applying any wallpaper except starlit pines, okay? And the third one for star I want to add the rewarded ad to unlock it. So three in total, so you can see what's up. Typically, a rewarded interstitial tends to be the most profitable one, but we'll chat about that in a second. So let's see what Claude says about my request. And funny enough, it says it's a meaty change. Meaty change. Okay. So sometimes this personality is quite endearing. You love it. Other times, it's actually quite annoying. So we stated our objective. Now Claude is likely going to have some follow up questions because we were a bit vague. And here you go. Once the user sees the rewarded ad, does he get to keep the wallpaper or does he have to watch an ad later on so he can have it yet again? You can see the of choices here. That's exactly what I was talking about in the previous lesson. So these are the crucial decisions that are on you. You got to make them. And here's why. It's not like this choice is going to make or break it, right, the entire app. But when you string together five, ten, 20 decisions of this kind, that's how the app flies or falls. Now, the next question, how do you show that StudletPins is locked? When you tap it and you see the preview or when you're in the grid mode in the homepage, so to speak, maybe with a lock icon. And here's the reasoning. If you don't show that it's locked in the initial screen in the home screen, the user will tap it for nothing, and that may upset him. The entire experience changes because if say, 40% of the wallpapers are locked, Users are going to constantly go back and forth. They'll have to tap, check and see if it's available, and if not, go back to the home screen and pick another one. That sounds frustrating because obviously it's not ideal, and that can be more annoying than stacking four banels on top of each other, even though that's not allowed. But yeah, we'll choose the first option, showing the lock icon on the card in the grid on the homepage. Next, I mentioned I want an ad when the app opens. But what if you apply a wallpaper, then you leave the app to see how it looks like, right? Then you come back to the app, meaning it was in the background, and now you brought it back into the foreground. Does that mean that you show another ad? Because it's an app opening of some sort. And that's tricky. I'm going to say yes, even though that's a bit aggressive. The thing is, when the app opens and you show an ad, that ad may be so immersive that the user thinks it's actually part of the app itself. So they tap and they download something completely different, and then you've lost that user. That may happen. So keep that in mind. So you may get good revenue, but you're going to lose users because of that great ad that you showed at the beginning. So that's not good. That's not good for anyone. Google won't be happy, and the user will very likely not be happy either. Because you got to keep in mind, the user is on the sofa at 9:00 P.M. He's bored, he's tired. Maybe he's watching Netflix movie in the background with his phone in his hand. He gets to your app, he looks at the TV, he glances back. He sees an ad, and he taps it thinking he's going to be brought to some wallpapers, right? And that's exactly how you lose people without even knowing it. Okay, after about 13 minutes, the new ads are set up, and Claude is going to check them out and here's the ad from the app open. Okay, again, all test ads, of course, and this seems fine. Next, we can see the first one is locked, see the icon and the teared message, watch ad. Good stuff, nice and clear. Let's see if Claude is going to test it. Yeah, it does tap it. I love that we don't have to babysit it or hold its hand. And this pop up very clear. The user knows that if he wants to use this specific wallpaper, he has to watch an ad, and I very much like this approach. And when we tap it, yeah, we do get an ad. And the great thing about these rewarded ads is that you can also see a message at the top that says, reward granted. In games, that's how you know you got a power up boost an extra life or whatever without grabbing a credit card. So you pay by watching ads, what with a credit card? That's the ecosystem, and people realize that's the whole game. You pay with cash or by watching ads. It's simple as that. Nothing is totally free. By the way, you may have recognized that Claude is sometimes slow at using any device, be it this phone or a browser. On the flip side, open AI with Codex, Chat GPT is much faster at using your computer. That's something to keep in mind. At least for now, I'm sure it may change in the future. Back to it. The wallpaper is now unlocked. Now for the last ad, the basic interstitial, you enter any app, you tap the button, and honestly, I was actually expecting the ad to show up now. But it seems like Claude decided to show this pop up first. Okay, that's fine, as well. And here's the ad. All good. Yeah, but always be on the lookout for the user's experience. So here, the question is, was the wallpaper applied, and even Claude is asking about confirmation, you know? Where is the snack bar? That's the confirmation part. And it seems like it didn't see it. Claude did not see it. I didn't see it either. So that's a bit of a problem because you may be tempted to click again, to tap again because again, you're not sure what happened. But because Claude noticed the issue, it did not see the notice, it will try and fix it. And this is, again, fantastic stuff. Okay, it's now trying again. Good work. Claude is going to continue to test, and I have to say that this makes our life that much easier. Back in the day, we had to think about all the potential pitfalls and put guardrails for all sorts of situations. But here, Claude handles most of the heavy work automatically. Overall, Claude is going to wrap it up, but now it's on you. You have four potential types of ads, the banner at the top, the ad that pops up when you start the app open. Then a full screen ad called Interstitial that shows up when you apply any wallpaper whatsoever, plus a special interstitial for specific items, a rewarded interstitial. Now, how you mix and match them is up to you. Most people prefer to start with fewer ads and then ramp it up. Once you have your first reviews, you can see what's up. But if you start with too many and you get a few Winstar reviews, that's basically going to thank your app. Now, one final thing. Clearly, these are too many ads for such a small app. What can we do besides showing fewer ads? Well, we can add more features, more stuff, but what type of stuff? Let's chat about that, but let's not ignore one clear warning sign here. Claude says the ad from the start shows up with a slight delay. This means you're going to see the grid of wallpapers for about a second, and then the ad loads up. And flashing stuff is never a good idea. It's annoying and people are confused about what happened. So before we continue to develop the app, first, we have to create a better experience, and that can be done through a splash screen. Let's talk about that in a moment. 26. Improve the Experience with Another Screen: Welcome back. We have our ads, but the first one breaks the experience. I've seen this firsthand, and I know it's quite a big problem. The easiest way to fix this screen flicker, W flash, whatever you want to call it is to something called a splash screen. So let's tell Claude to ad it. Now, the good news is that all of these terms like interstitial ads, rewarded ads, SDKs, splash screens. These are going to be repeated a bunch of times and you'll soon get used to them. Now, Claude agrees that this is a good idea and it gets to work. Typically, you would provide the design for the entire app, but we'll talk about that in a separate lecture. Right now, within building mode, we're taking it step by step, and we're discovering stuff that needs to be handled. Notice how Claude is thinking through various cases, like a situation where the user is left staring at a logo rather than enjoying the app. That's good stuff from Claude. Trouble is, while it seems like a great experience, we can't enjoy it too much. The first try is a no go. The splash screen is this one here. It's a dark background plus a few stars and a moon. Not sure why Claude chose these symbols, but okay, whatever, think of it like a placeholder design that you will have to replace at a later point. So the flow is this. You tap the app, it opens this splash screen, then the ad loads, and then after that, the actual app. But Claude failed. So actually, we are still seeing the grid of wallpapers, then the ad. So that's not good. That's exactly what we wanted to avoid a flash of some sort. So while Claude is excelling at certain things, here it misfired. The good thing is, it's catching most of these problems, so we don't have to say anything. In previous models, this was a huge issue. You had to stop it quite often and tell it, Hey, you're missing the point. You're not doing well. That's exactly the issue with Trena Fix, right? Yeah. More than that, sometimes it would say, Yeah, I'm going to test it. The test would clearly fail. You would see it on the screen. It would fail. Visually, you could see it not work well. But in the chat, the model would say, Yeah, it's passed with flying colors. It's all good. And then when you would actually say, Hey, did it actually pass? No, you're right to push back. No, it actually did not pass. I was just saying that. That's incredibly frustrating. Now I'm going to cut this short. I've spent over half an hour for this splash screen, and it's failure after the failure. Now, the reasons aren't all that important, to be honest, various technical difficulties. Now, one thing that may have made this worse is the fact that after implementing all of those ads, I did not make a new session, and that's on me. So this chat was actually quite long, and obviously performance seems to have been degraded, okay? I got worse. You can never say with precision if that's the cause of the problem, but that's one of my guesses. And you can see how Claude is wrestling with this issue, how it's trying different approaches and how it's measuring the loading speed. All this in the name of a better user experience. I know it doesn't seem like much, but this is a problem. But in the end, Claude gives up because it can't produce the desired outcome. It does say that in the live version, the loading speed is probably going to be better but there's still a good chance there may be a slight delay, and it does put a decision on us. Do we keep it as is, or do we simply not show the ad the first time the user opens the app? The idea is this a cold start is when the app is completely closed, so not in the background, not when you minimize it. When you start it, all the systems have to fire up, and that takes a while. For the user, this is not ideal. It's waiting time, right? And Claude proposes we not show the initial ad, and instead, we only show it if the app is in the background, minimized and then the user brings it back into the foreground. So this would mean that the user apply the wallpaper, then he goes back inside the app to try a different one, which makes sense. And this, I think is a good compromise. But it's all assuming the user will be inclined to test out multiple wallpapers, not a single one. And assuming a decent variety, yeah, I think most users will attempt to try out various multiple wallpapers, right? Again, this is another decision that changes the path of the app, the trajectory. Think about it and you have to make your own decision. Oh, and nothing has been saved or uploaded to GitHub, so that's something else to keep in mind. But I think I'm going to start cutting that away because it's nothing all that important. In any case, let's take a break. I'll see you in a second. 27. The Reality of Ads and Making Money: Welcome back. You probably know that making money from your apps is difficult, but this needs to be looked at in detail. So here's the situation. Your customer acquisition cost, your CAC CAC, will determine how you monetize your app. So let me give you an example so it's easier. So I made this app for MAC users. This is SAD finder, and it helps you work faster by adding certain features that were missing in the default app on MACOS. If you're MacOS, you're probably familiar with some of the things that are missing. Things like snapping your windows and quarters or have this is a godsend if you have two large displays, using delete to send the file to the trash or enter to actually enter the folder, backspace to go up, all sorts of things like having multiple tabs, all sorts of stuff that makes your life easier. Now, all of this seems super basic for the Windows users, but these were missing on Mac OS plus a bunch of other I added teams, so you would get one that would fit your style, as well as some big themes. So if you can't read labels well, this would fix it. In short, this is a decent app. And the pricing was something like this. It was five bucks per month or 30 for lifetime. Initially, it was 40 per year or something like that, but it wasn't getting any traction, and I really wanted users. So I dropped it from 40 lifetime to 30 per year, something along those lines. Okay, now, all is fine and well. What's the problem? Well, the cost. So, let's not talk about the app, the features, nothing. Let's just talk about the cost. So here's the dashboard, right? So a few people bought the lifetime plan at 30 bucks or so, okay? And the thing is, I got only a handful of people like literally one or two, three people for the $5 subscription for the monthly plan. The thing is, I spent hundreds of bucks, 100 bucks, even more. And in total, I got about half that back. So that doesn't make any sense. So you put in whatever, let's say, 1,500 bucks and you made only 1,000 bucks, you've lost 500. That doesn't make any sense, excluding all the other costs, okay? And here's why this has happened and why it's likely going to happen to you. Advertising is expensive. More than that, it takes time for the algorithms to understand who's the right audience. In short, you got to burn money to find out what's what. See the question is, in what country should I advertise this product? Again, it's only for MAC users. Now, is it going to be in the US, in the UK and Australia? Those are premium countries, the best countries where people have spending power, but those are the most expensive countries, right? Maybe I should go with Portugal, Germany, France. They don't speak English, so I'll have to translate everything into multiple languages. And I'm not sure how many Apple devices there are. Now, do I advertise on the form of Twitter or read it? Or what about meta ads, Facebook ads? What about TikTok ads, Google ads? And when I want to sell this product through an ad? Okay, what do I include in that ad? Do I talk about snapping Windows? Do I talk about themes? Do I talk about the delete key, the cut paste, the backspace, the enter? Because again, it's just a small banner. So the thing is, you won't know unless you try stuff. I launched it a couple of weeks ago, so the loss really does not scare me, but this is quite uncomfortable. This is the process of finding out what works and what doesn't to actually get users to use the app. Now, here's the essential point. After the while, I will have a clear customer acquisition cost, okay? Let's call it 40 bucks. So if I spend $120 per day in ads and running ads and to showing people ads that they should install this Sad finder app, that means that I would typically need to get three lifetime users to break even, okay? Now, I have a course about running paid ads just in case you're curious. This is just a super quick overview. But the problem, I think, is quite evident. The user pays once 30 bucks to get lifetime access, but I'm spending 40 bucks to buy them, 40 bucks to show ads. And finally, after 40 bucks, I'm going to get one paying user on average. That's how this thing works. So the math ain't methane. I'm losing ten bucks per subscriber per user. Now, here's the thing. Even if the user subscribed, okay, at five bucks per month, I would still need to keep that user for eight months just to break even because eight months times five bucks, 40 bucks the cost of acquisition, the CAC, that doesn't work. That's not good. This is no bueno. So the solution is to either, A, get totally free sales without advertising, which is like asking for the money tree in your backyard or have the ability to fly or something like that. Everybody would ideally want that just organic traffic that generates sales. Okay, or B, lower the CAC, which is, again, incredibly hard. So rather than a user costing me 40 bucks, maybe it's going to be 25 or something like that. But still, that's incredibly hard. With better ads, you typically can slightly improve it. Well, of course, see a bit of both. Now, lowering the cost, the customer acquisition cost can be done by improving ads, targeting different countries. But the thing is, you'll never get a cack down to five bucks or ten bucks, something like that. No, advertising is unfortunately expensive. When you try to promote something, it's super expensive. So that means that my pricing unfortunately has to change. What I charge for this product has to change because my monetization strategy, the way I make money out of it, is not valid in the long run. So I will continue to keep these prices for maybe a while. But as I get more data, I think I'm going to have to change something because that's the thing. I'll probably have to make the lifetime deal, something like 49 bucks, something along those lines. Even then it's not ideal. The monthly, I'm not sure and probably 30 bucks or so for the annual. But here's the problem, because this is something that most people don't address. I have competitors, not a lot, but I do have them. Cause here's the thing I would gladly change from five bucks per month to ten bucks per month. And maybe 100 bucks per year, right? But the thing is, because of my competition, that's not viable. People are not going to pay that, okay? So your apps, as well as mine, are nothing groundbreaking. As such, you can't double your competitor's pricing, okay? The latest iPhone can cost a bit more than the latest Samsung, okay? It can cost a bit more premium for different things, okay? But it can't be triple the price. That's the same thing with your apps. You can't triple the price of your competition. If similar apps are, again, five bucks, you can't charge 12 bucks, okay? Because it simply doesn't work that way unless you have something incredibly special. But yeah, running paid ads is going to be expensive. Showing ads inside of your app, in this case, the wallpaper app, so you're showing an interstitial of something won't generate enough to offset. So let's say that you're going to pay whatever $1 per app install, okay? So the user is you're going to buy a user for one single dollar, okay? He opens the app. He sees an ad, and that's that. He's going to see it once. Okay, he'll generate, let's say, $0.10. So you're down $0.90. Multiply that by 100 or 1,000 and you're losing money hand over fist. Then you add a subscription of sorts, five bucks per month. Okay, but how many people sign up? Say one person out of every say ten, okay, 10%, which is fantastic. So you're spending ten bucks to get ten users, and you're making five bucks from that subscription plus a few extra cents from the ads that you're showing. Still not great. But if the user remains subscribed for more than two months, now you have a small profit. So that's the actual game. That's the hard math. You have to adjust your pricing based on what the numbers tell you because I can't promise you $1 per app install. I can't promise you that. It may be five or ten bucks. It may be a few cents, and I can't guarantee that every ad impression that every time I use a sees an ad, you're going to get $0.10 or $0.20 or whatever. It depends on a ton of factors. But after testing, you should have an idea about what's feasible. Now, in my case, I would love more people to use the $5 subscription, and that's because they'll use it. They will probably enjoy it. That's my hope, and hopefully they will remain subscribed for a long time. But the initial feedback says, people hate subscriptions. They prefer the onetime payment, so I'll have to experiment. You'll do the same with your apps. It's a fine line between showing too many ads and ruining the experience and setting prices too high for regular people. This is the tricky part. So we're not doing it, just based on greed. I'm not putting out these prices just because I'm greedy and I want a Ferrari. It's because the customer acquisition cost is expensive. And if you go to organic route, just writing blog posts and filming on TikTok and editing and doing videos on YouTube, that's still time. That's still 4 hours per day every single day. Of course, you can't work for nothing, right? And case in point Marques Brownlee, NKBHDT is a massive YouTuber and this guy launched an app called panels, a premium subscription based wallpaper app, exactly like what we are doing right here. You had some free ones, then the pricing was this, 50 bucks a year or 12 bucks a month, and half of the money went to the actual artists that actually made those wallpapers. Noble thing, right? Well, it got shut down. He initially lowered the price after a lot of backlash. He showed less ads, but after about a year or so, it finally got shut down. People were quite angry, disappointed. The backlash was massive, and overall, a whole bunch of emotions wrapped up. Now, the price point seemed to be way too high. And again, people were uh, were annoyed. Let's put it like that, even though it was much it was to a much higher degree. The backlash was massive. Now, keep in mind, he didn't have any advertising costs. Okay? He wasn't paying ads because he got organic traffic from his YouTube videos. But of course, he had a team, he had expenses, so all of those were quite high. So he felt like the price was justified. Now, monetizing the right way is incredibly difficult, and there's no one set solution. You have to adapt and see what works. So, yeah, that's how things go. Let's continue. 28. Add More Features for Extra Engagement: Welcome back. We've made some great progress, but the splash screen is a bit of a problem. Claude says it's not ideal, but it's not putting its foot down. It's making us decide. In short, we should not show the first ad when the user first opens the app, only when he comes back to it. So that's a bit of a compromise. That's less revenue. But overall, I think that's fine. So let's tell it yes. Only serve app open ads on returns to the app. Now, this is a copy paste from what it said above. So I'm just simply saying that back. Now, while it's thinking and executing, I'm going to start a new session, dangerous stuff. You'll see why I'm doing that intentionally. So here I'm going to say the following. I want to add more categories inside the app like whatever nature, people, travel, summer, whatever. Now, what would we need to do? Don't execute. Just tell me the plan. The goal is to give users a reason to come back more often and show more ads. Okay. So I want to emphasize the goal so Claude has more context. Based on these extra details, Claude may come up with some other features that I didn't even consider. That's what I'm trying to do right here. Now, let's pause for a bit while. This is thinking in the background. So these sessions are very long from 25 minutes to 90 plus minutes for some quite basic tasks. So I'm using a very solid model and a very high effort level, but I'm still getting bored out of my mind, waiting for it to execute. I won't lie. Sometimes I'm not even watching the screen. You're going to have the same issues. So naturally, you'll be inclined to start a new session like I did here. Basically, you'll try to work in two, three sessions at a time, which could potentially save you some time, right? That's the thought process. But no, to be clear, there are ways to orchestrate such a workflow, but I'd rather be honest with you and tell you not to do. The chances of something going wrong or wasting all of your resources in a very short amount of time are too high. It's not worth the risk. So no, don't try to work in parallel on the same project on multiple features at a time, or even worse on the same feature. As you're about to see here, there's a good chance something may go wrong. So let's go back to it. Here's the plan from Claude, and it's quite a big one. Now, in these cases, I like to answer using numbers. I'm not doing it just for Claude. I'm doing it for myself as well. It helps me. So let's go through all the feedback from Claude, and by using numbers, I know I didn't skip anything, okay? By the way, the open ad feature is still moving along at a snail's pace, super slow, but it is working. Now, in the meantime, I'm going to download a few more photos from Unsplash. And I'm going to organize them into folders, okay? My idea is simple. To keep the app interesting, I'm going to add more categories. Maybe you like anime or cars or TV shows. By having categories, these should help people explore the app a bit more. This should nudge them along. Nobody is willing to endlessly scroll the wallpaper app, so I think categories are a must. But yeah, after the long time, very long time, Claude finally removed the ad from the cold start. So when you return to the app, yes, it will show an ad, but other than that, no. All good. Now, dv out a few other details here, but overall, this is good to go. So let's switch to the other conversation. So let's start answering. For the first one, yes, let's have multiple tags. Good idea. For the second one, yes, horizontal chips, totally fine. Those are going to be the tabs. Three NF apps are a great choice. Sure. You'll see how they're quite useful, and I choose to show them, let's say, every five wallpapers, okay. Plus, we should cap the number of ads per session. So one user doesn't see 20 ads with something in 5 minutes because, you know, some people have crazy energy and maybe they want to apply 20 wallpapers in a very short amount of time. Well, you know, that may happen, the thing is, you may get band, even though that may be a real user. That's not ideal. So let's put a hard limit, a cap, okay? Now, I didn't mention the cap on purpose. We'll see what Claude recommends. I'll also tell it that I have four categories in folders on my desktop, and I'm going to ask it if it wants me to move them to a specific place, which I think it will. So that's basically how I tend to work. A few tasks that make sense together, okay? Now, let's see what Claude says. Okay, solid calls, thank you. And the interstitial session cap is the right instinct for ad mob safety. Again, good feedback. I do see that it wants me to place the images in a specific folder, okay? I do want to look for it manually, so I'm just going to right click this area and hit browse. So that's much faster. And now a bit of cut paste and we should be good to go. Okay? Again, Claude is quite chatty. It's putting out a lot of texts. You do need patients here. It does say that the repo size may grow quite a lot because I'm adding super big photos. Okay. But it's a solution. We can use a specific command and basically keep them local, which works well. It also tells me a few things about the session cap, 34 ads per session. Okay, yeah. With a minimum gap, a cool down period of 60 seconds. Okay, my advice, pause the recording and read everything because this is good advice. I've skipped out with some key areas, and that's how you make bad decisions. You got to be careful. Here I'm going to say the following. One, I don't want to grow the Git repo. Two, you choose the titles. Three, interstitial limit, four per session and a minimum gap of 30 seconds, so a bit more aggressive. Then finally, go ahead for the native in feed ad. Okay, good stuff. Let's see. Claude is responding and it's giving me a build order, which is fine. It says we need a separate ad unit from ADMp. Again, totally fine. You can do that on your own. Overall, this seems good to go. It just wants confirmation. Sure. Go ahead. Okay, now the fun is going to begin. Well, the waiting. This is going to take a good while. One thing to remember, we started in the other session, and we told Claude to remove the ad when the app first starts. Remember that, right? Then before it finished, we asked for the plan on how to implement these categories and whatnot, okay? So Claude read the code as it was back then, with the open ad still active, okay because it wasn't finished. So it had a snapshot, a photo of the code as it was back then. In the meantime, we changed it. So now in this session, Claude is going to be quite surprised to see that a few things have moved around. So a few things have changed. And yeah, at the ten minute mark or so, it says something changed with the splash page. We also didn't commit and push that session, so that's not ideal either. So working in parallel can cause quite a few problems. Nothing too serious as of now, but again, not ideal. We'll see if this gets serious or not. Okay, at around the 13 minute mark, it also notices that a file that handles ads has also changed, so it has to reread it before editing. So this is a great example on why you should not work in parallel unless you have a very well defined protocol and at least a $100 plan. My advice don't do it. Launch at least 23 apps, the good old fashioned way before you try to optimize your time. I know this is not ideal just waiting so much, but please don't try to work in parallel. Let me skip ahead. So it did quite a few things, and it's telling us, Hey, concurrent edits, yeah. While I was working, a few things changed. My changes merged cleanly with them. If it was you in a different session, no conflict, okay? Then a few other details here. But notice 0.2, P is intentionally empty, so it didn't actually read our images. I handled the other parts first. It's also asking us if I want to see the app, but without the images, Okay, the categories won't show up, or they may cause a crash if Claude is not careful. We'll see in a second, what's what? By the way, sometimes connecting your phone, so Claude sees it is a major pain. So you can waste hours on that task alone simply getting Claude to recognize it. Here, the app launched, but nothing has changed. I did tell it that my photos are placed where it wanted them, but it seems that Claude is busy with something else, so it's not processing my message. This is what it looks like, by the way. In any case, after a while, Claude also acknowledges that we won't see the chips unless we handle the hosting. We got to update it. Okay, I'm going to zoom ahead to show you the actual chips. Chips are these small bits that are second nature to Android users. And yeah, this looks good. It's the old categories, not the ones that I set up in those folders. But as a proof of concept, POC, this works fine. The native ad also doesn't work, but that's by design. And of course, the limit on the number of ads doesn't show up either because there's not enough content. Okay, now Claude sees my message, and it's going to check them out. Hopefully, it will understand it has to make new categories and remove the old ones, or if not, at least, ask me about it. We'll see. Yes, after a while, we do have some questions. So one, my folders are different than the initial categories that I mentioned in the chat. Plus one has a spelling issue. Good stuff. I pick that up, okay? And those four are what I want, yeah? And what do we want to do with the pre existing photos? Simple, keep them and re tag them. Sure, place them where they fit. That makes sense. Now it's going to process them, and this is going to take a while. I have to say that the titles in the descriptions are a bit of an overkill for some wallpapers. This is making Claude work harder than needed. It's taking up more resources, but I figure, why not? Even though they're not that useful, it does make the a feel a bit more well put together. And here's the thing. Four categories, ten images, each, 40 photos in total, but we also have some thumbnails, the previews on the grid, on the homepage grid. So that's 80 images in total. That's quite a lot. So let me skip ahead. This was one of the longer coding sessions. And yeah, success. The categories have been updated, and there's the native ad. A native ad is different than a standard banner, like the one we have at the top, because it tries to blend in with the rest of the app. It tries to feel more organic. That's why it's called native. It can take on many different shapes and sizes. You can think of it as a bigger banner that adapts to your app, and it's working well here. One thing when Claude finally launches the app, don't go around using it if Claude is still working because it may try to work on its own, and you're going to mess that up. You can see the stop message in the chat bar. So that means it's still working. So try to not interfere. And that's because you may start playing with the app, but Claude has to make, let's say, some screenshots. It has stuff to check. And if it sees something unexpected, well, it could potentially start fixing stuff that's not broken, okay? So with these newer models, that's not a real danger anymore, but in the past, it definitely happened. With a lower model, a lower effort level, maybe too much context, I think it still can happen. So please don't do it. But it's like when it's raining with the sun shining and there's little to no clouds, it's a hard thing to capture, so I couldn't manage to capture it during these sessions. But again, sometimes Claude is incredibly dumb, so, yeah, try not to confuse it. Here I'm not going to attempt to break it just on purpose just so I can get it recorded. You're going to have to trust me on that. You might also notice that after you move it about and Claude has to come back to a specific place it may have trouble doing so, which is quite odd. But in any case, back to it, after about 40 minutes or so, it did the job very well. Of course, we're still using test ads, but that's not a big deal. Claude can create real IDs in just a few minutes. And there's one small thing that I introduced. I said I wanted a native ad every five wallpapers, but of course, that doesn't look good because these are in portrait mode. So there's going to be a pretty big empty space. I wanted to see one of two things. Either Claude recommends we show the ad every six wallpapers, which it did, or I wanted to see if it would insert the ad in that empty space. Now, to be fair, that aspect ratio is a bit tricky. Most advertisers prefer standard formats, and this is not exactly that. Overall, I'll tell you to change it to one native ad after the six entries and then commit and push because we didn't do that in the previous session. Okay, let's take a break. 29. Find New Ways to Add Ads: Welcome back. I won't mention it anymore, but I'll constantly commit and push after every session so everything is nice and clean. Now, our objective is twofold. Add more features that make sense and give ourselves the option of generating more ad revenue. Okay? Now, considering we're adding categories and a bunch of wallpapers, a search feature makes a whole lot of sense. But as it stands, we're using about 25% of the top of the lab with this part right here, which is just a bit of text, and that doesn't make any sense. The text should be eliminated. So I'm going to tell Claude that, remove the title and subtitle so the user gets to see more of the photos. I want to add a search feature, and in that search area, I want to add a banner or a native ad. Plain English is always best, and if you can add more context, please do it. Previously, prompting was a very big thing. You had to follow a very specific structure to help the model produce something solid. Nowadays, that's no longer the case. Prompt engineering is pretty much dead. Explain what you want and why you want it, and probably you'll be good in 90% of cases, if not more. Okay, Claude is asking us about what title and subtitle because the cards have them too. So I'll clarify it is indeed the page header. That's how Claude identifies it. Okay. And then there's a second question. We could show the search bar inline, so in the exact same screen, and that would likely be the better experience. But if that's the case, we won't be able to show a different ad. So I'm going to choose a dedicated search screen. And I think a native ad is fine to begin with. It depends on how Claude will integrate it. We'll see. Just to be clear, I'm showing you options and my thought process. This is not about greed. I just want to be clear about stuffing as many ads into it as possible. No. This is about weighing our options and establishing a way to think about how you want to build the app, okay? Then it will be up to you to decide if you want to remove this or that. You're building an experience, and I'm showing you options, okay? I'm going to skip ahead, and I'm going to show you the result. But keep in mind, I'm on a gigabyte connection, so my Internet speed is fantastic. I switched from 100 megabytes to 1,000 just to make sure that I'm giving Claude the best possible tools. Even then it's still taking a whole bunch of time. Anyway, here's the result. So without the header, you get to see four full wallpapers plus two extra ones partially. And that's fantastic because it clearly tells you there's more content under meat so you could scroll. So that's a good signal. Now for the search icon, well, it does open a new screen as I instructed it. And the native banner is it's significant. The native ad is huge, okay? The thing is, when you type something in, does it go away or does it push everything down? Let's see if Claude will test it because first Cloud has to do a thing. And yes, it does put in arch for the architecture. But as you can see, this is far from ideal. This is what I mean when I say that you have to craft an experience, okay? These ten, 20, 50 decisions that you make stack up. And there seems to be another problem here. The keyboard lingers. It stays active, and obviously that's not a good idea. It's covering the content, okay? Hopefully, now you get a better picture. Claude can handle the code, but you have to tell it what you want built. It's like having your own personal chef. It has the cooking skills to do anything, but if you mix strange ingredients, the dish won't work. So you need a good vision about which want to build. Here, I'll tell it the native ad is far too big and that I want it replaced with a simple banner, then come and push. Notice that I'm constantly motivating my decisions. I prefer working with Claude that way. I think that's smarter. Now, before I hit Enter, I see it's noticed some problems on its own regarding the keyboard not hiding itself. A year ago, this would have been a dream to have a model smart enough to realize something is wrong. So this is good progress. At the same time, I've launched an update a few days ago with test ads, and Claude didn't tell me about it. So I had to go and make a big fuss about it, and it did change something in Agents ND, in the internal rule, so to speak, so it will constantly check for things like that before giving me the final file that I have to upload to Google Play, the AAB file. So again, it gave me a file to upload that had test IDs, so no ads were being shown. So that was a very big problem. And again, Claude didn't say anything. So I really had to I really had to get into parent mode and say, don't do that anymore. Let's make sure that never happens. And again, it did edit that agents dom D file, and from then on, it didn't do that anymore. Okay, back to it, let's see the standard banner. This is a bit tricky because it's quite close to the search field, and the field isn't all that well defined. So accidental clicks are not ideal. AdMob is not happy about accidental clicks. Um, but, well, this is on the edge. I think overall, it's okay. Okay, so this was a great productive session, and I'm quite happy with the progress. Let's take a short break. 30. Create a Subscription for Recurring Revenue: Come back. The holy grail of apps is recurring revenue. That means a subscription of sorts. You get something like five bucks per user per month, okay? 100 users, 500 bucks a month. 1,000 users, now we're talking five grand a month. But of course, some people will always cancel. So after a month, some after five or 25 months, right? It depends on how much value you give them and how you present that value. When someone cancels a subscription, that's called churn. So imagine you have 100 paying users, but five leave every month. As long as you get, say, seven new ones every month, at this rate, you'll constantly grow your revenue, and you'll be flying high to users, two net new users per month. Now, that's the ideal situation where the use of acquisition is significantly higher than the churn. Now, here's what we're going to tell Claude. I want to add a new category called VIP. I already added the folder inside images. Would be a restricted category that the user can unlock for 99 a month or -30% per year. If the user taps any of these images, he's going to see a pop up with these two prices plus an option to unlock one single wallpaper by watching a rewarded ad. This category should be second in the list after all, and it should be golden with a crown. I don't have my Google Play account just yet, but continue as much as possible. So that's the plan. For you, you could potentially do this. You could sprinkle premium wallpapers among all these other ones. So that way the user has a higher chance of interacting with the premium plan, and you could potentially get more tabs, more clicks. But my approach is also valid. Having it as the second chip and in a gold color will likely draw the user's attention. So that's a good choice as well. Now, the biggest question that should be on your mind is, what would people pay for? And what amount? This is a highly debated topic. Developers love to argue about this stuff. Some swear by 499 per week. So yes, five bucks per week, and then something like 40 bucks per year. In essence, the weekly plan is Bt, so you're far more likely to go for the annual plan. Some people go for 299 per month, and that's that. Now, the main thing is what type of content you can produce and what are people willing to pay for, of course, because wallpapers are a commodity. You can find free ones absolutely everywhere. So this is likely the biggest challenge. You can't make anything that's copyrighted, so no Marvel, no ego, Pokemon, nothing like that, okay? So a good chunk of your effort should be surrounding this topic. Now, what I propose is you first launch this basic wallpaper app with images from Unsplash or whatever, even your own random photos, it doesn't really matter, just so you have some experience on the V belt. Then launch a few more so you get used to clouding the entire process. During that time in bed, in the shower, think about what excites you, what hobbies you have, what niches you can explore. It can be model trains, airbrushing, ping pong. It can be old records, whatever. That's typically the right approach. Target a niche you love that you have in depth knowledge of so the actual app should be fairly simple. The functionality should be quite basic, but the actual content should shine. It can be short stories. It can be a comic book that you've written a while ago, some short animations that have a strong impact, whatever. But keep in mind, a great idea is nothing without all of these bits, without understanding how monetization works and the abste optimization and whatnot, all of those things come first. But yeah, ideally, you do need the best of both worlds. Now, let me quickly tell you a story about these two worlds. In my country, there was this detergent factory, so laundry detergent that was basically idle. They had little to no orders. The detergent, it was fine, but they didn't know anything about marketing, about ads, about TikTok ads, Facebook ads, whatever the works. So they were quite desperate because again, the factory was just sitting around. The factory was owned by a couple. The couple with regular people like you and me, they wanted a business, and they figured that this was something that could work, you know, the factory was fairly well set up, but they underestimated how much marketing they would need and how much it actually mattered. They figured that if the detergent was good enough, word would spread organically. They would constantly grow week by week month by month. That's how most entrepreneurs imagine that things go. They don't spoil the alert. They don't obviously did not happen, so they were in a dire situation, quite. In comes this young entrepreneur who had a factory of his own, a sock factory. So he was making socks. He had this factory with robots, and that's that. He was making cotton socks. He got some grants, some European funds, and he built a small factory whatever, ten robots or something that made cotton socks. Now, the socks were decent. He was selling something like a 12 pack for something like 20 bucks, pure cotton, good quality, nothing special, right? Now, his marketing was awesome. He had great charisma, and, you know, he had this electric energy about him. I put a smile on your face. The problem is, the margins were quite small. Socks were a commodity, and the profit margin wasn't fantastic, especially at that price point. But still, he had all that marketing experience. That was the key. He knew how to sell online. The product, it didn't actually matter. So it was him, his vibe, his video ads that made you smile. And to cut it short, he partnered with that couple with the factory, with the Dirgin factory. They made the new company 50 50, him and the husband from the couple. They would basically do the production, and he, the young entrepreneur, would do the marketing. Okay. So this is a real story, by the way, and I've actually spoken to the young entrepreneur. He's a good guy. So after one year in business, they did over $2.2 million in revenue and about half 1 million in pure profit, half 1 million in the first year, absolutely incredible for a factory that was just catching dust. Now, half $1 million in your pocket, it is something, well, 250 for both parties, 250 each, selling detergent online, good stuff. But here's the thing the second year over $3 million in revenue and about $750,000 in profit. So this was a resounding success story. And finally, in their third and final year, unfortunately, about $5.5 million in revenue and about 1.1 million in profit. So in three short years, this new partnership netted them nearly $2.5 million. So that's profit, okay? But they got into an argument, and everything stopped. Everything crumbled. I'll cut it short, the family that had the factory is said to have been greedy. That said, allegedly, they figured they were doing all the hard work and they wanted a bigger share, not 50 50. After all, the marketing guy was just filming himself and taking home hundreds of thousands of dollars per year and profit. Now, how hard could it be to film yourself and run some ads? The about countless ad agencies out there, right? Why should we give 50% of this incredible business to a guy that's only working a few hours per week, right? Plus, an ad agency is gonna cost a few grand per month, two, 3,000 food $5,000 per month. This guy is taking home 700 and whatever, half $1 million in profit. And that's how it all fell apart. The coupled with the factory basically utterly failed with their own ads. They tried to make their own ads. It was not working. And I would see their ads from time to time it was not working. The marketing guy spent about two years trying to make a new detergent formula. And in short, everybody was disappointed and bitter, super, super bitter. So what's the takeaway? It doesn't matter how good your content is if the rest is not well put together. You can't be an incredible artist. That creates, I don't know, incredible art, whatever it is, but you have no idea how to make an app based on these protocols, based on app store optimization and how to show ads and recurring revenue and customer acquisition cost and lifetime value and whatnot. So that's the thing. You can't be one or the other, and that's that. You can't put your head in the sand and say, Okay, that's all that I can do. I just do marketing, where I just do the actual art. So if you're great at marketing, but the product sucks, you're very close. You're this close to being a scammer. So that's not ideal either. You got to find the best of both worlds. But of course, that's rare. That's incredibly rare, but it can be done through hard work and perseverance. Okay, back to the app. The chip stands out, though I'm not in love with this shade of gold, not ideal. The crown is a bit modest, too, but it does get the point across. The VIP pop up is pretty good, but it's initially hidden. About half of it is not visible for no good reason. But, yeah, the design itself, this is quite solid. The yearly price is a bit off 25 bucks and $0.12 that may put people off. And when we test the rewarded ad, yeah, the wallpaper will be unlocked. Okay. Overall, great progress. The app has yet another interesting part, but all of these imperfections are starting to bother me, and they should bother you too, as well. We should handle them because the app is growing quite fast, and I would like to address some of these issues now. Claude is done. It tested the VIP mode too. It did something quite clever, by the way. It enabled VIP mode, like you already paid for it by adding a long tap on the chip. So if you press and hold, that's going to simulate that you made the purchase. Obviously, that's not going to be available in the real app, but it shows how much a smart model can actually help you. Fantastic. Incredible stuff. Okay, let's take a break, then we'll come back. 31. Tech Debt: What It Is and How It Applies to Claude: Welcome back. Let me tell Claude to fix a few things. So, number one, in the card, the second line is too stretched out. So the line height has to be fixed. Set it to 150%. Now, me being a designer, I know the right term line height and the right size, the right number, 150%. That's something that you will know if you follow my design courses. If not, you can simply copy paste it. Now, the second thing, the chips from the categories area are a bit too dull, too boring, and users may not see them, improve their. Here, this is a bit risky because I'm being quite vague. Ideally, I would provide a design made in Figma, or at least some sort of reference. Third, the card has a one pixel stroke around it, but one pixel is far too thin. So let's wrap it up to say three pixels, that will make it look better. And four, the VIP card should be completely shown without any scrolling. Okay, now, while Claude is working, let me tell you that these are just a handful of things, a handful that should be done. The app is basically designed by Claude. Now, is that a bad thing? Not really, but users will see something basic, fairly bland that's not made with love. This is why a lot of mobile lab developers fail. Trust me, 100%. Yes, the apps are technically sound. They work. They work well. The functionality is solid, but the design is mediocre at best. Users don't like that. There are millions, literally millions of apps out there. You need a story, a vibe, a mood. It's not enough to give me the action itself. I want the entire experience to be lovely. People love attention to detail. This is why we love gifts, the bag, the packaging, everything, not just the gift inside it, right? And that's one of the reasons why I'm changing the yearly price to 24 99 on this app. It shows that an actual human thought of it. It's not an automated decision that was done by some AI that 25 point $0.10 or $0.12, whatever it was. Now, to back up, there is a term called tech debt. In short, imagine your walls have mold on them, okay? And there's also big cracks everywhere. So the walls are super messed up. Now, doing real repairs would be incredibly time consuming and quite a dirty job, right? Imagine having to tear down everything, the mess, the noise, but also the price for that actual work, right? Because mold and cracks, those are expensive things to fix. That's what it's like with any type of software, especially in the past before AI came along. So developers knew that certain parts of the app, the website, the software, they had to be remade from scratch. Now, the company didn't allow it, and typically for good reasons, the developer's plate was already full. He had ongoing tasks. Plus, users were actually using the platform, as is, and they were paying good money for it. So nothing was actually critical, you know, the platform still worked. The software still operated. And when bugs came along, they were manageable. This is still the case with certain banks or institutions run by the government. Even airlines use antiquated systems. I mean, really 20, 30-years-old. Now, moving to a new system, a new one, upgrading to a new software is going to be a major hassle. It can't be overly stated how difficult and time consuming it is for a huge corporation. So they keep using Windows 98. That's just a metaphor, because it still works. It's slow, it's nasty, but it works. The company is fine, even though the employees are obviously complaining about the horrible experience, but it works. So that's tech debt, okay? With Claude Code for most companies, not huge ones, of course, that's no longer the case. Any small to medium company can probably upgrade to the latest and greatest. In short, for us, what does that mean? So when a new SDK from AdMob comes along, so in a sense, we can serve better ads. So there's fewer bugs, that means it's a great thing. We simply tell Claude to integrate it, to test it thoroughly, and then update the app and launch it. Fantastic. So we're not leaving any money on the table, we're optimizing it. Something new comes along, we integrate it. That's it's no hassle, no big decision making, no fear of messing things up. We have Github. We can always revert. So tech debt is no longer a big thing in terms of updating stuff, again, for this level to medium sized companies, okay? Instead, what we have instead of tech debt, we have designed that or experience that X that, call it whatever you want. Like I said at the beginning, Claude designed everything here. So there's no transitions, there's no small details that warm your heart there's no attention to detail. There are a lot of things that are missing. Specifically, the background is pure black. The font seems quite basic. The chips are just M. So everything here is mediocre. Nothing is crazy, horrible, okay? It's not rainbow and hard to read fonts or whatever. It's nothing super bad, but it's not great either, you know? You can still read the text. You can still use the app, but it's nothing special. So this is the new tech debt. And you know what? We keep building stuff. We're adding features. We're adding ads, but we're not addressing the soul of the app. And that's because it takes time. Take this lesson, multiply it by ten, and that's what's needed to make the app feel like someone actually put their heart and soul into it. Right now, people can definitely tell that this was vibe coded. My issue is that type of design work is not really interesting. It's not exactly something that I can put into this course two, three, 4 hours of just designing because it's quite difficult. The thing is, I would probably test out, for example, five different fonts typefaces and see which one I like the most. I would try multiple types of transitions, for example, when you tap a wallpaper, some type of smooth animation of sorts. And again, it's just back and forth and it's small decisions, and no one small decision is going to completely change the app. But 20, 30, 50 of those small decisions will add up. But again, it's not exciting, it's not interesting. And this is not a design course. I have dedicated design courses, so you should probably go watch those. But again, it's such an important component. Now, I would probably design a cute mascot that would greet you when you come back. I would probably choose a bright, happy color scheme that would make the entire app stand out. I would probably add social media icons. I would probably give free VIP for whatever the week if you would share the app with your friends, something, right? So stuff like that. But it takes hours upon hours. And I don't think I can keep you that long engaged and still have time to talk about analytics, push notifications, onboarding, plus a whole lot of other stuff that's critical. Now, these things are mandatory. Design, not really. Again, it is, but these are much more important because these are functional bits. If you can't send a message to your users, that's far worse than not having a beautiful type face. But I did want to address the elephant in the room. The design is not great. It's modest. So that's going to be your homework. I want you to make your app feel special. Don't show me a basic app where Claude decided everything. You have to go through that experience and design it yourself. See how it's like to actually design everything from top to bottom. So please do that on your own and show me something beautiful that you decided. Overall, Claude did his job. Everything here is nicely done, well executed. I did see something that looked like a crash. I think that was a crash. I'm not sure it was a flicker. Maybe it was from an ad, but it's always best to ask Claude about it. And that's actually a great segue into those other parts that we have to handle. So if the app crashes on a certain device, how will we know about it? How do we figure out if the app is actually unstable? So that's much more important than choosing different type face of, again, a colored scheme, or whatever. But yeah, overall, I'm quite happy with the progress. Let's pause for the moment. 32. Take It to the Next Level - Introduction: Welcome back. If you're watching this, it means you've done the hard part. You've built an app. You've launched it on your phone. You've shown some ads. You maybe even added a subscription. So that's more than 90 plus percent of people. So take a second and be proud of that. I really congratulate you because it is something. It is an achievement. But here's the thing. Launching the app on your phone is not a finished app, right? It's the starting line. It's not a finish line. Think of it like opening a small shop. You've got the doors open, a few products on the shelf, a couple of customers walking in but now the real work begins making that shop nicer, getting people to come back, getting them to tell their friends about it, and slowly turning those $0.05 a day into $0.50, then into five bucks. So that's what this whole chapter is all about. Taking it to the next level. These are the details that separate an app that dies in two months from one that keeps growing quietly in the background while you sleep. So what are we going to cover? A bunch of things. We're going to add push notifications. So people actually come back to the app instead of forgetting it exists. We're going to ask for reviews from users, the smart way because ratings of pure gold for the free traffic. We're going to add some beautiful subtle effects, stuff that will make the app feel much more premium, and obviously the phone is going to look that much nicer, but we're going to add those effects without draining the battery. That's quite important. We'll add the proper onboarding experience. So those few initial screens where we greet the user and we tell him what's what and notice that I put it right next to effects on purpose because, again, you've got to explain that you do have those gorgeous animated wallpapers, and the onboarding can actually show people how to use them, and it's going to be a great way to make them want to upgrade. We're going to set up analytics, so you know what's actually going on, how many people are using the app, how many crashes you're going to have, and, of course, how much money you're making. And we'll even take things further. We're going to do some remote control stuff for the app where you can change pricing on the spot without updating it. We're going to translate it into different languages, and that's going to unlock a whole new market, multiple markets. Now, a word of warning before we dive in. Don't try to do this all at once. You got to take it slow. You're not going to do this in one single afternoon. And after you do anything, of course, test and make sure you didn't break anything. Save your progress on GitHub, then slowly move on to the next feature. As I said, work along on the second viewing. Slow is smooth and smooth is fast. If you cram ten features into your app into one messy session, you're going to spend the next week untangling bugs, and you're going to hate your life. Remember what I keep telling you things are going to break. You buttons will be in a different place than mine. You Cloud might do something different than my Cloud. That's normal. That's the state of AI. Stay calm, ask for help, and keep moving. And one more thing. Everything here works whether this is a wallpaper app, a meditation app, a workout tracker or whatever niche you fall in love with. The principles are universal. A push notification is a push notification. A good onboarding is good onboarding. IOS or Android, it doesn't matter. So even if your app looks nothing like mine, everything still applies. Okay, let's get to it. Let's take the app to the next level. 33. Push Notifications: Bring Users Back: Welcome back. Let's build one of the most powerful tools you have for keeping an app alive, and that's push notifications. These are the little messages that show up on someone's phone even when your app is closed, and you can use them to bring the users back after they maybe have forgotten about the app. Let's get to work and actually build that, okay? Now, here's how this goes. I'm going to speed up the recording quite a lot because this is going to take some time. But you please have patience on your end because again, it will take some time. Now, here's the deal because it will touch your wallet, potentially. What we build right now, this is the free version, okay? So these are local scheduled notifications that live on the phone. So there's no server, there's no credit card. This works forever, and it's free. And that's because there's a second kind, as well. There's a second type of notification, the paid one. The one that says, basically, send a message to everyone right now. So that type of push, and that usually involves a credit card, but we'll get to that part later on. Once you've actually built something that actually works. Now, for this small app, starting out, the free version is totally fine. So let's have a look and see what's what. Here's exactly what I asked for. So let's have a look at the local scheduled notification, a friendly reminder every day at whatever 6:00 P.M. A weekly one on Saturday morning about say new wallpapers, okay? Ask for permission politely, not on the first screen, but after the person uses the app a little Okay? Now, notice what I didn't do. I didn't tell Claude which library to use or how to wire it, how to code it, whatever. I told it what I wanted and how I wanted the person to feel, okay, when the person is actually using the app. Now, the last line ask politely is actually quite important because, again, that should change Claude's behavior. And while it works, notice that Claude isn't off the races. It reads the app first, which is exactly what's going to happen when you start a new session. It's going to read how the existing screens look like, how the paywall behaves, how everything basically works. So this part will fit in nicely. Now, that's going to happen again every time you make a new session, but it's totally fine. Don't think of it as fuel being wasted. Okay. Now, let's have a look and see what's happening here. This is a moment I like. So Claude it made a notification icon, a little moon, and then Claude wanted to see it before it actually implemented it, right before they put it in the app, like a craftsman holding it to the light to see if it's good or not. But here's the thing. The preview window only accept certain addresses. So Claude got blocked. And those are the orange warnings. This is fascinating. Now, watch what a good partner does when it hits a wall. It doesn't give up and it doesn't say, Hey, I'm done, please help me out. No, Claude finds a way. It turns the icon into a plain image and looks at that instead, oil stuff. So that instinct to check its own work instead of just assuming it's fine is why we love new models. They get better, smarter, wiser, even though they're far from perfect. Now, here's the most single important decision in this whole feature, and it's not technical. It's timing. The permission pop up is a one shot thing. It's like asking a person out. The person says, No, that's it. He says, No, once, that's that you can never come back. Well, typically, right? So you don't want to beg on the very first screen before the user actually use the app. There's no trust involved. Does that make sense? So you first want to deliver some value, and then you ask for something. That's the usual way to work. Now, here it is on a real phone. So a warm message. A fresh wallpaper every day will nudge you at 6:00 P.M. When the day's wallpaper is ready. And once on Saturday morning, if new ones have landed, yeah, so that's all. Good stuff. And you can turn them off whenever you like. Okay, two buttons sounds good and not now. And notice when it shows up after I've seen a few wallpapers, not before, that timing and that friendly warning, those are the things that will turn a no into a yes. That's your opt in rate right here. So these small things can make or break an app and watch the whole point of a notification. Now, the notification opens the app, and then the app shows an ad. It is a test ad, which you're seeing right now, but in the real world, this means money. This is what I mean when I say a notification isn't just a friendly hello. It's a door. Every time it brings someone back, they might see your ads. They might tap the VIP offer. They use the thing that you built. So bringing people back is basically business. So we've built it, and it looks great, but building it is only half the job. Next, we sit next to Claude while it tests its own work like a quality engineer and gets us ready to ship it safely. Plus, it's going to catch a whole other bugs that, again, it created, but it's a great thing that it does catch them, and it does fix them all on its own. Okay, let's save our progress, and I'm going to see you in a minute. 34. Push Notifications: Test and Ship Safely: Come back. Previously, we built notifications. We asked for permission quite nicely and even saw the ad fire when the notification opened the app. Good stuff. It looks finished, right? But it looks finished and is finished are two very different things, and the gap between them is testing. This is the unglamorous part that separates a hobby app from a real one. And it's where you will really see the value in using Claude. So let's see what's up. Claude does the thing that almost no beginner bottles with. It tests, and it tests quite a lot. It acts like a whole week has gone by. So it adds three new wallpapers, and it checks that the app announces exactly three. So not two, not four. It force closes the app and confirms the reminders, rebuild themselves the next time you open it. That's real quality control on my actual phone while I just sit and watch. And why does that make it so much better? Because a broken notification is worse than no notification at all. When that fires at the wrong hour or twice or never shows up, that's the kind of thing that gets apps uninstalled. It's the boring, finicky stuff that really people skip, but Claude doesn't skip it. So that's fantastic. It does it for you patiently up until the point it's just perfect. Now, what I love is that I didn't ask for it, you know? You can't really put in every single potential bad thing, like, what if the user doesn't have Internet or super poor Internet or whatever else, with are 1 million situations, right? But yeah, if you're just getting started, this is a lifesaver. This model has initiative. It's looking out for us, and that's exactly what we want. Now, reading the models thoughts is sometimes super interesting. But when it's slow as hell, sometimes really I skip it altogether because, again, I'm not even looking at the screen, I'm just doing something else. Beckwith, it actually has a problem with my phone with my actual phone that has a quirk. This real me phone, a fairly modest Android phone, blocks a few commands that most phones allow. And instead of shrugging it off, it works out whether a strange result is just a real bug, or maybe a side effect of the test itself. So it's really thinking and analyzing about what's what, and I do appreciate that. So that's the kind of care that you should have when you're building an app. Now, I do recommend you pause from time to time to read some of these thoughts, but again, you're going to have your own experience. But keep in mind that just about every single video that I'm recording right now is over 45 minutes, and I'm doing my best to speed up certain parts without throwing away anything that's actually useful. Now, when it's done, you're going to see the model is, again, very talkative, chatty. It has a lot to say. It tells us a lot of details about how it implemented the push notifications and a whole lot of other stuff. Now, to be fair, if you never read what the model is saying, you will not learn. You are going to be missing out on quite a lot. So this is why it's tricky. Sometimes you got to ignore it, sometimes you really got to read carefully. My advice is you first learn so you know what to ask in the future. So that's the essential point. Okay, let's see what's next. Now, here's a second kind of reminder that's really worth having. The ones we built are all, Hey, come back to the app nudges, you know. But there's a more practical one, the update kind, telling people, Hey, a new version is out, and this is incredibly useful. So, for example, you added a whole category. You fixed some major bugs. You made it faster. You got to tell your users, that's the thing on Android, a lot of people do not upgrade. I've had people using the same version that I launched two years ago, and it's incredibly frustrating because you made it that much better. But if you didn't have push notifications at that time, you can't contact them. So yeah, a quick. We just added 50 new wallpapers, update to get them. Sure, that's pretty good. But this one, the update, because we got new functionality and fixes and whatnot, this is even more important. Now we do need to give people the option to opt out, right? The question is where though? Well for that, we need a setting screen. I'm not sure what else we're going to add there, but most apps do need a setting screen. So this is my prompt based on the models suggestion. Yes, add a setting screen where I can turn off notifications. I also want to add a notification when a new version of the app is available. So the app is still not live because I don't have a Google Play account, but I would like everything to be ready when I do have an account. Okay, good stuff. That's the prompt. Now, will notifications are great, obviously, don't overdo it. So there's nothing that gets an app uninstalled faster than sending messages nonstop like every 2 hours. It feels desperate. One good notification a day is plenty, maybe even less. Quality over quantity always. And the real antidote to annoying is control. Just basically give the person a clear switch, an honest off switch. That's the way you keep your app off the uninstalled list. That's how you keep people happy. The thing is, even though you may add an off button, some people don't have the patience to look for it. For most people, it's just easier to simply uninstall the app, so be mindful about that. Now, this model, with this effort level is quite good at finding solutions. I had the exact same experience a few years ago when I talked to my coders. So I explained what I wanted in simple English, plain English. Then they thought about it. They had some objections, some follow up questions. And then after we got sorted, they implemented what I wanted, the better version, so to speak. Now, it feels like having a genie in your pocket, but the cost, I got to mention the cost. That's basically nothing, and I don't want to be arrogant and say that 100 bucks or 200 bucks per month is not a lot of money. I'm just saying that a similar skilled developer with this amount of skill, it would be at the bare minimum at least $4,000 per month, and that's on the low end. IOS developers could easily break seven to ten k per month, not a problem. And yes, ten K for one single developer that, of course, gets tired, gets sick, has good and bad days. So that's why I'm saying this is fantastic value. But back to it. Okay, let's have a look here. So the progress is quite good. We can see the tabs, though, ooh, only the first three of them are visible. Then we have the search icon and then the gear icon, which is the setting screen. Now, to be fair, this is not ideal. But we placed it there because there's not enough room. So yeah, we want basically people to see as many wallpapers as possible. Otherwise, we would probably create a different bar. Now, there are loads of layouts that we could use. You could even potentially show three wallpapers, right, instead of two. But of course, that would make them much smaller. Basically any feature that you think of has some downsides. And in this case, the stop area is a bit busy, is a bit crowded. But let's have a look at the setting screen. So up top, you can see the notifications are off, and that means everything underneath is graded out. This is smart and that's great UX. This is intuitive. It's easy to understand. Now, Claude is likely going to test everything on its own. So first, it has to allow notifications, but it's able to do that in this scenario. By the way, sometimes you will see it not want to do certain actions, except terms and conditions, solve a Capta whatever. But here, it's not a problem. And yeah, it's testing all the functionality bit by bit, which I love. So previous models would create these buttons, but sometimes the buttons wouldn't do anything. And that drove me crazy. It wouldn't make any sense for us to ask for buttons that should do certain stuff, but then the model would not plug them in. It would not wire them. It would not make the code actually work. So you would have a button that didn't do anything. It may even move. But again, it did not do anything. Yeah, that was the situation. In short, you would ask for buttons, and you would get buttons because here's the thing. You didn't ask for functionality. So that was a technicality that drove people crazy and forums and read it are filled with some of those things, but that was a few years ago. So that's why a lot of developers really hated AI with a passion at the beginning of AI models. But, yeah, we've progressed quite a lot in a very short amount of time. And yeah, that's a complete feature thought through, built, tested, explained all from one sentence, all from one prompt. This is good stuff. Now, it's your turn. Take it from the beginning and pause as often as you need to on the second viewing. Please don't continue because next we'll implement a different type of notification system, so it's essential that you stay with me step by step. A, and one thing, the model is telling us about certain issues that won't allow us to launch. For example, the package name, how the app is actually called. This is co dot example. These are things that are fairly easy to fix, so I'm not worried about it in the slightest, but I do appreciate the model is looking out for us. On your end, you will probably use something that's actually real, not example. But yeah, for now, let's continue. 35. Server-Side Push: Send Offers on Demand for Free: Welcome back. Previously, we implemented a free notification system. Now it's time for the second kind of notifications. The paid one send a message to everyone right now, push. Now, this needs a new session, so make sure you start one. Okay, you can think of it like some type of newsletter, okay? The first one was standard and not flexible. This one gives you a lot more freedom, but it's a bit more difficult to implement. To be clear, this is a tool where you sit at your desk and you type a message like 50% off for the VIP. Today only. So something that's for marketing. The free reminders only bring people back on a set schedule. This one brings them back on command whenever you got a reason. So this is much more powerful. Now, here's how I ask for that. So I want to enable a server side push notification so I can send different messages from time to time, like a special 50% off promotion for VIP. I propose fire base, but I'm open to other options that have a free tier. Now, three things in that prompt. So what I want, why I want it, the promotion, and that I'm open to alternatives as long as they're free. So I didn't say use FCM, file based cloud messaging. I didn't dictate the solution. I handed over the problem and the budget, so to speak, and let Claude do the job. And here's what Claude does. So I proposed Firebase, and instead of nodding along and, you know, just doing it reads the app first, and then it's going to tell me what it thinks, again, this is essential. Every session has to start with basically an overview of the app. And here it lays the options out on the table side by side. And here's the part that I personally I quite enjoy. It talks me out of spending. It tells me to skip a popular service called WinSignal, which is quite popular indeed. Because on Android, it's really just a middleman sitting on top of fire base anyway. This is incredible. Such character, such personality. This is good stuff. So this is an extra piece of software. One more thing between me and my user for no real gain. So it's really throwing shade at that specific company. Good stuff. I'm not sure they would be happy, but, yeah. And the decisive one is this part. The aggressive battery managers on real me and Xiaomi phones, exactly like mine, those choke the local scheduler. So a real push punches straight through, even while the phone is asleep, and sending those messages through Firebase is free, exactly what I wanted, exactly what my budget asks for. So I love that it says which version is actually recommended FCM, Firebase Cloud messaging. So it's nice and clear. And before it writes a single line, it stops me for one decision. So my app is still called on the inside com dot example dot Wall papers. So that's the factory placeholder, if you will. It's Jane Doe. It's the default name, untitled. And Google Play rejects that outright, and Firebase ties itself to that exact name. So if I set things up now and rename later, I will have to re register the app. I'm going to have to register it twice, basically. But it's a quick job. Nothing too complicated. Claude can do it fast. So for now, I'm going to keep it as is, but on your end, if you plan on launching this app, you should pick a good name from the start. If not, simply rename it right now. It's not difficult again, Claude can easily manage it. Now, the internal thought process is awesome to read. Claude suspects we are doing a Bait and switch where we promised minimal notifications, but now we're introducing a second layer. So again, Claude is quite skeptical, if you will. It says it will make the sheet honest now rather than silently upgrade anyone later, which is again, so it's basically pushing back. We said that we're not going to bother people that we're going to be friendly and whatnot. And now it's sensing that we're pushing too many notifications, that we're adding too many notifications in. This is, again, fantastic. It then continues to say it needs a wallpaper as a hook, so it will deep link the promo to the VIP category. So a deep link means the following. When the user taps the notification, he'll be brought to a specific place in the app. Think of it like the difference between sending people to cresbarn.com, and from there, they can go in any single place, they can browse around, they can do whatever, or better yet, you send them to a very specific course because that's what they're interested in. So a deep link simply means a specific place in the app, not just the homepage, if you will. Okay. Now, let's see what's up. Okay, and there's a bit of business sense in here, and this is something quite smart. So 50% off VIP deal should not go to people who are already VIPs that are already paying because that would be quite annoying. Again, great catch. Of course, it totally makes sense. It goes to the ones who aren't obviously subscribers yet to win them over, and that's 100% what I want. And when they tap it, they should land right on the subscription page, not in the gallery. And so there's no mistakes. Claude gives who counts as VIP, a single definition, the same one the billing uses. So the list of who gets the offer can never fall out of sync to, you know, whoever is actually paying. So, again, this is a safety feature in short, where Claude is making sure that we're going to send the right message to the right people. Love that. You know, in this setting, it is actually proactive. But just a few days ago, it actually emailed all of my users without me asking for it. This is still dangerous. It's still tricky. Okay, back to it. Only now after settling all of that, so now Claude actually writes the code. So let's see what's up. So it adds a separate channel just for offers, okay, registers the messaging service. It writes a small script to send them. Okay, wires a switch in the settings. By the way, yeah, of course, that's needed. One thing I do want you to catch. So the key it creates to send those messages, that key is a private key. So one that can push to every single user at once. It's the key to the vault, so to speak. It's your apartment key. And the very first thing Claude does with it is to add it to the list of files that should never leave your computer. So that security instinct without being dasked is exactly what you want, because in the past, we did have issues where basically, whatever, say you had a pin the pin of your credit card saved somewhere. Basically, the models, we just put it on Github and anyone could read it. And obviously, that was not a good idea. Okay, here's the result on the phone. Remember that these switches from before, daily wallpaper, new wallpaper app updates. Now we have another one offers. Now and then when there's a deal on VIP? Okay. I didn't ask for that, but okay, the promotions get their own switch, one that the person can obviously use without losing the other one, so they're independent. And up top, if notifications are off at the phone level, little bannel says, you know, turn on right here. So no switches that only pretend to work. Because, again, that would be super, super annoying. Okay, let's see. So here's that fix. And here it is live on the phone. So, okay, saying two buttons sounds good and not now. So the person knows exactly what's going on and what they're agreeing to, plus the fact that an occasional offer is included. So again, Claude is a real sticklet for this. It wants to keep you honest. Which is, again? Okay, quite good. So that's the difference between building fast and building right. Claude really wants you to stick to these details. It really wants us to be as honest as possible, upstanding citizens. Even though, again, the infractions are incredibly small, it's still looking out for us. So now the app is ready to basically receive a targeted offer for testing purposes. For the free, of course, using fat base, it's super, super good, super easy. Now, there's still one thing missing. There's no firebase project behind that to actually send something. So here's the twist. The setup doesn't happen in the code, actually. It's happening in the browser. So let's connect to Firebase. I'm going to let cloud step into Chrome. I always have it run in Chrome, and we're going to fire a real 50% off push. And let's see what's going to happen. Of course, save your progress. This is fantastic stuff. I'm quite happy with getting a lot of personality, and I hope you appreciate it. Okay, I'm going to see you in a second. 36. Server-Side Push: Connect Firebase and Send a Real Notification: Welcome back. Quick recap. So last time we got the app ready, so the app knows how to receive an offer. It asks for it, and it won't send an offer to people who are already paying. Okay? So all the code is done. Now comes the other half. The part begins Dread. And that's the Cloud, the Internet. So we need to set up a real fab based project, and at the end of it, a real push that actually leads to the phone, leaves towards that. So let's connect that. Now, notice Claude is asking us to do certain steps, but I'm going to tell it to do the first thing on its own, then send me to the exact location for point number two. This is much, much easier. And that's because I know it will refuse to generate the private key on its own. So I know it won't actually do that on its own, but I want my life to be as easy as possible. So yeah, just send me to that specific page. And it's happy to do the first part, and it goes to work. Now, the thing is, it doesn't have some specific tools installed, so we're going to have to use Chrome. The thing is it actually prefers Chrome above anything else regarding browsers. So no Firefox, no Safari, no brave, just Chrome. And of course, we do have a plugin installed, an extension that allows Claude to talk to Chrome. But yeah, here that's a problem. I actually forgot to open Chrome. So Claude is running on multiple computers of mine and it does see a chrome session opened, but it's on a different computer on a Mac computer, and that's not ideal. Now I'm going to quickly open Chrome here, and hopefully it will pick it up. I can continue. But no, it's not working. I'm waiting for it to pick up on this new chrome window here, but it's ignoring it. And that's the thing. It sometimes checks once, and then it's off to the races with some other option in some other place. So this is far from being ideal. I even opened the Firebase console to a quick Google Search. But no Claude here is spiraling. It's finding different accounts, other sessions. And yeah, this is not good. After letting it run for a while, I finally have to stop it. And I think this is the first time in this entire course. I have to stop it because it keeps going through my own private projects. It keeps checking other accounts, and then sure this is not good. So I'll tell it that I've opened the FAD based console here, and I'll even give it a link. But yeah, after a while, again, it's confused. It remembered the other accounts it found a few minutes ago before I stopped it. So, again, this is not ideal situation. This is a bad situation. Now, I'm not really sure why it's spiraling so bad, because after all, this was a small mistake. I simply forgot to open chrome on this specific computer. But it insists. It's not sure what to do. It's giving me a whole bunch of texts on why it's confused. Okay? So it's now listing a lot of my private accounts that have nothing to do with this project or session. And I try to keep everything organized, everything separated. So to avoid this issue in particular, to not have them mingle. So let me tell you once again, Chrome is opened on this computer on Windows, and you are logged in. And here's the reply. Okay, let me recheck. The browser list may have changed since I looked. Yeah, of course, yeah. But no, it's still not good to be transparent. I forgot on an essential point. Claude works very well with Chrome, like I previously said, but it does need an extension installed. It needs a plug in. I did it so many times on so many devices that here I simply forgot. I was certain it was installed, but no, it wasn't. And instead of Claude simply telling me, Hey, I'm not seeing the extension, it spiraled out of control. So the issue wasn't just the fact that Chrome was closed when Claude started working. No, I was also the fact that I forgot to install the Chrome extension on this device, which is, again, a temporary device. It's not my real device, okay? Am. This is incredibly frustrating. Such a small mistake and such a big deal, so many wasted minutes and resources. Now, let's head on over and look for the official Cloud extension. This is from the Chrome web store and make sure you download the official one from cloud.com, o. To be fair, the ratings are horrible, but it is what it is. And after you install the extension, you will have to verify it with your email. Nothing too complicated. It's the exact same credentials that you use to sign up for Claude. It's just one extra step. Okay. Now, I really wanted to include this part in the course because it's something you would not expect. Claude is sometimes so smart, so awesome. It has initiative. It's proactive. It fixes stuff before we even ask for it. It tests on virtual devices, on real devices, but it didn't tell us that the Chrome extension is missing. We had to go through all of this. Wow, this is weird. This is very off putting. But now everything should be good to go. And yeah, indeed, Claude is now finally happy. Here you go. The details of the fat based project are all correct, okay? This is good, great stuff. Now we can finally get back to work. By the way, Claude really likes to create groups in Chrome, and these have a title and they're colored. So Claude typically doesn't like to work in a tab that you've already opened. It likes to make new ones, and by the way, 99% of the time, it's just going to leave them open. So Microme sessions have 20, 40, 50 tabs because unless you clearly instructed, it's just going to leave them open. And yeah, here, it did what I asked it to. So it opened the exact window where the only thing left to do is to hit the Generate button at the bottom. This is exactly how I like to work because sometimes there are so many options, especially in Cloudflare, so many potential choices. So you would much rather say, Hey, point me to that specific page, and from there, you can use Control left to search for that specific button. So if it says generate, just look for Generate and Chrome is going to move you to that specific area. Okay, so this is going to download the JSON file, JSON dot Jon. That's a specific file type that's quite common in app design. Now Claude is waiting on me, okay? You can pause to read it thoughts if you're interested. In short, it wants me to enable notifications, even though it could easily do it on its own, and it wants the JSON file after I download it. Okay. Sure. I told that we're good to go. Now yet, it continues working. And after a while, it's restarting the app and preparing everything. Okay. So the goal here is to send a real promotional message. And yes, it seems like Firebase accepted it. But note the funny answer. Now, did it actually land? It's so human like. And after the few seconds, Claude will automatically check. By the way, in most situations, Claude is working on my device on its own. So when you see stuff happening on screen, it's Claude that's actually doing it, my hands are not touching it. Yeah, here's the promo message with a half moon, with a title and a subtitle. This is good stuff. This is a win. Now, it was a hard win, but a win nevertheless. It's not done testing, though. Remember I told you about the deep link. So Claude has to tap the message. And yeah, we are taken to the VIP section. And while the experience in the last few minutes with the Chrome extension was disappointing to say the least, now Claude seems to be flying, which is quite surprising given all the hiccups from before. See what it says, now the claim that actually matters. The whole reason for data only messages was a subscriber is never shown a discount on what they already paid for. I asserted it. Let me prove it. Okay. Okay. You debug build can fake VIP through a long press on the VIP chip. Okay, again, this is fascinating. I'm sorry if I'm over hyping it or if I'm re using certain words like it's awesome or fantastic or whatever. But at times, I'm really in all of it. I'm impressed beyond words, and I think it will happen to you as well, often in unexpected ways. But, yeah. And even though the valve problems here and there, Claude will very likely fix them automatically. So that's pretty good. At the end of it, look at what Claude does instead of just saying done. It sums up everything we've built, and it hands me checklist before I go public. So finish renaming the app because it's your identity on the store, put real prices on VIP, use real ad IDs with privacy policy and whatever, you have to fill in some forms. It even flags one design decision that's mine to make. So, yeah, that's the whole course in a single frame. The tool does the heavy lifting. It's going to test it, and then it's going to tell you what's up? What's the final situation, and then it's call. So that's the thing you still have to guide it. So we started from one sentence. I want to send an offer from time to time, and we ended up with a real campaign. It's targeted. It's still 100% free unless you really send a lot of messages. Everything is all laid out. The browsers set up, everything is done correctly. From the local reminders to this push notification where you can send basically promotional newsletters, you're good to go. Now, of course, you got to use it sparingly. But yeah, this can really help you a lot. It can really drive engagement and obviously subscribers. Save your progress, and let's continue in a minute. 37. Ask for Ratings the Smart Way: Welcome back. So last time around, we made the Firebase push notification thing to promote something like 50% off, right? And that landed on my phone. All good to go. Now, let's do something else, something that can cost you basically absolutely nothing, but it can give you quite a lot of new users, basically for free, and that's done through ratings and reviews. So it's one of those small things with a massive payoff, and most paginas really either forget about it entirely or they do it in a very sloppy way. So let's get to work and see what's what. So the prompt is this. Add the official Google InappRview prompt, trigger it at a happy moment right after someone successfully sets up a wallpaper. It applies a wallpaper and only after they've done it for at least three times, never on the first launch and never during onboarding. And before we send anyone to the app store, quietly ask inside the app if they're enjoying it. If they say yes, show the official review prompt. If they say no, open a private feedback form instead. Now, there isn't any technical instructions here, right? So no library, no file in particular, no specific button. I just described the moment and basically a feeling, and then let Claude decide what's what. Now, while it goes hunting through the app for places where, you know, the wallpaper is going to get applied and whatnot, let me tell you why we're bothering with all of this. So remember when we talked about ASO app store optimization and getting free traffic from the store, obviously, that's the ideal situation. You star rating is one of the biggest levers in that. So an app with a 4.7 rating and a few thousand reviews, that looks trustworthy, right? And people download it without even thinking twice. An app with a 3.1 review and whatever, 11 people reviewing it, not so much. So people skip you even when the app is actually quite interesting, and even if you've potentially made it better, you've improved that, right? It's like walking down the street and you're looking for someplace to eat. If a restaurant is packed and buzzing, you assume the food is going to be great. If it's totally empty, you're going to keep walking. So basically, reviews of your packed restaurant signal. So again, it's something where people really look for validation. And it isn't only humans that you're convincing. The store's own algorithm will favor apps with a higher rating because better ratings, higher rankings, more free downloads, more money. I all fits together. It all connects, and it comes from this little prom that's going to take what, ten, 20 minutes to build. That's the great thing about it. Watch what it's doing right here because this is exactly why I gave it a feeling instead of a direct instruction, a specific instruction. So I was reading how the app already works where the wallpaper set success happens, where we have the setting screen, how many times someone has to open the app. So the ask can land in the exact correct spot. If I would have said, put a pop up in this file, I would have got a pop up in that specific screen or whatever, you know. But because I told it at a happy moment, it tries to figure out where that happy moment would be, right? Now, one important thing about how we ask because there is a right way and a way that may get you into trouble so both Google and Apple give you a proper built in review prompt, okay? A little box that appears. The user taps the stars, and they never even leave your app. So that's the one we're going to use. What you must not do is build your own fake rating pop up, something that's totally different that ships off to people, and that pop up typically sends people off to the store page. The platforms don't like that anymore, and they can actually flag it, and that's going to be a bit of a problem. So in short, you got to use the official one. It's totally free. It's one single request, and it keeps everything safe. And again, your account in good standing. In the past, we would have designed something much more beautiful with stars and whatever. But, yeah, nowadays, that's no longer the case. Now, timing, this is where almost everybody gets it wrong. When you ask matters far more than the fact that you're asking itself. So think about it for a second, right? If you shove please rate us five stars immediately when they just opened the app, they didn't have time to use it, right? It may work for the short while. Some people have used this approach, but nowadays, again, the platforms are clamping down. But again, the user hasn't done anything, right? They will probably be annoyed and there is a good chance that you may get a one star review. So this isn't a long term strategy. That's basically self harm. Now, instead, what you want to do is you want to ask at a moment of success right after the user has done the thing in the app, and there's a good feeling about it. So in our case, he applied the wallpaper, so he's probably happy. Now, in our app, that moment, again, is quite obvious. They've said a wallpaper. It's under the home screen. It looks lovely. This is when Gentle enjoying the app, a quick rating would really help us. If that lands, this is good. Then the good mood flows straight into stars. So because they're happy, the father more likely to give you five stars, same for anything you build. If it's a workout app, ask after you finish a workout, not before. A meditation app. Again, ask after a session. Again, should ask you after you've beaten a level, not after you've lost one. Does that make sense? That both interruptions, once positive, once negative. So always ride the wave of a good feeling when it comes down to reviews. And here's the bonus move, the one that Pros use, and I love watching Claude put it together. So before anyone gets to send off the public review, we ask them privately inside the app, Are you enjoying it? Which is, again, something of a gray area, if I'm being honest. And he can say yes and no. If they say yes, brilliant, we can show the official pop up and they can give you a five star review. But if they say no, we don't send the review. We basically open up a small feedback form so they can tell you what's wrong in private where it's going to help you rather than hurting you. So that's a clever filter that basically says that, Okay, let me fix the app rather than getting punished for it. So it's pretty good. It is fair. You're helping happy people shed their joy and unhappy people, you're giving them a place to vent, and potentially that can help you. Again, I'm not sure if it's 100% ethical, but this is very, very popular. And while I'm not the type of guy to promote stuff that's in the gray area, I do have to address it because a lot of people are using this trick to actually get a lot more ratings. Now, the second thing, Claude is baking in right now. Don't ask too early and don't ask too often. Okay? So let people actually use the app first. That makes total sense. Someone who's opened it five times and set three wallpapers potentially likes it, and that's the ideal candidate. That's the whole reason I put at least three times in the prompt, but of course, you could potentially change that. And once they've answered, back off. That's it. So the platform limits how often that official pop up can appear anyways, which is genuinely a good thing. It stops you from being too aggressive to annoying. Even if you wanted to do that, you couldn't there it is on the phone, on the real phone. I've just set up a wallpaper. The app waits a beat, so it doesn't step on the moment on the aha moment on the satisfaction. And then the quiet question slides in two options, no pressure and the way out. So that's the tone that you want. No desperate, not begging. Just a polite tap on the shoulder at the right moment. Since again, this is a potential positive moment. Now, one honest quirk you need to know about because it will confuse you from time to time. So Google's official review pop up has a quota and it deliberately doesn't show every single time you trigger it, especially on a debug build on your own phone. So if you test it and nothing appears, that's not a problem. That's not a bug. Claude will usually warn you about this. Check that your side of the flow fires correctly and trust that on a real device, on a real user's device, it will behave properly. Unfortunately, that's what it is. And one last line to keep you out of trouble and never bribe people for stars. So you can't say ad us five stars to unlock this feature or something like that. That's against the rules on both stores, Apple and Google, and it's exactly the kind of thing that will get you suspended. So again, asking a good moment, asking the right moment, and good reviews will come if the app is good, of course. Set a few wallpapers, watch the ask appear, and then that's that. Okay, let's continue. 38. Subtle Live Effects: A Premium Feel with Minimal Battery Use: Come back. In this lesson, we're going to add a bit of magic. So we're going to do a type of effect, a live effect on our wallpapers. I'm thinking about some soft confetti drifting down thin lines, slowly floating across the screen. So it should be something fairly small, a classy touch that makes the wallpaper feel alive and premium, and it gives people a reason to pay to subscribe. The issue is there's a hidden trap inside this one that can really destroy your app. Here's the situation, and I want you to notice the repetition. So on the VIP category only, add a subtle confetti effect over the wallpaper. Keep it light around 15 to 20 small pieces drifting down slowly. It must be gentle, not distracting, very important. Optimize it for the battery. Pause the animation completely whenever the screen isn't visible or the app is in the background. I want a premium feel with almost no battery impact. Also add the switching settings to turn effects off. Okay. So I say subtle twice and battery twice and five lines of so this is not sloppy writing. This time around, I really spend time on it because this is steering because here's what's going to happen if you simply type in add confetti. Well, basically, you're going to get maybe hundreds of fast particles bouncing all over the screen, which may look nice, or it may look like a website from 2005. But that may eat something like 20% of the battery in an hour or so. And Claude will not do anything about it, you know, because the thing is, you asked for it and it built exactly what you asked for, right? So that's why I said subtle. So the word subtle is doing more work in the prompt than everything else inside it. Now, the rule I want you to tattoo on your brain is this. The battery is essential. So nothing. I mean, nothing gets an app uninstalled and maybe an even one star review. Faster than draining someone's battery. People notice when their phone gets hot or dies too early, and they will hunt down whatever app did it, and they will delete it with genuine anger in their heart. I've done this in the past, as well, because, again, something may look fantastic, but it will destroy battery life or RAM usage or CPU usage. Basically, your phone is going to be a hot potato. So again, a moving effect that looks fantastic but kills the battery is not something to be proud of. That's not a feature. It's a sitting time bomb that's going to destroy your reviews. So you got to be mindful of that. Just because Claude can build it doesn't mean that it's a good idea. Now, the lovely thing is that the safe choice here is also quite beautiful, quite nice. So subtle usually looks more expensive, more premium. A screen exploding with fireworks looks childish, looks maybe cheap. But a few gentle confetti pieces drifting down with thin lines that sway that looks more elegant. Looks premium. Again, the classic restaurants don't have flashy neon signs. Less is more. And in this case, less is also cheaper on the phone's battery life. They go hand in hand. Okay, now, this is the technical bit right here. So every time the screen has to redraw something that's moving it's going to cost a bit of power. 100 fast particles bouncing everywhere adds up quite fast. Now, 15 slow pieces gently falling. That's not a problem. The phone barely notices. And the biggest win of all is the one I ask for specifically. When you leave the screen or lock the phone, the animation should stop dead, and the cost will be basically zero. Now, most Bgines never think of that. I've actually gone through this several times. In 2016 2017, I've made a lot of live wallpapers. But in short, this is the difference between a premium touch and battery complaint. Okay? You would not think that animation would continue to play even if the phone screen is closed, but it will. So yeah, that's why I'm trying to help you out. So let me give you the guard rails I would use on any app, so then you can reuse them. So keep the number of moving elements quite low, a dozen or two, not hundreds, okay? Then the movement, slow and gentle, adrift, if you will, not a frantic dance. Only animate when the user is actually looking at it. And keep it to one special place. In all situations, that's the VIP category rather than putting it absolutely everywhere. So scarcity is a part of it, why it feels special. And again, it's one of the reasons why users should subscribe. Again, it's not incredible. I'll give you that, but this is the starting point, and it's up to you how much you want to ramp it up. But yeah, this is the kind of thing you're going to notice out of the corner of your eye and think, Okay, that's pretty nice. That's cool. That's a nice touch. And that's a great way to begin with. A couple of options worth considering for your own app because confetti is not the only answer. Confetti feels like a celebration, right? A good fit for the VIP lock moment, okay? Slowly moving lines or soft floating dots feel calm, minimal, great for the moody, elegant wallpaper. You could even do a very slow drift on the image itself. For a kids app, playful confetti, of course, for the meditation app, slow calm lines. So basically, you want to match the effect to your target audience or to the vibe of that specific photo and tell Claude which mood you're going for. It understands calm and minimal perfectly well. So even though Claude is quite dumb at times, in general, it will understand that prompt. Here's the switch I asked for. Some people love movement, while some people hate it. They find it distracting, and, yeah, we should have a switch for that. A toggle that says animated effects on or off makes everybody quite happy, and it protects you from angry reviewers for the price of one single line, it's definitely worth that. Notice without setting screen is quietly becoming. So the place where you basically hand back control to the user. So notifications offers and now effects, and this can grow quite a lot. Now, the testing, and please do it properly because it's one of the things that's quite risky. So leave the effect running for a good while and watch whether the phone gets warm or the battery drops faster than normal. Log the screen and confirm the effect truly stops rather than quietly carrying on in the background. And if anything feels heavy, go straight to Claude and say, make it lighter, few with pieces, slow with movement, and all sorts of things. It's always better to be a bit too subtle rather than being too obvious. But again, this is a direction where you have to decide which you want to do a live wallpaper can work even if the app is closed. So newer phones have an always on mode, and you could potentially make it so that, you know, there's some movement there. Now, how you do it is really up to you. Again, you got to be creative and you got to find good solutions. But yeah, this is where you can choose a path. So now we have something that's quite good. It's something you can show off, and we're ready to take it to the next step, and that's an onboarding screen because we got to make sure that new people actually see that this is a feature that's built inside it. Without showing it off, without clearly explaining at the beginning, people may uninstall the app without even discovering this feature. So let's get to it because that's quite important. But now, pause and do it on your own. 39. Onboarding: Sell the Benefits in Three Screens: Welcome back. We've built some nice effects into our wallpaper with now in the live wallpaper category, and now we've got some work to do. We got to build the onboarding. So these are the first few screens somebody sees when they open the app. And this bit of magic is going to be the thing that's going to actually sell the VIP inside the app. Now, onboarding is an art. It's something where a lot of people dedicate a whole bunch of time doing it. We'll talk more about that in a second. The prompt, add a three screen onboarding flow that shows only the first time the app opens. Screen one welcomes the user with a headline over the beautiful wallpaper and mentions that new wallpapers land every two weeks or so. Screen two shows one of our VIP wallpapers with its subtle animated effect actually running to show it off. And screen three presents the VIP subscription animated wallpapers, exclusive designs, no ads, with the price, a clear subscribe button, and a small skip option, save the fact that the user has seen onboarding, so it never shows it again. The screens in a deliberate order with a jab for each one. And notice that last sentence because it's one that most beginners often forget. You got to really focus on it. Now, look at the very first thing that Claude does. So before writing anything, it opens confetti dot KT, the effect from the last lesson. It isn't going to write that animation again. So it's reaching for the exact piece that we already made. That's what the code base actually is. It's all the stuff that you own that you've made. And that's why we build the magic before the sales pitch. If we would have done the onboarding first, it would have been a bit trickier, of course. Screen two would have nothing to show for. So this is why we did it in this order. Now, while Claude wires that up, let me tell you why onboarding matters so much. So you only get one first impression, right? Someone downloads the app, they're curious, but they're also extremely impatient. Okay? When they open it up and if they can't see something that's worth their time, they close it and they never come back. And the user who leaves in the first 10 seconds is obviously a user you paid for in one way or another. Now, why three screens? Because three seems to be the sweet spot. Enough to tell you a little story, but not so much that people start hammering the skip button because obviously they want to get to the actual app. Screen one is the welcome and the big promise, okay? Screen two is the WOW moment, the thing that makes us different, and you can actually see the effect in front of you. And screen three is where you make the move it's like meeting someone new. You don't propose marriage in the first 5 seconds. You have a nice conversation first, then you ask them for a date and so on. So it evolves. It's the same thing here. The third screen is the actual ask. And yeah, there it is on the real phone a dark wallpaper and one headline. Your next favorite wallpaper, pretty good, pretty good with one single button here. Then let's have a look screen two. This is the moment. The VIP ones shimmer. Okay. Even though again, potentially you could include multiple effects, and obviously you can show off multiple ones here. Though again, when you add multiple effects, the app is going to grow. This is pretty good, though. Okay? One thing, again, that's not a video. That's a live effect. So that's what we made before. You could potentially include a video here in case you want to fake it in a way, or you want to show off something in a particular way. But typically, most people don't use videos. They use something like this. And what you're trying to do is you're trying to get people excited. Trying to make their eyes wider a bit, you know? That's the type of feeling that you're trying to elicit. Now, obviously, this is quite subdued. It's nothing groundbreaking, but that's what you're chasing. Screen three just says start browsing. No prices, no subscribe button. So where is the offer? Now, here's the lovely part. Claude spots it before I do. The phone still has the debug VIP switch on from the last lesson. So funny enough, the app thinks that we're already subscribed and politely skips the pitch, which obviously is not good. Claude says so. It's going to turn the override off and it's going to run the flow yet again. Here's the real offer yearly at 24 99 with a save 30% badge. And then monthly at 299, a gold subscribe button, and one small line underneath it, maybe later. Okay. Now, that maybe later point is not a detail. It's something you got to include. So your onboarding needs a clear way out. If you trap people inside it, two bad things are going to happen. They're going to get frustrated and uninstalled. And of course, the scary one, Google and Apple can reject it, or they can suspend you for having a paywall that you can't skip. That's not good. So you always have to keep the door open in case people want to go through it. The people who skip will still see ads, and that's totally fine, too. So again, you have to make it clear that, you know, you can use it with ads, and that's not a problem. You don't have to make a purchase. Okay, now let's see what's up. So one thing I changed beyond the ask our screen three proudly says no ads. Okay, Claude checked, and it wasn't true. VIP members would still get the banner, the ads in the grid, the ad when the app opens. So instead of shipping a false promise, it checked everything. I verified that on the phone both ways, then told me about it, and offered me to revert. It treated our marketing copy as a promise the code has to keep and it didn't do it silently. I flagged it. Again, Claude is a stickler because again, you may change your mind or you may simply forget about stuff. The report also confirms the flow only ever shows once. So this is good. Skipping saves the flag. A fresh launch goes straight to the wallpapers, and backing out mid to where doesn't burn your chance. Okay, pretty good. So the flow works it sells, and it's consistent. It's honest, okay. But looking at the phone, there are two things I don't really love. So the great text is hard to read on those photos, and our star of the show the drift on screen two on the onboarding, it's a bit too subtle. You could completely miss it, especially if your brightness is quite low. We got to fix that. But first, of course, commit and push, and then we're going to continue. I'll see you in a second. 40. Onboarding: Polish the Flow and Ship It: Come back. The onboarding is live, but I told you that with two things I didn't like too much, and that was the great text and the invisible effect. Now, in this session, we're going to fix both, and along the way, you're going to see how Claude handles design decisions, how it proves animation is running when it can't see motion, and how carefully it treats our git history. This is not going to be all that sexy or interesting, but the app is starting to feel more and more professional. So let's do it, even though it's not incredibly exciting. So the prompt, the gray text in the onboarding screen is hard to read. Make it pure white. So that's the whole prompt, and Claude answers back. Straightforward. Those are all Alpha dimmed, let me lift them. So that means the opacity is reduced. It's not a gray color. The opacity is simply lowered. Okay, done. But read what it actually did because there are two lovely details. So the headings were already near white, and Claude made them pure white anyway, because if body text ends up brighter than the headings above it, obviously, the visual hierarchy flips upside down. So that's something where I actually teach this stuff in my design courses. That's a designer's instinct applied automatically by Claude. Good stuff. And notice the 1 gray line it did not touch. The small price under the yearly plan lives in a component that's shared with our paywall. And Claude says, and I love this phrase, rather than restyle the paywall behind you at back. I added an option, so only onboarding gets the white version. Okay. Whenever you ask for the quick visual change, the real question is, who else uses that specific component, that piece? Because most often than not, components are often reused in a bunch of places. The live effect on screen, too is hard to see. Ramp it up so it's more visible. Okay. Now, let's see what's up. So last lesson, the whole point was subtleness. You know, we got to take care of the battery. We got to have an elegant effect. We got to be restrained. But onboarding is a critical screen. The screen is there for, what, 3 seconds or something, precisely the amount of time where we need to elicit that oh, feeling that the user should have, so he's going to make the purchase. The effect has two different jobs in two different places, right? Unboarding, it has to immediately impress, whereas in the live version, it has to be chill, and that's exactly how Claude solves it. Look at the table. So the everyday version keeps its 18 gentle pieces. The onboarding version gets 34 nearly twice as bright and falling almost twice as fast. Same effect when you dial. Quiet for daily use, loud for the onboarding phase. And here's my favorite detail. So Claude can't see motion in a screenshot. So to prove that the drift is actually running, it takes two captures, 3 seconds apart, and checks that the pieces actually moved. Fantastic stuff. Then it resets the flow and leaves the phone sitting on screen too, so I can watch it live. So that's an assistant thinking about how to verify its own work. Because again, you may not know this, but yeah, Claude doesn't work in real time. It takes screenshots. So yeah, so that's a good workaround. One more thing it flags unprompted. Onboarding now promises a lively shimmer than the actual wallpaper delivers. Again, Claude is a stickler. Someone finishes the tour, opens their first VIP wallpaper, and wonders where the live effect went, you know? And Claude offers 21 line fixes, brighten the everyday version a little or use the loud one everywhere. This is my product, so it's my call. I'm going to say bump the preview to Alpha scale 1.3, then commit. Because again, these are design decisions where you have to say left or right. Okay, and look at the commit. So Claude didn't commit to Maine. It quietly made a branch called onboarding because as it puts it, committing straight to the default branch is something it wants to hold off on. Okay, so one commit, six files, about 770 new lines. Okay? And read the last line of the report. The phone is left with the tour completed and the debug switch back on. Same as I found it. So basically, it cleaned everything up. Okay, merge it into main. Okay, good stuff. Merged. Now push it and notice it hadn't pushed earlier because I didn't ask it. Okay? Now delete the onboarding branch. That's going to be deleted. 66 tokens for that. Three tiny commands in today's work is safe on Github. Now, before we move on, let's do the stranger test. So delete the app, reinstall it, and then watch the flow with fresh eyes. Does screen one feel welcoming? Does screen two make you go, Oh, this is nice. Then ask yourself, can you get out of it easily? And if you have any doubts, fix whatever it feels. But yeah, now we have an app that welcomes people, shows off a bit of magic, and then asks for a subscription in a polite way. What we can't see yet is what happens afterwards. Who subscribes where people drop off and what crashes we might have. So we got to give ourselves some eyes. So let's have a look how we can do that. Be back in a second. 41. Analytics: See Crashes and the Numbers That Matter: Welcome back. Up until now, we've been building something fairly blind. And this lesson, we're going to fix that. We're going to give ourselves eyes, so to speak, because here's a hard truth. If you can't measure what's happening inside the app, you're just guessing. And guessing with your time and money is a terrible strategy. And even if you have one single phone, there are countless Android devices out there. So this is what we're going to do. The prompt is add fire based analytics and crash lytics to the app. We already have a Firebase project from the push notifications, so reuse it. Set up crash lytics so I can see crashes with the phone model and the screen they happened on and track the events that actually matter to me. App open, wallpaper set, VIP screened opened, subscription started, ad shown. Okay. Notice the middle sentence because it saves us a lot of pain. So we already did the hard part of Firebase two lessons ago, the project, the config file, the whole browser dance. Telling Claude to reuse it means we get to skip all of that. Now, analytics is just a fancy word for numbers about your app, how many people use it, what they do, where it breaks, how much money it makes, and so on. And once you see those numbers, everything changes. You stop guessing and you start making decisions based on reality. Now, Firebase is what most of us reach for. It's from Google. It's totally free, and this is, again, used by mostly all people that use Android. Now, let's start with crashes because that one is urgent. Crash Lix quietly tracks everything. So when your app crashes on some stranger's phone on the other side of the world, Crash Lux records it, and then it shows it in your dashboard. And think about what happens without it. Your app crashes for the chunk of your users. They obviously get frustrated. They uninstall. They leave a one star review, and that says it keeps crashing, and you have no idea about what's actually happening. You're bleeding users, and you're basically blind to it. This is why analytics is so important. Now, with this in, you open the dashboard and you can see it in plain language. So this crash happened 40 times on these phone models on this screen, okay? And now here's the workflow I want you to remember because it's lovely. So you copy that crash information and you paste it straight into Claude and you say, Hey, users are hitting this error on the wallpaper screen. Here's the error, please fix it. And that's that, you know, Claude will handle everything. So Firebase tells you exactly what's broken, and Claude fixes it. That loop is the difference between an app that slowly rots and one that's getting better every single month. Now, you would assume that Claude always writes perfect code, but again, that's not the case. It needs to get actual feedback from users, and then you can actually improve. Now, let's talk about the usage numbers. The ones that you're going to check out every morning with your coffee because honestly, it is addictive. So let me walk you through the ones that actually matter. So first, let's talk about the money. You'd ad mob revenue, how much ads made you basically the day before, because it's all the day before. And then you have subscriptions, how many people are paying, how many signed up, how many canceled. And those two together become your income, and you're going to watch that every single day. Then the number of people, this is the key here, DAU daily active users, how many unique people opened your app today? MAU, monthly active users is how many opened it over the last month. Now, why do both matter? Because together, they tell you about your app's stickiness. So if your daily active users is 100 and your monthly active users is 3,000, most people use the app once and they forget it. That's a leaky bucket. But if your daily active users is 1,000 and your monthly active users is 3,000, that means that a big chunk of your users come back almost every day. So that's a sticky, healthy app. That ratio is one of the most important signals of whether people actually love what you've built. So make sure that you check that often. And look at the events it's wiring up because these are the ones I named in the prompt and they're not actually random. So wallpaper set. So that tells me people are getting real value. VIP screen opened versus subscription started. Tells me how many people looked at the offer and how many actually bought. So that's your conversion rate, and it's something that you should constantly try to improve. And basically, you have to do a lot of experiments. Now, pick events that answer a question you actually have. Don't track absolutely everything because you're going to drown in data, and that's not good. But again, if 100 people saw the offer and only three people bought it, something is okay, then you're going to try to get four people, five people out of 100 views. That's the type of thing that you're trying to do. Now a few more things that are worth watching. So retention of the number of people who installed the app this week, how many are still there are still using the app after another seven days? So this is brutal, but it is important. Most apps lose the majority of the users in the first few days, like first day, second day, third day, and watching retention tells you whether you're onboarding and you have notifications of doing their job. Then new installs versus uninstalled. Are you overall growing or shrinking? Because again, losing people is natural, but getting more people, that's what you want a net positive overall, 100 users, and you've lost 20. So that's a net plus 80. And then session length. How long people actually stay every time they open the app? Obviously, longer would be better. And here's the real payoff, real events from my real phone landing in the dashboard. Now, of course, you got to take your time to learn this part. I'm not going to go too much in depth, but one thing to set your expectations, though, Firebase can take a while to show actual data, sometimes hours, sometimes actual days. So don't panic if the graphs are empty 5 minutes in. So that's normal. There's a debug view for checking things immediately, and Claude will usually point you straight at it. Plus, you can always ask Claude, Hey, why am I not seeing data? And please don't let this overwhelm you. When you're just starting out, you only need to glance at a handful of these every morning. So again, your ad revenue, your subscriptions, your daily active users, whether there's a new nasty crash that appeared overnight. So that's basically your daily dashboard. 5 minutes with a cup of coffee, nothing too dramatic. Now, everything else, you look at maybe once a week or when you're trying to dig into a specific problem. But, yeah. Now, one warning to close this off from someone who has really done this for years on years. Don't fall into the trap of staring at these numbers all day refreshing every 10 minutes. It's not healthy, especially when you first start out and they're super tiny again, $0.05 or whatever to users. It's not healthy to stare at it every single day. I've been there and it will drive you crazy. So check them out once in the morning, note the trend, and then focus on actually improving the app. The numbers are there to guide your decisions not to become your hobby. So confirm that the data is flowing in and save your progress, and let's continue. 42. A Remote Control for Your App: Make Changes Without an Update: Welcome back. Let's focus on something that's going to be super interesting. So let's change some things in the app without shipping a new version, so people don't actually have to go and download a new version. This is called Remote Config, and Firebase gives it to you for absolutely nothing. It's free. And once you use it, you'll never want to go back because like I said, in the past, people simply would not update. For months and years on end, you would launch 20 different new versions, much improved, people would not simply update. Now, this doesn't fix absolutely everything, but it will help you quite a lot. So the prompt, add Firebase Remote Config using the same Firebase project. Move the subscription price and how often the VIP pop up appears out of the code and into the mode config, so I can change them from the dashboard without releasing a new version. Give them sensible default values baked into the app in case it can't reach the server. That's the message. That last sentence is the one I want you to steal. So always have a default baked in. So if the user has no Internet, your app still knows what price to show. Without it, somebody opens your app, and, you know, there's nothing there. It may be a blank paywall or some value that you're not happy with. Now let me explain the problem this solves because you'll really get it. So right now, imagine that you want to change of subscription price 299-399, right, or show the VIP pop up maybe a lot less because you feel that it's maybe too pushy or maybe reword the button. Okay? Normally, you would have to edit the app, maybe cloud or whatever, then build a new version, version 1.1 versus 1.0, then upload it to the Play Store, then wait sometimes even days for Google to review it, and then finally, it will be released. Hopefully users would actually update because, again, a lot of them don't actually update. Now, Remote Config flips it around. Certain settings live on the server instead of being baked into the app. So you log into the dashboard, then Google Chrome, whatever. You change the price 299-399. You hit Publish, and just like that, every single user picks up the new value. No new version, no Google review, no waiting, it's immediate. Think of it like a thermostat in your house. Without one changing the temperature would be very, very tricky. But with one, you just simply turn a dial and that's that. Remote Config is that dial for our apps. And watch what's happening right here because this is the actual technical work of the lesson. That price used to be coded into it, so it would be frozen, so to speak. Now it becomes a question. The app asks the server every time it starts. So basically the app sends a pink, it sends a message. Hey, what's the price today? And in case there is no answer, there's a fallback. There's a default value. Same for how often the pop up shows. To values that used to be set in stone are now live, are now in your browser. Now, here's where it gets genuinely powerful, and this is the part that pros obsess over AB testing. It's a way of answering questions with actual data instead of just opinions. So you're not sure. Should it be 99 or 399? What makes more money? Instead of guessing, you show half your users one price and do half do price at the same time automatically. Then you wait and you look at the numbers. Maybe 399 makes fewer sales, but more total money. Maybe it kills your app completely, right? Maybe it kills sales. Now, you know for a fact, it's not just a hunch. It's not about being greedy or trying to set lower prices or whatever. Just look at the data and see what people prefer. So that's the AB test. Group A sees one thing, group B sees another, and the numbers are going to tell you what's what. And you can test almost anything. Two different onboarding pitches, two button colors, the paywall on the onboarding screen versus screen three or whatever, a weekly price against a monthly price. Each little test is modest on its own. But stacked over the months, they turn the app into something that's super well optimized to keep more people engaged. And that's your plan. That's your goal, that's your job. This is the tricky part because you do have to have patience and you do have to have a vision. And here's the dashboard side of it. So these are two values sitting on the server in Chrome, with me being able to change them or publish a new version just like that. Notice this is just a web page. It's not that friendly, but there's no code, nothing to build, no waiting. So this feels very much like a superpower the first time you do but let me be straight with you about one thing because I don't want to waste your time. So AB testing only gives you useful answers when you have enough users. If you've got 12 users, splitting them in six and six and comparing two prices is not going to tell you nothing. Six people is basically noise. It's random luck. What you need is a decent flow of traffic before results actually mean something. So please don't rush into heavy experimenting on day one. Get the app out, get people coming in from those notifications and good ratings and start running experiments once there's real traffic to actually send them through the AB test. Or, of course, paid traffic if you really want to start early. Now, here's the proof live. I change the value in the console in Chrome, I publish it, and then I can restart the app on my phone, and there it is. So the new value is there. There's no update, there's no store, no waiting, nothing. And one more thing with knowing. Apps don't fetch new values every single second. No, this is a small delay by design, so you're not hammering the server. Now, Claude will normally set a sensible interval, and it can shorten it for testing purposes. But in real life, you should expect a cool down. Now, when you're ready to run an actual experiment, start simple. Take one single thing, say the price and the price alone. Test exactly two options, not three, not four, not five. Let it run long enough to gather real numbers. Then look at the total revenue, not just the number of sales because obviously a higher price with fewer buyers can still potentially win. Then lock in the winner and pick your next experiment. The mindset shift is the real prize. You stop being someone who argues about what might work, opinions, and you become someone who actually tests and knows. Because if you ask your friends of the people in your life, again, they're going to have a totally different experience. But it's someone from the other side of the world with a totally different phone and circumstances and money in their pocket and so on. Okay, now it's up to you, do the same thing, confirm that you can change your value in Chrome and that you can actually see it inside your app. Then 43. Speak Their Language: Unlock New Markets: Welcome back. In this lesson, we're going to potentially multiply our audience by teaching the app to speak different languages. And this is one of the highest value things you can do once your app is solid, and most solo developers never bother to do it, which is exactly why it's an excellent opportunity. So let's get to it. Here's the prompt. Prepare the app for translation, move all the visible text out of the code and into a proper translation setup. Then let's add Spanish and Portuguese or French or German, whatever. The app should automatically show the right language based on the user's phone settings and fall back to English if that language isn't available if their language is not present. Afterwards, check the screens in both new languages and fix anything where the text is longer, is too long and it breaks the current layout. Okay, so that part alone, the last sentence where some text is absolutely huge, especially in German. That's going to save you hours and hours of misery. You'll see why that's the case a bit later on. So first, the big picture. Right now, your app is probably in English. English is huge, no doubt about it. But most of the planet still doesn't speak it, at least not as a first language. There are lots and lots of people in Latin America and Indonesia, India, across the Middle East, certain parts of Europe, where people would love your app, but they might scroll past it because it's not in their language. And that's the thing we're living in a bubble, you know, with iPhones and having access to all sorts of apps and having discretionary money to spend. The entire world isn't like that. So we got to get out of our bubble. You and me, we might speak decent English, but again, some parts of the world don't the moment when you add stuff like Spanish, Portuguese, Hindi, Arabic, whatever, German, French, you're going to unlock entire new countries that were previously invisible. And here's a beautiful piece of business map that ties back to something we discussed before. Remember when I talked about how advertising in the US, UK, and Australia is brutally expensive because everyone is competing for those premium English speaking users. Well, on the flip side is that getting users in other countries can be dramatically cheaper. An install that costs, say, two bucks in the United States might be a few cents in Brazil or Indonesia. Now, users in those countries typically spend less per person. That's the trade off, and it's real. But when installs are cheap and your app feels native to them, the math can still work out. And especially if you're using ads, that may still be a fantastic business model. This is the technical key right here on screen. So instead of words being scattered all over and being hard coded, frozen inside the app, Claude is gathering them into organized language files. And once that's done, adding a new language is just adding one more file. It's very much standard. It's a very well known path, and Claude knows it. Now, it's exactly this type of tedious mechanical work that used to cost a developer maybe a full day, and you're watching it happen in just a matter of minutes. Now again, depending on what model you use effort level, but it's still minutes. It's not 8 hours, you know? Now, there are two things you can translate, and it's important to understand both because most people only ever focus on the first one. So the first one is the app itself, the buttons, the menus, the onboarding text, the subscription screen, all the words inside, okay? So when a user in Mexico opens your app and everything is in Fluent Spanish, it feels like it was made just for them. You know? That builds trust, and trust typically converts to downloads and sales. Now, the second thing, and honestly, this one might matter even more is the store listing. And that's the title, the description, the screenshots, everything inside the app store. Now, remember, ASO Appstd optimization, getting free traffic from people from the store, people in Brazil searching Portuguese. If your title and description are only in English, you might be invisible to them in their search. Now, translate your listing, and suddenly you show up with millions of people searching their own words. So that's free traffic from a whole new country, and it's quite a shame to leave that on the table, you know? It's money and users that you are leaving on the table. And that doesn't make any sense. Now, AI has made all of this basically like magic, you know, compared to the old days. I used to hire translators for every language. We used to do Google Translate, but it was clunky. That entire process basically was slow and expensive. But Claude Claude does it in seconds. But let me give you a few words of caution though, because that's still important. AI translation is good, but it's not perfect, especially for a sales pitch or clever wording. So you can't really translate, just do it from Nike into, I don't know, 50 languages and expected to have the same zinc. Now, if a particular market becomes important to you and you start making real money in that region, it's really worth having a human actually check out your text and see what's what. Now, again, fivea.com, freelancer Upwork, it won't be that expensive. It's actually more time consuming to post to the actual project and talk to that person. It's a bit of back and forth, and you got to do it for multiple countries. So, yeah, it is a bit of a hassle, but it's quite important because a slightly awkward translation on a simple button may be fine, but an embarrassing miscalculation on your subscription screen could cost you your sale, or the words make you look unprofessional. Because if something doesn't make any sense in the payment screen, again, the user loses all trust. So machine translate, okay, just to get you started fast and cheap. And then, if needed, please polish certain markets where you seem to be getting some traction because it's not going to be all that expensive. Typically pay with time more than money. The second thing, don't translate into 20 languages at once in a panic. Ideally, start with a few, for example, again, Spanish and whatever, German or a French or whatever floats your boat, wherever you think that you may find users. These are the great choice because they cover a lot of people. Add them in, watch your analytics and see if there's an uplift. See if this actually makes a difference, see if those countries show up in your analytics because that would be the ideal situation. Basically, let the data lead you. Okay, now, here's the situation. This is the first one. So the phone's language has been changed and the app is following along. Now, look carefully at the buttons. This is my third warning and it's the one that bites everyone. So text typically gets longer when you translate it. A short English word can become a very long one in Spanish, for example, and a much longer one in German. And that will happily break a layout that you were previously proud so this is why you put in that last line in the prompt. So you force Claude to actually take a look and see what's up. And Claude has a lot of stuff that it has to handle. It's getting them and it's fixing them. This is the type of thing that if you would have shipped it this way, I mean, again, you would lose a lot of trust, and it would not be an ideal situation. Now, this one feature can genuinely change the trajectory of an app. I've seen apps that were flat in English, and suddenly they had a huge uplift in Latin America or Southeast Asia. Now, test it by switching your phones language and walking through the whole app and then do your stove listing when you get a chance. Please have a look and see what you can improve because again, Claude does pick up on most problems, but you should have a look, as well. Okay, save your progress, and then let's continue. I 44. Take It to the Next Level - Conclusion: Welcome back and congratulations on finishing this chapter. Look at how far along the app has come. It's not just a thing that shows wallpapers anymore. It welcomes people with a prop with onboarding. It invites them back with notifications. It's asking for ratings at the perfect moment. It has that premium touch, those little subtle effects. It tells you exactly what's happening through analytics, and it speaks more than one language. So this is a real grown up app now. This is the type of thing that can actually grow into something successful. Let me leave you with a few thoughts to carry forward because this chapter is really about mindset more than any single feature. The first thing is the following. The app, as you can see, it's never done, right? Superficially, it was working a while ago, okay? So the initial feature, the initial functionality, it was done initially in the course in the first few lectures. Now, the thing is you're constantly evolving, you're adding stuff, you're testing stuff. Now, every one of these features is a dial and you can keep tuning it. Better onboarding converts more people. Smart of notifications, bring back more of them. AB test squeezes out more revenue. There's always next small improvement, and small improvements stack up. They stack up over weeks and months and they turn into something big. The people winning at this aren't geniuses who had one perfect idea. There are people who kept nudging their app forward week after week long after everyone else got bored, and they quit. The second thing, you got to do it in order, and you got to do it calmly, okay? So please don't take this chapter as to do list that you got to smash through in one day. Add one feature, test it, make sure it didn't break anything, save it onto GitHub, and move on to the next. So the idea is to take it step by step. Obviously, you may be excited. You may be a bit overwhelmed at times. But overall, you got to remember that this is a marathon. Slow and steady wins this game every single time. The third thing, let your numbers decide what's next. Now that you have some analytics, you're not flying blind anymore, right? So if your notifications are not bringing people back, you got to work on that. If people install and vanish the next day, you're onboarding or your first experience need some attention, some love. If a certain country is showing up in your stats, translate properly. Let reality guide you, not your gut, not your friends. Your users through the numbers will tell you exactly what the problem is if you're just willing to listen. And the last thing, the big one, remember why we're doing all of this. It's not really about confetti effects or star ratings. It's about the feeling that we talked about right at the start of the course, that MRR taking up, that monthly recurring revenue, making your first $0.10, then your first dollar per day, then ten per day. Everything in this chapter is a buildup so you can have that satisfaction to deliver value to your users, to keep users happy, and to keep giving them something that they would gladly pay for. So value in and value out. So here's what I want you to do. Go back to this chapter and pick one feature, whichever excites you the most and try to take it further. See what extra step you can do, what you can build on top of that. And I'm going to see you in the next chapter. We still have quite a long way to go because we still have to launch it. We still have to take care of Google Play and a lot of other features that we got to talk about. So take a quick break and I'll see you soon. 45. Google Play: What You're Actually Signing Up For: Welcome back. In this chapter, your app stops being a thing on your computer locally, and it becomes a thing strangers can download. This is the Google Play Console, where you register as a developer, you upload your app, you fill in a pile of forms, and eventually you get to press the Publish button. Now, before we go in, one thing about how this chapter works, I'm going to walk you through the Console screen, Google Play Console bit by bit. And then I'm going to show you exactly what you need to fill in, what and where. Now, what I'm not going to do is I'm not going to publish the wallpaper app, and I want to be clear about that. So the app that we've built is a teaching one. It's a teaching built it still has the factory package name, com dot example whatever. Google is going to reject that. And of course, the content, it's just from Osplash. So putting a demo app on the store is not a great thing. It may hurt my existing apps as well. So overall, there's nothing to gain, but you will get the full tour, but I won't hit the actual publish button, which doesn't change absolutely anything, just to be a friend. Now, here's the thing, Let's set the expectations. So publishing is not actually one single button. It's actually a process with paperwork, identity checks, and enforced waiting. And the first time, it actually takes a few weeks. It's not an afternoon and it's not something related to Claude or your own setup. Google Play has clamped down quite a lot. Now, the thing is, none of it is actually super hard. There's just a lot of it, and most of it is out of your hands. You just got to wait. First of all, the money because that's the good news. A Google Play account costs only 25 bucks once, and that's it. So one single payment, and that's it. It's not per year, it's not per app. So you pay once and you can publish as many apps as you would like for the rest of your life if you still have your account. Compared to Apple, that's $99 every single year, whether you ship an app or not. Now, for someone starting out with no income, that difference is one of the strongest reasons to begin on Android, and it's part of why this whole course focused around Android apps. Second, the account type and choose carefully because it shapes everything after. There's a personal account and the business account, organization. So organization basically means registering as a real company, and Google will ask for documentation to prove. Now, personal is you as a human being, and that's what almost everyone watching should probably choose. You can absolutely make money on a personal account, and you can move that to a company account later if this turns into a real business. But I'm not a lawyer. I'm not an accountant, so you do what's best for you for your situation with your local laws. The third thing, identity check. Google will ask you to provide who you are, a government ID, your address, maybe some bills to prove your address. Now, this is going to take a while. It can take days, even a couple of weeks, especially if you send the wrong thing. Start with it early as early as possible. Don't wait until you actually have the app ready to be launched. Now, start as early as you can. And now the one thing that blind sides people, so please listen up. If you created a personal developer account after November 13, 2023, a long time ago, Google will not let you publish your first step to production until you run a closed test with at least 12 testers opted in continuously for 14 days, accounts older than that specific date, and organization accounts, business accounts are exempt. Now, let me be precise about my words because every one of them may cost you a few weeks. So 12 is the absolute minimum. They must be opted in, which means they accepted the invitation and actually installed the app on a matching Google account invited but never installed does not count, and the 14 days must be unbroken. Now, Google states plainly that testers who opt in test for less than 14 days and then opt out are not counted, not counted. And here's the part that most people miss entirely. When those 14 days are up, you don't just get promoted. You have to apply for production access through a form that asks you about the app, how you tested it and why you think it's ready. B complicated. Google says that reviews usually take about seven days or so, though it can take longer. So after the fortnight, 14 days, budget another week before your app can go for normal review. Now, it's up to you what route you want to go through because again, it is your decision, and based on that, you will have to go through this process or not. Now, account sign up and ID checks several days. 12 festivals for 14 days. Okay, a production access application up to a week, then the app review itself, a couple of days. So from the day you decide to publish to the day an actual stranger can install it live on Google Play, the first time, four to six weeks, that's realistic. Now, that's not a warning. It's a planning fact. And the fix is quite simple. Open the account today, get verified today. So the clock is already running while you do everything else in this entire course. Now, one last thing and it's the reason I want you to be skeptical of every tutorial, including this one this rule used to be 20 testers. Google reduced it to 12 at the end of 2024. It could change again next year. So take these numbers with a grain of salt because things may change. The best way to go about it, check for yourself. Go into Google Play Console and see what's up. But yeah, with that being said, let's continue. 46. Creating Your App in Google Play Console: Welcome back. Let's create the app entry. The record inside Google Play that everything else hangs off. It's a short form, but one of these answers can never be undone. So let's slow down when we get there. So let's have a look how we actually register an app on the Google Play Console, which is this URL right here. Okay. Now, here's the entire form, and it's shorter than you would might expect. So the app name, which is what people see on the store and which gives you 30 characters, you default language, then two choices, whether this is an app or a game and whether it's free or it's paid. Now, stop on that last one because it's permanent. So if you register your app as free, you can never turn it into a paid app. Not later, not ever. You would have to publish a completely new app and abandon everything attached to this one. Going the other way, paid to free, that's allowed, but not back again. So unless you have a very specific reason to charge upfront, of course, choose free. That's why 100% recommend. Free is the best choice. Now, our money is going to come from ads and the VIP subscription, and free is what gets you the downloads in the first place. So again, paid does not work for this model for this entire course. Now, the app or game choice matters less, but it decides which category list you can pick from and which charts you can appear in. So ours is an app, of course. If you build something playful, be honest about it because putting it in the wrong category, it's not exactly a good idea. Some people do that just so it can go up the charts a bit easier, but that dishonesty is going to catch up, and Google will eventually, they might give you a warning. They might suspend you. You never know. Now, something you might expect to see on this form is the package name. Now, that's the application ID. The thing that looked like com do example dot wall papers when Claude first generated our project. Google takes it from the very first build that you upload. From that moment on, it's locked to this app permanently. You can never change it and you can never reuse it, and it has to be unique across the entire Play store, not just your account. Think of it like a website. There's only one risbarn.com that cannot be multiple crisbarns.com. Sure, you can have crisbarn.net, okay? But that's something different. Now, Claude did say that this is a blocker. We can't launch it unless we fix it. So that's a good thing. But yeah, as it stands, we have C dot example. So if anything is rejected outright, it's because it's a placeholder that every tutorial basically starts out with. For us, that's fine with not actually publishing right here, but for you, it's important. So go and rename yours properly before you build a single release file. The convention is your domain backwards, then your app. So come name dot wall papers, for example. You don't need to own the domain, but pick something that makes sense for you when you're going to have whatever ten apps so something like Chris Barin or whatever, you know, Christian Barn, something like that, something fairly unique, okay? And once the app exists, Google hands you this, which I really like. This is a check. It turns a vague, intimidating process into a very much to do list. So set up your store listing, complete the content questionnaires, upload the build, choose the countries, and so on. So it tells you exactly what's missing and it won't let you publish until the list is done. So go through it one by one and don't panic on the length. Most of these items take up a few minutes, and that's that. Now, one habit to form right now. Everything you type into this console is either public facing, for your users or legally binding. So the name, the descriptions, the declaration about what data is collected, it's not a scratch pad, so slow down, read what you're agreeing to. Now, the next two screens are the screens where it's quite important that we slow down. Let's take a quick break and then we'll continue. 47. The Store Listing: Your Shop Window: Come back. Now let's have a look at the store listing. This is your shop's window, so to speak. So people land on it for about 5 seconds, and they make a yes or no decision. So every piece of it is doing an incredibly important job. So let's have a look. Now, three text fields with hard limits, the app name 30 characters, the short description 80, the full description, 4,000. So that's quite a lot. Now, the first two matter most because they're what actually most people read. The short description sits right underneath your title and is often the only sentence anyone sees. And this is where ASO lives app store optimization, the free traffic idea from earlier in the course. So people search the store in plain words, wallpapers, HD wallpapers, live wallpapers, four K backgrounds, and so on, and Google reads your title and descriptions to decide whether you match. So your title should never be just a clever brand name. It should never be res Barron or This looks great.net or whatever. It should be your brand plus the actual app content, so it can't be Lumina. It can be Lumina HD wallpapers, okay, where lumina is a brand of something, something witty, something clever, something interesting, okay? So you can put something specific, but then you have to put something for Google for app store optimization. And it's the same logic in the short description, 80 characters to say what it is and why it's good in normal human language. And in the full description, right for the person first. So with an actual user in mind, not for the algorithm. The algorithm is in second place. I tell you that because a lot of people spam a bunch of words there thinking they can trick the algorithm into showing them higher. Now, mention your main words naturally, okay, wallpapers, backgrounds, whatever, in real sentences. What you must not do is stuff it cram full of those keywords. So a wall of comma separated keywords reads as spam to a human, and obviously Google will punish it. Back in the day, it was more permissive. Nowadays no. So write like you're describing the app to a friend who asked you what you've been building. So plain simple language. Now, the pictures and these do the actual selling, not the words. Few people actually read descriptions, but they all look at screenshots. So the app icon, 512 by 512, then a feature graphic, the wide banner at the top of your page at 10:24 by 500 and phone screenshots, at least two up to eight, always go for eight, by the way. These are in portrait mode. So now, this is the most under viewed thing on the entire store. Most beginners upload two raw screenshots straight off their phones, and then they wonder why they're not getting organic traffic. So treat them instead as a pitch deck, as a sales deck. So put a short caption across the top of each one. Thousands of HD wallpapers, new designs every week, animated VIP wallpapers. So somebody scrolling, learns everything about your app without reading a single word in the description. So that's the goal th those eight screenshots, you tell the entire story and put your strongest image first because that's the one that shows in the search results besides your icon and the icon. That deserves real attention, as well. It's super tiny. It sits next to competitors, and it has to be readable at the size of a fingernail. So it has to be a simple shape, strong contrast, no small text, no super tiny, subtle embellishments, details, design related stuff. So if you have to squint at it on your own phone, redo it. Now, Claude can generate a decent one to Claude design, which is a different part of Claude. But this is a place where a little money will pay you back ten times over. Use a designer, come to my discode server. Or of course, you can use HAGPT because the image generation model number two right now, it has a code name. I'm going to put it on the screen. This one is quite good. It can do something fantastic. But first of all, you do have to pick some examples and show it. Hey, these four, I love them, make me something in this style. Okay, then the housekeeping, obviously, you got to choose your category. Ours would be personalization. That's tricky to say, personalization. Hopefully you can understand. Add the tags that Google offers because these help you get discovered and fill in the contact details carefully because your support email is displayed publicly on your store's page. Use an address you're happy for strangers to see and one that you should actually read because that's where your users are going to write you when something breaks and stuff will break. One last thought. Your listing is not a right wins document. It's one of the easiest things to improve later on. You can change the screenshots. You can rewrite the short description. You can try a different first image and watch whether the install rate moves positive or negative. It costs you basically nothing, and unlike your app, it needs no new build and no new serious review. Usually this goes quite smoothly. Now, give something good up and then plan to make it sharper. You already should have some different ideas about which want to change, which one to experiment with. And with that, let's continue. 48. App Content: The Forms Nobody Warns You About: Welcome back. Let's do the paperwork. So this is the app content section. It's a series of questionnaires, and it's where most first time launches stall more than anything else. Now, none of it is actually difficult. There's just a lot of it, and one rule runs through all of it. And that's one thing in particular that you got to remember. If you're not sure, just ask Claude. That's the easiest thing that you can do. Some parts are not clear, so simply ask Claude. Hey, how does this apply to my app? So here's the list. We have privacy policy. We have ads, app access, content rating, target audience, data safety, plus a few declarations about specific categories like finance or health that mostly won't apply to us. Thank God. So every one of these has to be green before you can publish. Again, a bit tedious but very much doable. Now the privacy policy first, and we already did that part. Remember the consent and privacy lesson where Claude actually drafted a policy from what the app actually does in terms of ads, analytics, crash reporting, subscriptions? Well, you simply host that file somewhere on the web and you paste the link here. Now, it has to be a real, publicly reachable URL, so a real website, and its contents have to match what the app actually does. A generic policy copied off of some other app, it's not good. That's worse than being useless, actually, because now your declaration and your policy may contradict each other. And yeah, Google is not going to be all that happy about it. So please be careful. Have Claude do the entire thing. Then you declare that your app contains ads, which obviously ours does. You can say yes, and that's because it has to put a label contains ads that has to appear on the store page, which is very much normal. Nobody minds. Lying would be a very big red flag, so that's not good. The content rating is a questionnaire from an outside body, and it asks you about violence, language, sexual content, gambling, that sort of thing. For the wallpaper app, it's mostly a long row of noes. Now, answer honestly, anyway. And the rating it produces decides which age group can see your app and in which countries, and the wrong rating is a policy violation rather than a small mistake. And when things specific to wallpapers, if any of your images are even slightly suggestive in a sexual sense, that changes your answer. So be honest about your content. And again, Google is incredibly sensitive so I know that this may be a matter of opinion, but you got to tread very, very carefully because you may look at an image and you may think it's fine. But if it's 5% doubt, 1% doubt, that maybe maybe there's too much skin or whatever else. If there's any doubt in your mind, just cut it. Now, target audience and heals a trap worth knowing about. So Google asks which age groups your app is aimed at. If you include children, an entire extra rule book lands on you. The families policy, restrictions on which ads you're allowed to show, extra design requirements, and a much, much harsher review. So unless you are deliberately building a kids app, which I don't recommend, and you're ready to go through all of that. Yeah, again, be careful. My advice is you exclude children, okay? But here, to be precise, this isn't actually about excluding anyone. It's about not signing up for a compliance regime that you didn't plan for. So obviously, you may want some kids to use your wallpaper app, but this is more about specific things that are made only for kids. And next on the list, this is the big one data safety. So Google makes you declare exactly what data your app collects, what it shares, and what you do with it. For our app, that's the analytics that we added, the crash reporting, and whether the ad networks actually do some stuff. And whatever data the ad networks actually gather. If you're using AdMob, this is very, very easy. So you go through it category by category, and you try your best to answer accurately. When in doubt, again, ask Claude, but you should ask Claude based on the actual app. So if you do a separate conversation that's not related to the actual repo to the actual project, obviously, Claude won't know all the details. So you have to have a conversation that's able to actually read the app and see the details of the code. Here's why this one deserves our full attention. So Google cross checks what you declare against what your app actually does. They can see which libraries you've shipped. So if you check, we don't collect anything while AdMob and Firebase are sitting inside your app quietly collecting things. That mismatch is a policy violation, and it can get you suspended. There's no way to fool Google. That's the thing. So this is the exact thread that runs into the bandliss lesson. Almost nobody gets removed for being evil because most people that get suspended, most, I say, they didn't do anything evil or malicious or something bad on purpose. They simply were careless on a form. They ticked the wrong box. That's how it happens. So most people, this is how they get suspended. They check the wrong box. So please take your time. And if you're not sure what a library collects, again, go ask Claude, What data does the ADM BSDK collect? And how should I answer Google's data safety form for it? Okay, and that's that. It knows exactly what's in the project, and it's going to walk you through all the categories. And that's a far better use of it than guessing and hoping, okay? So get all of these green lights, and half of it is basically done. Let's continue. 49. Signing and the AAB: The File You Hand to Google: Welcome back. Let's focus on the upload file itself and the key. The key thing is, if you lose the key, your app basically ends permanently. Now, that's not me being dramatic, and I'm going to show you why in a second. First, what you upload. So for years and years, everybody uploaded an APK file, and you'll still find that word absolutely everywhere in terms of Android development, APK. But for new apps, Google now requires an AAB file, an Android app bundle. Practical difference doesn't really matter to you because again, it's a technicality. But an AAB is a package Google uses to build a smaller tailored download for every user's specific phone. So that means smaller download, better install rate. So it's something that Google does to our benefit. You still use an APK file to test on your own device. But the thing you're going to upload on Google Play is an AAB, an app bundle. So let's have a look and see what's up. So let's tell Claude build me a signed release AAB for Google Play and walk me through creating the upload key. And Claude knows the commands, and it knows what Google Play expects. If it doesn't, it can simply check. Yeah, this works perfectly fine, even though the app is still a comm dot example. So that package name only becomes a problem at the moment when you upload it to Google Play, which is why we can build the file and you can't send ours anywhere. Yours must be renamed before you get to this point. This is important. So please rename it to whatever you want something unique. But the mechanics that you're watching are going to be exactly the same. So you're going to go through the same steps. And again, Claude is going to be super happy to help you. And there's the key. So let me explain signing in a simple way. So every Android app has to be cryptographically signed, which is just a way of proving that an update genuinely came from the original author. Okay? So when you try to upload, you got to say, Yeah, I'm the official author. I'm the owner of it, and here's my key. Through this key, I can prove that this is me. I'm the actual author. Now, the signature comes from the key file, the key store file, and once you generate that, you have to keep it for the rest of your life because through that key, you're able to do updates. Now, these days, Google offers something called Play app signing and you should use it. So Google holds the real app signing key in their vault, which is quite good. You keep a separate upload key which you use to sign whatever you send them. So if you ever lose you upload key, Google can reset it because they hold the important one. So this is a new feature and it's quite good. So that safety net didn't exist in the old days a few years ago. And this new feature saved a lot of lives because sometimes you just, you know, your SSD braces or whatever else, and, yeah, you don't want to lose your stuff. I personally use drawbox and everything is safe on the cloud. But don't relax too much because you upload key still matters. And if you opt out of play app signing, then you are on your own, and, yeah, there's no way back. So here's the rule, and it's the same one from the ban list lesson repeat it here because this is the lesson where the file actually comes into existence. So backup you'd keystore multiple places. Cloud storage, your password manager, an external drive. You can email it to yourself and so on, on Gmail or Yahoo or whatever, and then backup the password with it because a keystore you can't unlock is exactly as useless as a key store you lost. So you do need the password. Again, treat it like the deed to up house or whatever else, something super, super important. Without that, you can't verify ownership. Now, two small things that will confuse you the first time you ship update. So every build carries a Version code and a Version name. The Version name is the friendly one that uses C, 1.0, 1.1, 2.0, whatever you like. The Version code is a plain whole number that Google uses to tell builds apart, and it must increase every time you upload the new. So one, two, three, and so on. So try to upload the build whose virgin code you've already used, and Google Play is going to refuse it. It's not going to work. And this is going to happen nonstop. Even with Claude, it's going to forget the number. It's going to forget the name. It happens. But you can copy paste the error, and that's fine. But, yeah, that's the whole job on your side. So you need an AAB signed with a key that you've backed up in multiple places, carrying a virgin code that you remembered to increment to add plus one. Okay. Now what happens next is a dragon drop into the Console, into Google Play Console, and that's where tracks come in. And let's talk about that in the next lesson. Pause for now. 50. Testing Tracks and the Twelve-Testers Problem: Welcome back. We've got to build. Now we hit the requirement I warned you about in the first lesson, the testing period. So let me show you the tracks. Then deal with the genuinely hard part, which isn't technical at all. Though, again, you can skip a good part of this difficult part by signing up as a developer that's a business. Google gives you a ladder. So internal testing is the top run for convenience, up to 100 testers, and then the build goes out in minutes, and there's essentially no review. That's your own device and maybe a friend, and it's the first part until you find some bugs and you fix them. Now, below it, closed testing, a specific list of people you invite, and this one does get reviewed. Then we have open testing where anyone with the link can join and your app appears publicly with an early access label. And finally, production. This is what you want. This is the real store. Now, closed testing is the one that matters for the requirement. So 12 testers minimum, opted in continuously for 14 days before you can even apply for production access for the Live Google Play Store. And I want to be precise because this can cost you quite a lot of time. So again, just to be clear, 12 is the minimum. This is not a target. My advice aimed for 15, 20 people because people obviously drop out, and one drop out can cost you the run if you stick just to 12 people. They must be 12 distinct Google accounts. So not 12 devices, that would have been easy. Opt it in means they clicked your link, and they actually installed the app under their Google account. So someone sitting on your email list who never installed it is not a tester as far as Google is concerned. They got to go through the whole thing. And the 14 day thing, it has to be 14 days unbroken. Google says outright that it won't count anyone who opts in tests for less than 14 days, then opts out. So again, Google is really strict. Let's put it like that. Now, mechanically, it's quite simple. You create a list of email addresses, the Google accounts of your testers, and Google Play gives you an opt in link. And each person opens that link on the phone, they accept and then they can install the app from the Play Store as normal. So that's their entire job. And here's the actual problem that nobody prepares you for. Finding 12 real humans who will do that and stay opted in for two weeks that's harder than actually writing the app than actually building it. So let me give you some honest options because this is super, super tricky. Of course, you can start out with people who owe you a favor, friends, family, colleagues, and be specific with them because can you test my app usually doesn't work. So send them the link, tell them it takes them 2 minutes, tell them to install it, and simply leave it installed and tell them explicitly, don't remove it for at least two weeks. Most people fail at that last part simply because you didn't tell them clearly. Don't uninstall it, okay? Then the communities of developers in exactly your position, read it on Discord, I have a discourse server on various forums. So people who test each other's apps to this requirement, okay? You test theirs, they test yours. This is a completely legitimate route. It's totally fine. It's white hat. There's no problem. And that's how a lot of solo developers get through this requirement. And again, it's quite difficult. Now, what I would avoid is anyone selling you 12 testers for the fee for the price. This is not a good idea. Google can decide that those accounts are fake, and then you're going to have a problem. Not that person, you're going to have a problem. So, yeah, you shouldn't waste two weeks and then find out, Hey, actually, these were bots, and it's a nog. Now, one more piece of advice, use these 14 days to their maximum. Don't just wait. So it's free feedback from real people on real phones that you never had in your hand or connected to Claude. So ask them what confused them, whether anything crashed, whether the design is good, something like that. Obviously, you're going to watch Crash lytics, which is why we set it up in the analytics lesson, and you are going to see some data. But plenty of developers come out of that 14 days with a much better app because, again, stuff happens and you get to fix it before going live. So don't think of it as something bad. Think of it like an opportunity to make the app better. Okay, let's continue. 51. Going Live: Production Access, Review, and Rejections: Welcome back. Testing is behind you. The forms are now all green, the build is uploaded. Now let's go for production, and then we deal with the part you don't control, which is somebody that Google looking at your app and deciding if it's good or not, and you get the green light to go live. If you're on one of those newer personal accounts, there's a step before the release itself. The production access application. It's a form asking you about the app, about how you tested it and why you think it's ready. Now answer it properly. A couple of real paragraphs about what you've built and what your testers found, not too three words. Google says that the review process usually takes seven days or less, though it could be longer. Once you through it only then you can create a production release, only then you can actually go live to the general public. And this is the release screen itself. So you pick your build, you choose your countries, all of them, of course, and you write release notes. What's new text users are going to see. Now, for a first launch, obviously, keep it simple. First release thousands of HD wallpapers updated weekly, something like that. Nobody wants to change log on day one because it's a brand new app. Now, regarding the countries, go worldwide unless you have a very, very specific reason not to. I don't think that's the case. Now, this ties straight back to the translation lesson. You have Spanish and Portuguese or French or whatever. So obviously, you got to make sure that you're going to reach those countries. Restricting to one single country doesn't make a whole lot of sense, but I have seen people do it if they want to test the market. My advice never do that. And here's the setting I want you to actually use. That's a staged rollout. So instead of going to 100% of your users all at once, you release it to a small part, say, 20%. So if something goes badly wrong, it's only going to reach one fifth of your users, and obviously you can halt it. So this is a tool that you should use when you update it. Now, on the first launch with no users, of course, that's pointless. So yeah, but just so you know for the future, build a habit anyways because it will help. And then basically, you're going to submit and you're going to wait now, expectations. Review can take anywhere from a few hours to multiple days. I've seen even a week, and your first submission on a new account is almost always the slowest because they're reviewing you as much as the app. So this does take some time. But again, it's only on the initial launch with a brand new account. Later updates usually go through much, much faster, but don't panic on day two and don't submit again because duplicate submissions just push you back down the queue. There's nothing really that you can do. Even if you email them and they respond, there's nothing they can do. Now, let's talk about rejection because there's a decent chance it happens once in a while, and you should be ready rather than being shocked. Being rejected is not a problem and it's not a disaster. It's not a bad thing, okay? It's normal. It happens even to experienced developers. What you got to do is, you got to fix it and you got to resubmit. Here are the ones that actually catch people. So your privacy policy link is dead, or it describes a different app, or maybe your data safety declaration doesn't match what your app actually collects. This usually happens when you constantly update the app. You add new features, but you forget about updating that form. That mismatch is something we discussed a few lessons ago, and it happens, it's an honest mistake. But again, Google doesn't really care about your intentions, you? If you broke the terms of service, you broke the rule. That's it. Something crashes, that's another reason for rejection or the button, that doesn't go anywhere because, you know, the reviewer tries to tap it and he's basically blocked. Another reason the screenshots show something that the app actually doesn't do, so too many design related things that you add in, but those things don't actually show up inside. Or for the wallpaper apps specifically, you've included an image you don't have the rights to and obviously that becomes a much bigger problem. Now, when a rejection arrives, read it quite a lot. Now, the email usually specifies what policy you've broken and usually tells you where. So resist the urge to rewrite half of your app in panic. You got to fix precisely that specific thing. Again, a rejection is totally fine. What you don't want to do is you pass the review and then Google takes you down. That's the dangerous part. That's the violation, okay? Now back to it, if the wording is tricky, and a lot of times Google Play just says stuff that doesn't make any sense, paste the whole message into Claude and ask it what it means and what we have to fix. Then Claude is going to probably fix it, very high chance that it will fix it. Then you resubmit with a short polite note saying what you've changed. And if you believe that they're wrong, which happens because everything is automated, there's no actual person behind these reviews, there is an appeal process, and it's something that from time to time may work, an appeal from time to time may actually convince them. But yeah, nobody on the other end is out to get you. That's the thing. It's a mix of automation, and maybe maybe a person that looks at your app really quickly, and again, they have these internal tools. But yeah, in short, it's not malice. It's mostly 99% boss that reject you. So with that being said, let's continue. 52. After Launch: Vitals, Reviews, and Your First Update: Welcome back. Let's say it's true. The app is finally live. The Google Play Console now changes character. It stops being a form you fill in, and it becomes an instrument panel that you read. And there's a lot of valuable information that you're going to see here, which is going to be fantastic. Now, you're going to see quite a lot of info after probably maybe five or seven days after you get about, let's say, 50 people that are actually using the app. Otherwise, the dashboard is obviously going to be empty. But yeah, the main dashboard is going to give you installs, uninstalls your rating. So those are the first habits that you got to implement. You got to have a look at them. First, always read uninstalled next to installs rather than on their own. Be 100 installs and 90 uninstalled is a very different day from 105. You got to compare installs and uninstalls to see how many people you are actually losing. And if overall net, are you growing or are you shrinking? Because again, you're getting 100 users and you're losing 80 Okay, you still kept 20. That's still something. So this is the important part. Now, the numbers on your initial release, they're going to be tiny and jumpy. So you're going to see 100% improvement on something. That doesn't mean a whole lot. Don't redesign the app because you saw one particular metric. And notice that this is going to overlap with file based analytics that we set up earlier, which is totally fine. So Google Play is going to tell you a lot about the store. It's going to tell you about your ratings, your revenue. You're going to see a whole bunch of information here. And obviously, you can customize your initial screen so you can see more of what you're interested in. Now, Firebase is going to tell you a lot about the behavior inside the app, so what people are doing inside the app, which screens they visit, whether they set a wallpaper, whether they reach the paywall. Now, you want both. You want both sides of the story, and they answer different questions. Now, the section that most beginners nev open, and it's one of the most important ones, it's this one Android Vitals. So this is Google measuring your apps, technical on real devices, and two numbers matter. You crash rate and your ANR rate. ANR stands for the application not responding, which is basically the app freezing. So it freezes rather than closing, which is no good at all, no wo. Now, here's why it deserves your attention. Google sets thresholds for what counts as bad behavior. And if you cross that line, um, that can tank you organic traffic. Basically, Google Play can quietly reduce how visible your app is in the Google Play Store. So a stability problem doesn't only annoy the users who hit it. No, it actually turns off your free traffic, and this is the loop that we've built. So Crash Lytic gives you the details. You paste the error to Claude. Claude fixes it, and you ship an update, and then the vitals confirm if the fix is actually indeed fixed. So that's how it goes. It's an ongoing thing. The reviews. And I want you to do something that a lot of people simply don't do, and that's reply to them. Respond. Your replies are public. Someone leaves two stars saying that the app crashed on their phone. You reply politely that it's fixed in the latest version, and now every visitor sees a developer who's actually engaged. People frequently go back and raise their rating after the good reply, and it only takes you a few minutes a week, and it does move the rating. It does move it up, which is quite important for your organic traffic. And remember the ratings feature we built into the app, the one that asks at a happy moment and quietly steals unhappy users towards private feedback instead of a public one. Now, this page is where you find out whether it worked. If the timing is right, it fills up with fours and fives, which is exactly what you want. Then your first update, and it's the same path as before with two rules. So again, increase the version code because Google Play refuses a number it has already seen, and Claude will mix this up quite often, especially if you have multiple apps and roll it out in stages. This is a good idea. 20%, watch the vitals for the few days, then expand. Do keep in mind, there is a slight delay. So everything that you see in your console is with a delay, usually 24 hours, if not more. Now, after the 20% rollout, if crashes spike, obviously, you halt the rollout, and those other 80% won't see the problem. They won't have crashes. So that single habit is the difference between a bad build versus a very bad experience in terms of thanking the views, a one star avalanche. And, yeah, that's basically it. There's obviously a lot more here. You can do quite a lot in the dashboard. But for now, these are the most important things. What I really want from you is to have patience patience and perseverance. If you have those, if you stick with it, you're going to slowly improve. Initially, it's like pushing a train. You're barely going to move it an inch. But week by week, month after month, you'll slowly build up speed. And don't think of it like man, I spent three months and I'm only at $0.10. So after 12 months, I'm going to be at whatever, $0.40. That's not how it works. So it will grow substantially, but you got to put in the work. You got to do it day by day, week by week, month by month. So that's the most important part. Don't give up, keep going at it, and you're going to be just good. Now, the day the app finally goes live, it's going to feel incredible, and you should congratulate yourself. But remember, that's not the finishing line. It's the day you finally start getting real information, real installs, real reviews, real crashes on phones that you've never actually held in your hand. So use that as fuel and remember, if you think of it as a marathon, you're going to be fantastic. If you think of it as a sprint, I don't think you're going to last very long. I really believe in you, so go for it. Okay, let's continue. 53. Optimize and Scale - Introduction: Welcome back to a new chapter. If you've been following along, you've built quite a lot. You've built an app. You saw how to monetize it, how to keep users coming back, how to check on analytics, how to translate it. So this is incredible progress up until this point. Now, this chapter is about taking all of that, taking that machine, and doing two things to it. So making it earned more from every single user and protecting it so it doesn't get destroyed by one careless mistake because that's how you lose your account and your apps. I'm going to be honest, some of this stuff in this chapter is going to be quite boring. It's going to be the professional stuff. It's going to be consent forms, policy compliance, backing things up. It's not as fun as building a cool feature, you know? But this is exactly the stuff that separates a hobby that collapses just like that from a business that lasts. Now, the developers who make real money aren't just good at the exciting bits, you know. They're the ones who don't get their account banned, who back up their keys, who tuned the paywall from 2% to 4% and doubled their revenue without a single new user, that's the type of thing that you should do as well. So let me put a number on that because it's the whole point of this chapter. So imagine two developers with the exact same app and the exact same amount of users, 1,000 users, okay? The first one leaves everything at default, the standard. The second one tightens the paywall, turns on ad mediation. So every ad earns a bit more and trims the churn just a bit. Same app, same traffic, but the second developer might be earning two or three times as much. No new features, no new users, no new features, just optimization, just fine tuning. So that gap is what this chapter hopefully will teach you. And on the flip side, the first developer might lose the whole thing, the whole account. He might get banned. Well, you know, the other guy is going to be flying. He's going to be whistling to the bank, and that's the protection half. So here's the plan. The first half is about the money. So we'll rebuild the paywall properly and talk pricing psychology because small changes there can really create big swings in revenue good or bad. We'll look at every ad type. We're going to look at something called mediation, and I'm going to be honest about what awaits you, because it's not going to be easy. And I'm going to try to answer one of the most important equations in this entire business. I'm going to talk about lifetime customer value versus acquisition cost, which is the number that tells you that you can scale safe. And profitably, of course. The second half is about protection and scale. We'll talk about ad consent and privacy pieces that law actually requires them. We'll go deep on staying off the ban list so that you will never lose your app the way I lost mine, even though it may be different circumstances. And hopefully by the end of this, you're going to start building a portfolio of apps. Same rules, just one app after another. So let's get to it. 54. Paywall Design and Pricing Psychology: Welcome back. Welcome to the money screen. The paywall is the most important place in terms of revenue where you make it or you lose it. In terms of subscriptions, this is your bread and butter. So the same app, same user, same traffic, with a better paywall, you can genuinely double what you earn. That's why the pros obsess over this tiny screen, this tiny part of the app and why you should build one that's fantastic. Now, this is just going to be an overview. You got so many examples out there. I'm going to show a few of them on screen. But yeah, let's take it step by step. First, the prompt, redesign the VIP paywall, offer two plans, weekly and annual and show the annual one as the hero with a best value badge, and the price broken down per week. So the saving is obvious. Add a three day free trial on the annual plan with a gentle reminder before it ends, add a small maybe later, so people can always opt out and show the paywall at a high point right after someone sets a wallpaper, not the second they open the app. Okay, so four ideas in one single prompt, and every single piece of it is a piece of psychology, pricing psychology. So let's take it one at a time. So the free trial, one of the most powerful tools you have. So instead of asking a stranger to pay upfront for something they've not experienced, you let them have a taste. Try VIP for free for three days. They get the animated wallpapers, the exclusive collection, no ads. They feel how nice your app is, and then the subscription begins. People are far more likely to pay for something they've already enjoyed and would miss than a promise on screen. And notice I asked for the gentle reminder before it ends. That one detail is the difference between a trial that feels fair and the trial that feels like a trap, and traps produce refunds, cancellations and one star reviews. Second thing, anchoring. When you show your prices, put the annual plan right next to the weekly one and make the saving obvious. Just $0.80 a week billed annually against 299 per week. The weekly price makes the annual look like a steel. Of course, you take that one. So that contrast is called anchoring. The first number your brain sees, sets the frame for everything after that. Show the annual as the hero, highlight it, slap a best value badge on it, and a lot of people will take. Which is great for you because annual subscribers stick around and churn for less. And that's the anchor doing its work. Look at how differently those two numbers feel sitting one next to each other compared to either one standing alone. Nothing has changed about the value of the product, only the framing around it. So this is smart stuff. Again, a lot of huge companies spend tremendous amounts of money on studying these things. The third thing, introduction offers and win Back offers. An intro offer is a discount on the first period, 50% off your first month to lower the barrier of that first yes. A Win Back offer is the one we mentioned when we talked about churn. When someone goes to cancel, you cash them at the door and you say, Hey, wait, here's 50% off to stay. Both recover money you would otherwise leave on the table, and both of things you can add later once the basics are solid. And fourth, maybe the biggest lever of all, and it isn't a design. It's when you show it. So a paywall shoved in someone's face the second they open the app before they felt an ounce of value gets dismissed on reflex. A paywall shown right after the aha moment right after they've seen a gorgeous wallpaper and they're feeling good, that converts far better. Notice, that's the exact same principle as the ratings lesson. So same moment, different ask, timing, beats design. And here's the result. So two plans, the annual one, obviously, the ido, the trial, front and center, and down at the bottom, the way out, which brings me to the rule I keep saying, Always leave maybe later, not just because trapping people gets you uninstalled and maybe rejection by Google or Apple. No, but most paywalls do have to have that. You know, that small gray text is doing legal work as well as design work. And here's the great part. You don't have to guess at any of this. Remember, we did remote config, and we talked about AB testing. That's exactly what they're for. So test a three day trial against a seven day trial. Test 299 against 399. Test showing the paywall may be on the onboarding screen, step three, after the first wallpaper is applied. So let real user behavior pick the winner, then keep it and move on to the next question. Bit by bit, you tune this screen into a money machine. So this is what you got to do. And this is where the two lessons come together. The prices and the trial length aren't frozen in the code. They're in remote config, which means you can easily experiment to get the HT's contempt. Everything is in your dashboard. This does not require a new release. That's the compounding advantage of building things in the right order. So now you can do it again and again and again and again and you don't have to wait for the review or anything else. One last word and it's the warning I gave you with NK BHD panels, you know, Hi app. Don't get greedy. Squeezing too hard, pricing too high, ramming the paywall in people's faces every 5 seconds. That typically backfires. It gives you angry reviews and mass cancellations. The best paywalls feel fair. You're offering great value at a reasonable price at the right moment. Test your way to that balance, and then you're going to be golden. Okay, let's continue. 55. Ad Mediation: Earn More from the Same Users: Welcome back. This one is an overview rather than a build, and I want to tell you why that's the case because there's a reason it's more useful than actually building it. So ad mediation is a real lever, and you should know it exists. But it only starts paying once you have serious traffic, and setting it up is genuinely one of the most frustrating jobs in this business. I have a story about that in a minute. So in this lesson, I'm going to explain what it is and why it's worth it. And when you come back to it, you're going to decide if you want to do it or not if you plan on actually implementing it into your app. So let's start with the number that makes everything that puts everything into context. And that's E CPM. In plain English, E CPM is how much money you earn per thousand ad views. So if E CPM is five bucks, then every 1,000 times an ad shows in your app, you're going to make five bucks. Easy enough, right? So 1,000 ad impressions five bucks to keep it super simple. That number, along with how many ads you show, decide your ad income. Now, here's the idea behind mediation, and it's impressive. It's fantastic. So right now, if you only use AdMob on its own, then every single time an ad slot opens up, you want to show an ad. Only AdMob fills that slot, okay? At whatever price, AdMob feels like paying, right? So that's a single buyer, no competition. Imagine instead that every time a slot opens up, you have five or ten different ad networks that bid against each other for it, for that slot inside your app. And all that happens in a fraction of a second, and the highest bidder wins. So that competition drives the price up. That's mediation. So every ad view becomes a mini auction, right? So, think of it like selling anything at all. If only one person is interested, you take whatever they offer. If ten people are in a bidding war, of course, the price is going to climb and you are going to win. So it's the same ad, the same user, but you get more money, just because you invited more buyers into the room. And the numbers people quote are actually real, going from a single network to a proper mediation tax or multiple companies that bid can lift ad revenue 20, 30, even 50% on the exact same traffic. So why on earth are we not doing it? Now, two reasons and the second one is personal. The first one is traffic. So mediation is an auction and an auction needs bidders who actually want your inventory, so they have to be interested in your app. Now, the network needs volume before they're going to compete for it, right? With a handful of users a day, there's nothing meaningful to auction. So if you don't have users, you're not getting enough volume, you're not interesting. So those extra networks won't bother bidding and you'll spend a week of your life wiring up something and your income is basically the same. Maybe it changes, it goes up by a few pennies. So that's premature optimization. You're working for nothing. The second reason is that the setup is genuinely painful, and I'd rather be straight with you rather than tell you a fantasy. So let me tell you exactly what happened to me. I tried this very recently. I tried to add Metas Network, Facebook ads. So that's called Audience Network. It's the same thing as AdMob, but from Facebook rather than Google, okay? So I tried doing that to a few of my apps. So I tried four or five different times, and every time something did not line up, something was not right. The account, the placement, the verification, the way it hooks into AdMob, it never started working. It did not deliver a single ad. So I did the sensible thing. I opened a support ticket with Meta. Then I got on the live chat. I talked to a real person. And here's the part that surprised me. Nobody could help. So metas support is built around advertisers. So people buying ads on Facebook and Instagram, okay? The app monetization side, publishers like us, putting their network inside an app. That's a completely different world, okay? And the people on the other end of the chat, the guys at Facebook ad Mita, they had no idea. What? AdMob, mediation, showing ads? You want to run ads? No, I'm trying to show ads inside of my app. So you're not trying to advertise you're trying to promote your app. You're trying to get installs on your app. No, I'm a publisher. I want your ads inside my app. I'm trying to make money. No, no, we don't do that here. Send you a ticket to someplace else. Crazy stuff. So I'm telling you this for two reasons. One, so you don't sit there for hours on end thinking that, Okay, this is the last time, now it's gonna work. The thing is, you may think it's your fault, but you're not at fault. This part of the industry is so badly documented and the support is paper thin. Even Claude says that. And the second thing, so you understand the name of the game. So this isn't a feature that you add just like that, like with everything else, like with Firebase or whatever. It's an integration project with accounts, approvals, and dashboards on both sides. You got to set up a company, you got to get reviewed. There's a lot that's going on. So it's not plug and play like with Firebase or whatever else, crash lytics or whatever else. Cloudflare. So here's what I actually recommend. You stay with AdMob. It works. It's reliable. It pays. And yeah, even though it doesn't pay incredibly well, you're not going to get banned. It's pretty much decent. It's not great. It's decent. So then put your energy into other things that genuinely actually make your ad revenue go up. Focus on making the ad better, focus on where you place your ads, how many times people come back and see them because a user who returns five times is worth much more than this auction system. And of course, if possible, lean on rewarded ads. So those are the ones where the user chooses to watch an ad to unlock something exactly what we built into the VIP Unlock. They earn the most of any format, and users don't actually resent them because they opted in and they got something for it. That's a bigger, easier win than mediation, especially at the beginning. Then come back to mediation later when you've got steady daily volume, and your ad revenue is a number that actually matters to you. Because if it's 50 bucks per day and you increase it by 20%, that's something. If it's $0.50 per day, it doesn't really matter. So again, go slowly when you do go for mediation, add one network at a time, don't go for five at a time. Give each one at least a week before you judge it because, again, the auction needs a few days to calibrate and watch you at CPM in the AdMob dashboard with the same daily habit that we talked about in the analytics section. That's the number that's going to tell you if any of this is working. So know that this lever exists, know roughly what it is, and later on, it can help you raise your revenue quite a lot. Okay, let's continue. 56. LTV vs CAC: The Equation That Lets You Scale: Back. This lesson is short on features and huge on importance because we're going to learn the single most important equation in this entire business. Master of this one idea, and you'll understand why some apps can simply pour money into ads and grow forever while others burn cash and basically die. It comes down to two things LTV and CAC. Now let's define them in simple terms. So CAC is your customer acquisition cost. Some people call it CPA, but CAC is a better term. So how much it costs you on average, to get one new user. If you spend 100 bucks on ads and get 50 users, your CAC is two bucks, $2. Simple enough, right? LTV is lifetime value. The total amount of money that one user brings you over their entire life in the app. That's everything they generate. All the ads, plus any potential subscriptions that they pay added up across the whole time that they actually use the app before they eventually cancel or drift away or uninstall it or whatever. Now, here's the whole game, the equation. The one thing to remember if you forget absolutely everything else from this course. So you got to compare the two. If your LTV is bigger than your CAC, you have a money machine. Think about what that means. If a user is worth three bucks to you over their lifetime, and you can buy that user for say, two bucks through ads, then every time you spend two bucks, you're going to get back three. You would do that all day long as much as you possibly can. You put in $1, you get a 50 out, repeat forever. That's scaling. That's how those apps grow incredibly fast. They found a machine where LTV beats CAC, and they just feed it more and more money. But flip it around. And it's basically a disaster. If you have LTV is five bucks, then every time you buy a user, you're going to lose $2. So spending more on ads doesn't grow your business. It acceleratees your bankruptcy. Your wallet is going to be basically empty. And this right here is exactly what happened in my story, you know, initially, when I launched Sad finder, I spent about 770 bucks, and I made, whatever, 165 or something ridiculous. So my CAC was way higher than my LTV. The math didn't math, so to speak. Wasn't really running a business. I was running a money shredder and no amount of scaling would actually fix it. It would only lose me more money a bit faster. But of course, those were the initial few weeks. Since then, things have gotten much better, but it really pays to actually keep in mind these two numbers. If you constantly look at them, you're going to be golden. Hopefully, you're going to see why everything in this chapter matters. Every single thing we do is really about pushing two things. It's pushing LTV up or pushing ack down. The paywall that we rebuilt, raising the CPM through mediation, reducing churn, so users stay longer and generate more. All of that lifts LTV, getting users for free, do videos and referrals, making your store page convert better. All of that basically lowers your CAC so the whole business is a tug of war between these two numbers, LTV and CAC. And you basically win when LTV pulls ahead. So how do you actually find your numbers? Youth analytics and dashboards, the ones we set up, give you all the pieces, your ad revenue and subscription revenue divided by your users, tracked over time, gets you towards LTV. Your ad spent, divided by users acquired gives you CAC. They won't be perfectly precise at the beginning, and that's completely fine. You're looking for the general truth at the beginning. Is LTV clearly above KC or clearly below or roughly equal? Now, that answer alone tells you exactly what to do next. And here's the punch line. Until your LTV comfortably beats your Kak, don't put too much money into ads. Grow through free channels and spend your energy into raising LTV. And that basically means better monetization and better retention. Only once the machine is proven, once every user reliably brings back more than it costs, then you can scale, then you can do pay dads. That's the difference between the developers quietly making 20 k a month and the ones who spent a fortune and have nothing to show for it. So understand these two numbers and let them decide when you're ready to scale. And one thing just in case you're confused about lifetime value, some users may use the app for two days, some may use the app for two years. You're looking for the average, okay? And based on that average, what you're trying to do instead of four months on average that the user actually uses the app, you're trying to push it to five or six or seven, so that's retention. So that's how you think about lifetime value just in case you're confused because I did see some questions about that. Okay, let's continue. 57. Ad Consent and Privacy: The Mandatory Essentials: Welcome back. This lesson is not exciting. Nobody dreams of building an app, so they can fill out privacy forms, but skipping it can get your ad switched off, or your account flagged, and I don't want you to go through that hassle. So let's get it out of the way so you can sit nice and calm. So here's the prompt. I'm not ready to publish my apps yet because I don't have a Google Play account, but I want to be ready. So add Google's UMP consent SDK, so users in regions that require it, see a proper consent form before ads and make sure our ads respect whatever they choose. Show the form at the right moment in the app flow and handle the case where someone declines. Also, draft me a privacy policy for this app based on what it actually does, ads analytics, crash reporting, subscriptions, the whole thing, so I can publish it on a webpage and link it from Google Play Console. Oh, that's quite a lot. So basically, it's two jobs in that prompt. The thing that lives in the app and the document that has to live on the web because Google Play requires it, and actually the app store as well on Apple side. So here's the situation. Because your app shows ads and therefore collects some data and because you're going to have users from all over the world, you are unfortunately subject to privacy laws. The big one that everybody talks about is GDPR, the European data protection law. If you have users in Europe and you will, the law says you must ask for their consent before showing them personalized ads. You've seen this yourself 1,000 times. We value your privacy, those pop ups, you know? Your app unfortunately needs that. The good news is Google has a built in tool exactly for that, and it logs directly into AdMob. It's called the UMP, sometimes just called the consent SDK. It shows the user a proper consent form when required based on where they are in the world. It handles the choice, and it passes that along to your ads automatically. You basically set up the message once in your AdMob account, and Claude wires everything up. So there's no big headache for us. Now, this is where the actual wording of that form actually lives. It's a handful of clicks, and then it's done forever. And let me be clear about why it's worth your 10 minutes or so. If you skip it, Google can limit or stop serving ads to your European customers, your European users. That's not a legal slap on the wrist. That's your revenue dropping. You simply cannot afford it. So this is basically a feature about making more money. It's not just a box ticking. It is quite important. And yeah, there it is on the phone. Notice when it appears super early before the first ad because that's what the law wants. Again, it is frustrating, but it is what it is. And notice the app still works perfectly fine if someone says no, they get non personalized ads, which again, they pay you a bit less, but you keep the user and you keep your account clean. Never build the version when declining breaks the app because that's going to be a problem for basically everyone. Now, the second piece, the privacy policy, both Google Play and the ad networks require your app to have an actual web page that explains what type of data your app collects and how it's being used. So you can't publish anything on Google Play without it, without this privacy policy. Now, this sounds a bit intimidating, but it's completely routine. So Claude has drafted one based on what the app genuinely does, and your job is to simply host it somewhere, resbarn.com or whatever, and then post the link in the Play Console in Google Play. The one rule, make sure it's honest and it matches reality. A copy paste policy that does not describe your app is actually worse than none at all. So make sure that you ask Law to make an original one. And third, closely related, is the data safety form in the Play Console. So when you publish, Google makes you fill out a form, declaring what data your app collects and shares, your analytics, your ads, and so on. The single most important rule here is to be accurate. So don't guess, don't downplay it. Don't take boxes randomly to get it over with. Google actually cross checks everything that you declare versus what the app actually does. And if there's a mismatch, that's a policy violation that can get you suspended. So please take a few minutes and try to fill these out truthfully. My advice, use Claude, have it go to your browser, ask it for help, and that's how you're going to do it right. Okay, and look at what we end up with. So we have three things. So a consent form for the ads through Google's UMP, a privacy policy on a web page, and the data safety form is all well set up on Google Play. So that's the whole set. Get them in place early, get it over with, and you're going to be safe and sound. Now, one thing that I have to be clear on some users think that by declining that consent form, they're not getting ads. Just to be clear, they're still getting ads, they're getting worse ads. So the difference is personalized, so things that the user might be interested in and non personalized. And again, it is a mistake. Some people think they won't be getting ads if they hit decline. That's not the case. They'll simply see worse ads, which doesn't help anyone. Now, overall, I know that this is the dull corner of app building. It's not exciting, but think of it like insurance and set bells, right? Bring right until the point you actually need them before you when the disaster strikes. Test it out on your phone, make sure that the privacy policy is actually live somewhere on the web, and with that, we can continue. 58. Staying Off the Ban List: Protect What You Built: Welcome back. This lesson is personal for me because I've lived this nightmare, and it's not a great feeling to put it mildly. Remember, early in the course, when I told you how I lost apps that with making over 800 bucks a day, that wasn't a story just to scare you just for the fun of it. It was a warning. In this business, you can build something absolutely wonderful and lose it overnight if you're careless. So let's make sure that never happens to you. Now, the core danger is this, your entire business sits on top of your Google Play account, and Google can suspend that account just like that overnight. If it goes, your apps go, your revenue goes, and sometimes without any warning, and the appeal process is slow as hell, and chances are you're not going to win the appeal. So rule number one of protecting yourself is quite simple. Absolutely follow the platform's rules like your livelihood depends on it, because, of course, it does depend on those rules. Tell Claude that. Tell that above anything else, above optimizing monetization and whatever. You want to make sure that you're not going to get banned. So when you implement push notifications, when you implement any type of features, Make sure that you tell Claude to check against the rules. So what can get you banned on Google Play? Now, let me walk you through some of the big ones. So, first and foremost, one of the most standard things is copyright, copyrighted content. This is a trap for beginners, and they constantly fall into this trap, especially with wallpaper apps. So you cannot use you cannot use, not use images that you don't have the rights to. Even my own personal images, for example. So if I make a banner and I put it on my blog, you cannot use it. And if you cannot use mine, of course, that means you can't use Marvel, Disney, Lego, nothing, no famous logos, no photos that you got off Google images of celebrities, nothing like that. So I mentioned this back in the subscription lesson, and I'm repeating it because it's one of the most important killers of your Google Play account. So use images that you own, images that you created or properly licensed, because again, if you do have the license for it, that may be good to go. When in doubt, just leave it out. So if you're not sure about something, just leave it out. The second thing, misleading behavior. Don't promise things in your store listing that your app doesn't actually do. So that's super important. And Claude is a stickler, so more often than not, it will help you out. It will tell you, Hey, don't promise that because it's not inside the app. Don't use fake screenshots. Don't stuff your title with unrelated keywords. Don't create fake reviews or downloads, because, again, there are ways through which you can go on fiber and buy reviews or whatever. Google's algorithms are incredibly good at spotting this type of behavior, and they're going to punish it hard. So you cannot fake reviews or downloads of usage with anything else. The third thing, permissions and data. So only ask for the permissions you genuinely need and handle data completely honest. And that ties back to the privacy lesson that we just had. So an app that demands access to contacts and location for no clear reason obviously raises flags. And there were many jokes about this. Why does your flashlight app need access to your location or your contacts or your SMS messages or Gmail or whatever? It's a flashlight app or a calculator that wouldn't make any sense. Now let's talk defense, the practical steps that can protect you. The most important one that almost no beginner knows about until it's back, back up your key store. So when you publish an Android app, it's signed with a special key file called the keystore. And here's the brutal part. If you lose that file, you can never, never update your app again. So it's incredibly important. So you would have to publish a brand new app from scratch and lose all the users, all the reviews, all the progress. So back that key up in multiple places in Cloud storage in a password manager somewhere where you're not going to lose it. So treat it like the deed to your house. It's incredibly important. So Claude is going to create it during publishing. Your job is to put it in a very, very good place. The next defensive habit is staged rollouts. When you release an update, don't push it to 100% of your users at once. You can release it in small slices only 10% or 20%, something like that. Then watch and see what happens. This is where Crash lytics from the analytics lesson, really earns its keep. So if the update has a nasty bug, you catch it while it's only affecting a small fraction of your users, and you can halt it before it pushes before it reaches to everyone else. So if you push it blindly to 100% of your users, that can thank your rating overnight because again, it's so easy to get one star reviews. It's so hard to get out of that hole with five star reviews. In short, when you push an update, roll it out slowly, watch the analytics, and then expand. And finally, when Google sends you a policy email, My God, don't ignore it. Check your spam folder often and make sure that when you get a message, you do it right away. Read it, understand it, and fix the issue fast. These messages often come with a deadline. Respond promptly, and you usually keep your app without any problems. But if you're going to ignore it, you can lose everything. Some developers, once they have multiple apps, they spread them out across multiple accounts. So if you have one problem with one account, it doesn't threaten the rest of the business, so to speak. Now, that's an advanced precaution, but it tells you how seriously the pros take it. You've worked incredibly hard to build something, so you got to protect it. But, yeah, having multiple accounts is not something that I can recommend nowadays because Google can easily connect them. And if one app has a problem, if one account has a problem, you're going to lose every one of them. Plus, the simple fact that you're having multiple accounts may be a red flag in terms of Google's policy and whatnot. Google doesn't typically like that. Again, it's not exactly discouraged, but it's not something that I can encourage. But yeah, overall, protect your portfolio, clean content, decent listings, backup key store, staged rollouts, and if possible, fast responses. Do that, and you'll never live to my $800 per day fiasco, where I lost everything multiple times. Okay, let's continue. 59. Build an App Portfolio: Welcome back with near the end, but let me leave you with some interesting ideas. So everything up until this point has been about one single app, a wallpaper app. But the developers who truly make a living from this almost never have one single app. They build a portfolio, and once you understand why, it changes how you think about this entire journey. And here's the reasoning. Most individual apps are fairly small. Your first one might make five bucks a day. That's real, that's exciting, but it's not exactly making a living, right? Now, what if you have ten apps, and each one makes five bucks a day? So that's 50 a day, 1,500 per month. What if one of those ten becomes viral and makes 50 bucks a day, even though that's not exactly viral? But yeah, let's say it starts to make 50 bucks a day on its own. Suddenly, you're at a comfortable income. This is the portfolio effect. So no single app has to be a monster hit. You just need several decent apps and the occasional winner. And that's a second quieter benefit protection. Remember, the last lesson about losing an app, if your entire income is based on one single app and that gets suspended, what fades, you're back to zero. If it's one of ten, losing one is not going to be all that much of a problem. You will still survive. So portfolio spreads your risk the same way an investor doesn't put every single dollar into one single stock, one single company. So this is how you sleep at night in this business. Now, here's the part that makes a portfolio actually achievable for one person, and it's beautiful. Your first app becomes a template. Think about everything that we've built and learned across this entire course. So ads wired up a subscription and a proper paywall, onboarding, push notifications, local and server side, ratings, analytics and crash reporting, remote config, translations, consent forms, a keystore workflow. So all of the plumbing, all those hard won pieces, you don't have to rebuild them from scratch for app number two. You simply reuse them. You take your first app as a boilerplate, swap out the content, and you've got a second app in a fraction of the time, and your third app is going to be even faster. This is where Claude and this entire approach becomes a superpower. Once you have a working template, you can tell Claude build me a new app just like my wallpaper app, but for high quality natured sounds or for daily motivational quotes and reuse all of your proven systems. What took you this entire course the first time around might take you about 20% of the time. So that's the compounding advantage that turns one app into ten. And a thought on what those apps should be. Remember my advice about picking niches you actually care about in the shower on a walk. Keep a running list of ideas, model trains, meditation, recipes, workout timers, whatever gets you excited. Every app is a potential lottery ticket, and each one teaches you something that makes the better one even better. Some will flop and that's normal. You got to accept that. Some will be completely flat, nothing at all, five users lifetime, okay? But the idea is that you would have spent very little time on every single one of your bullets, thanks to this reusability, thanks to this template, so to speak. So again, you only need a few to work. If one doesn't work, that's not a problem. You got to fire again and again and again. You got to publish more and more and more. After ten apps, then you can regroup. One more idea to plan for future apps. Apps are assets that you can sell. So once an app makes steady predictable money, someone may try to buy it from you, often for the multiple of the monthly revenue. There are marketplaces built exactly for this thing. So an app that makes 500 bucks a month might sell for several thousand dollar in a lump sum. So that's another path. You build, you grow, you sell, and then you repeat. You have options. So that's the portfolio mindset, and it's the note I want to end on. Don't pour your whole identity into making one perfect act. It doesn't exist. Build one, learn everything, turn it into a template, and then build the next one faster and faster and faster. Spread your bets, keep your winners, and let the whole thing compound over months and years. That's how this becomes not only a project, but a genuine, durable way to make a living. And with that, let's continue. 60. Optimize and Scale - Conclusion: Welcome back and congratulations. Not just finishing this chapter, but on everything that we've built to get to this point. Take a real moment with that. You started this course, maybe never haven't written a single line of code or used AI at all. And now here we are. You can build a mobile app. You can launch it on the store. You can make money from it through ads and subscriptions. You can get users through your own hustle. You can keep them coming back. You can squeeze real value out of every one of them. You can protect your business from disaster, and you can multiply it into a portfolio. This is a complete skill set, and this is rare stuff. So congratulations. Let me pull this final chapter together. You learned that your paywall is a lever with small tweaks, mean big money, and that timing and good value beat greed every time. You learned about mediation about raising your CPM and why it's a job for a bit later on. You learned that one equation rules just about everything LTV versus CAC, and that you only scale with paid money with paid ads once a user reliably brings back more than they cost. You handled the not so sexy side of consent, of privacy policies and whatnot. You learned how to protect what you've built with clean content, a backup key, and staged rollouts. And finally, you zoomed out, and you saw the bigger picture. The real wealth comes from a portfolio of apps. You don't need a hit. You just need to continue building. And here's the truth I want to leave you with none of this is a magic move, okay? There's no single secret, no single prompt. There's no secret perfect app that changes your life overnight. It's the compounding of small things, a slightly better paywall, a slightly higher CPM, a few percent less churn, one more app than another. So every improvement is actually modest on its own, of course, but then stacked together month after month, they turn $0.05 a day into a real income. The people who win at this aren't smarter than you. They just keep stacking small wins long after everyone else gets bored and they quit. So don't quit. Keep stacking. That's my friendly advice to you. And remember why we started all the way back at the beginning. It was never really about wallpapers or confetti or consent forms. It was about that feeling of building something real. Delivering value to people and watching your MRR monthly recurring revenue take up $0.10 per day than $1 than ten, making a living from anywhere on your own terms with nothing but a computer and your persistence. That's the entire game. So here's my final ask. Go finish your app and get it in front of real people. It won't be perfect. It doesn't need to be launch it, learn from it, then build the next one to be just a bit better. And when things break because they will stay calm, ask for help and keep going. Patience is a big part of this game. I'm proud of you for making it up until this point. Now go build something exciting, and I hope I can see you in another course of mine. This is Chris Barin signing out. Thank you so much for sitting with me. Thank you.