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.