Pro Vibe Coding

From prototype to real product. Build apps people pay for, use daily, and trust with their data.

A guide for people who finished Pre-Vibe Coding and are ready to build real things.

Who is this for?
  • You finished the Pre-Vibe Coding guide (or you already know the basics)
  • You can build simple apps with AI
  • You understand frontend, backend, databases, and deployment
  • Now you want to build something REAL — an app where people create accounts and log in, pay you money, upload files and images, get emails and notifications, and trust you with their data

This guide shows you how — still using AI as your builder, still in simple language, still no coding degree required.

Part 1: The Leap

Chapter 1: From Toy App to Real Product

You built a to-do app. Or a landing page. Or maybe a little dashboard that shows some data. Congratulations — seriously. Most people never get that far.

But you've noticed something. Your app feels like a toy. Nobody can log in. There's no way to pay. If the data disappears, nobody would care because nobody is using it.

That's fine. You were running a food truck.

The food truck to restaurant analogy.

Your to-do app? That was a food truck. You parked it on the street, made some tacos, and people said "hey, these are good." The cooking was real. The food was real. But there was no front door, no cash register, no health inspection, and no manager watching the floor.

Now you're opening a restaurant. The cooking is the same — the AI still writes the code. But a real restaurant needs:

Those are the 8 features almost every real app needs. And here's the good news: you don't need to build them all at once.

Build in layers.

Start with the MVP — Minimum Viable Product. That's a fancy way of saying: what's the least you can build and still have something useful?

Each layer makes your app more real. And each layer is a conversation with the AI.

Tell the AI

"I'm building a [describe your app]. Right now it's a basic prototype. I want to turn it into a real production app. Let's start by adding user authentication. Users should be able to sign up with email and password, log in, and stay logged in. Use [your framework] and a proper auth library. Set up the project with a real database (PostgreSQL), environment variables for secrets, and a clean folder structure."

That prompt alone shifts the AI from "toy mode" to "real app mode." You're telling it: I'm serious now. Build it like it matters.

Chapter 2: Choosing Your Stack (Without Overthinking It)

A "stack" is just the set of tools your app is built with. That's it. It's not complicated.

The kitchen analogy.

Choosing a stack is like choosing what kind of kitchen to set up. Gas stove or electric? Commercial oven or home oven? Wok or cast iron? Each choice works fine. Professional chefs have preferences, but the food comes out good either way.

People will tell you to use Rust or Go or Elixir or whatever the hot thing is this month. Ignore them. For vibe coding, you need a stack where the AI is deeply knowledgeable and can write reliable code fast.

That narrows it down to two great options.

Option 1: The Python Stack

Frontend:  React or plain HTML/CSS/JavaScript
Backend:   FastAPI (Python)
Database:  PostgreSQL
ORM:       SQLAlchemy or Prisma

FastAPI is a Python backend framework. It's fast, modern, and AI knows it inside and out. If you're more comfortable with Python-style thinking (or you plan to do anything with data, AI, or machine learning later), go here.

Option 2: The JavaScript Stack

Frontend:  Next.js (React-based)
Backend:   Next.js API routes (built in) or Express
Database:  PostgreSQL
ORM:       Prisma

Next.js does frontend AND backend in one framework. One language (JavaScript/TypeScript) for everything. If you want the simplest setup with the fewest moving parts, go here.

Both stacks use PostgreSQL. That's the database. It's the industry standard. It's free. It handles everything from 10 users to 10 million. SQLite was fine for your toy app. PostgreSQL is for your real app.

Here's the important part: pick one and move on.

Do not spend three days reading comparison articles. Do not ask on Reddit. The AI is excellent with both stacks. The one you pick will work. The best stack is the one you actually start building with.

Tell the AI

"Scaffold a new [Next.js / FastAPI] project for a [describe your app]. Use PostgreSQL as the database. Set up the project with: a clean folder structure, environment variables (.env file), database connection, and a basic health check endpoint. Include a README with setup instructions. Use TypeScript [if Next.js] or Python 3.11+ [if FastAPI]."

The AI will generate a project structure that looks professional. Folders organized. Config files set up. Database connected. You just jumped ahead by about two days compared to doing it manually.

One more thing: you'll see the term ORM come up. An ORM is a translator between your code and your database. Instead of writing raw database commands, you write normal code, and the ORM translates it. Think of it like having a bilingual assistant — you speak English, the database speaks SQL, and the ORM handles the conversation.

Part 2: Authentication — Letting Users Log In

Chapter 3: How Login Actually Works

Every app you use has a login screen. Gmail, Netflix, Instagram — they all ask you to prove who you are before they let you in. Let's understand what actually happens behind that screen.

The wristband at a concert.

You go to a music festival. At the gate, you show your ticket. They check it. If it's valid, they put a wristband on you. For the rest of the day, you don't show your ticket again. You just flash your wristband. Security sees it and lets you through.

That's exactly how login works on the internet. Here's the step-by-step:

1. You type your email and password and click "Log In" ↓ 2. Your browser sends that info to the server ↓ 3. The server checks: does this email exist? Does the password match? ↓ 4. If yes → the server creates a "wristband" (a token or session) If no → the server says "wrong password" ↓ 5. Your browser stores the wristband ↓ 6. Every time you click something, your browser shows the wristband automatically ↓ 7. The server sees the wristband and says "yep, that's you"

That's the whole thing. Every login system in the world works this way. The details vary, but the pattern is always the same.

Sessions vs. tokens — two kinds of wristbands.

There are two ways to handle that "wristband":

Sessions — the venue keeps a list. When you log in, the server writes your name on a list and gives you a number. Every time you make a request, you show your number. The server checks the list: "Number 4729... yep, that's Sarah, she's allowed in." The proof lives on the server.

Tokens — you carry the proof. When you log in, the server gives you a special wristband with your info encoded into it. Every time you make a request, you show the wristband. The server reads the wristband itself — it doesn't need to check a list. The proof lives with you. The most common type is called a JWT (JSON Web Token — pronounced "jot").

Most modern apps use tokens. They're simpler to scale because the server doesn't need to maintain a list.

Why passwords are NEVER stored as-is.

This is important. No responsible app stores your actual password. Ever.

Imagine you write a secret message on a piece of paper, then feed it through a shredder that creates a unique pattern. You can't un-shred it — you can't turn the shredded paper back into the message. But if someone writes the same message and shreds it with the same shredder, they'll get the exact same pattern.

That's hashing. When you create an account, the server takes your password, runs it through a mathematical "shredder" (a hash function), and stores the shredded version. When you log in later, the server shreds what you typed and checks: does this shredded version match the stored one?

If a hacker steals the database, they get shredded passwords. Useless. They can't un-shred them.

Three ways people log in:

  1. Email + password — the classic. You pick a password, the app stores a hash of it.
  2. OAuth / "Sign in with Google" — you let Google (or Apple, GitHub, etc.) vouch for you. The app never sees your password at all. Google says "yep, this person is legit" and the app trusts Google.
  3. Magic links — the app sends a special one-time link to your email. You click it, you're in. No password to remember. Slack uses this.

Each approach has tradeoffs. OAuth is easiest for users (one click). Email + password is most familiar. Magic links are the most secure but require a working email system.

Chapter 4: Building Auth With AI

Here's the golden rule of authentication: do not build it from scratch.

Authentication has a thousand ways to go wrong. Password storage, session management, token expiration, CSRF attacks, brute force protection — the list goes on. Smart developers don't write this themselves. They use battle-tested tools.

You have two paths:

Path 1: Libraries (you host everything)

A library is code that plugs into your app. Your app handles the login, but the library does the hard security work.

Pro: Free. Full control. Your data stays with you.
Con: More setup. You manage the database, password hashing, and email verification yourself (though the library helps).

Path 2: Services (someone else handles it)

A service is an external company that handles all of authentication for you. You just connect to them.

Pro: Way less work. Battle-tested security. Prebuilt UI for login, signup, password reset.
Con: You depend on an external service. Costs can grow with users.

When to use which?

The signup flow:

Tell the AI

"Add user signup to this app using [Clerk / NextAuth.js / Supabase Auth]. The signup form should collect email and password. After signing up, the user should be redirected to the dashboard. Store user info in the database. Include email verification."

The login flow:

Tell the AI

"Add login functionality. Users log in with email and password. After login, redirect to the dashboard. Show an error message for wrong credentials. Include a 'Forgot password?' link."

Password reset:

Tell the AI

"Add a password reset flow. User clicks 'Forgot password?', enters their email, receives a reset link, and can set a new password. The reset link should expire after 1 hour."

"Remember me":

Tell the AI

"Add a 'Remember me' checkbox to the login form. If checked, the session lasts 30 days. If not checked, the session lasts 24 hours."

Adding "Sign in with Google":

Tell the AI

"Add Google OAuth login. Users can click 'Sign in with Google' on the login page. If they don't have an account, create one automatically. If they do, log them in. Use [NextAuth.js / Clerk / your library] for this."

For OAuth, you'll need to set up a Google Cloud project and get API keys. The AI will walk you through it, but just know: this part involves some clicking around in Google's dashboard. It takes about 10 minutes.

Chapter 5: Protecting Pages and Data

You have login working. Users can sign up and log in. But right now, anyone can still visit any page by typing the URL directly. That's like having a front door with a lock — but leaving all the windows open.

The bouncer pattern.

Think of every page in your app as a room in a nightclub. Some rooms are open to everyone — the landing page, the pricing page, the login page. Those are the lobby.

But the dashboard? The settings page? The admin panel? Those rooms have a bouncer. Before you walk in, the bouncer checks: "Do you have a wristband? Is it valid? OK, come in." If you don't have one, the bouncer sends you to the front door (the login page).

That's called a protected route. A route is just a URL path (like /dashboard or /settings). A protected route is one that requires login.

User visits /dashboard ↓ Bouncer checks: is user logged in? ↓ ⌊—————⌉ YES NO ↓ ↓ Show the Redirect to dashboard /login page

Authentication vs. authorization — two different questions.

These two words sound similar but mean very different things.

Authentication = Who are you? (Checking the wristband.)
Authorization = What are you allowed to do? (Checking if your wristband gives you backstage access.)

A logged-in user can see their own dashboard. But can they see OTHER people's dashboards? Can they delete posts? Can they access the admin panel?

That's authorization. And it comes down to roles.

Roles: who can do what.

Most apps have at least two roles:

Some apps have more:

In the database, this is usually just a column on the user table. Something like role: "admin" or role: "user". Simple.

Row-level security: users only see THEIR data.

This one is critical. Imagine your app has a notes feature. Every user has their own notes. If you're not careful, User A could see User B's notes just by changing a number in the URL.

Row-level security means: when the database looks up notes, it automatically filters to only show notes belonging to the logged-in user. It's like having a filing cabinet where each drawer only opens for its owner.

Tell the AI

"Add route protection to this app. The following pages should require login: /dashboard, /settings, /profile. If a user is not logged in and tries to visit these pages, redirect them to /login. Add role-based authorization with two roles: 'user' and 'admin'. Admin users can access /admin. Regular users cannot. Also add row-level security — when querying data, always filter by the logged-in user's ID so users can only see their own data."

Part 3: Payments — Getting Paid

Chapter 6: How Online Payments Work

Here's the most important rule of online payments: you never touch the credit card.

Seriously. You never see card numbers. You never store card numbers. You never process card numbers. If you do, you're breaking laws and begging for a lawsuit.

So how does it work?

The cash register analogy.

Imagine you open a store. You could build your own cash register from scratch — figure out how to accept credit cards, handle receipts, deal with refunds, talk to the bank, handle fraud. Or you could just buy a cash register that does all of that already.

That cash register is Stripe.

Stripe is a company that handles payments. You send a customer to Stripe, Stripe collects their money, and Stripe sends you the money (minus a small fee, usually about 3%). You never touch the card. Stripe handles the security, the fraud detection, the receipts, the tax — all of it.

There are other payment processors (PayPal, Square, Braintree), but Stripe is the standard. Almost every startup uses it. The AI knows Stripe inside and out. Use Stripe.

What happens when someone pays — step by step:

1. User clicks "Buy Now" on your app ↓ 2. Your app tells Stripe: "This person wants to pay $20" ↓ 3. Stripe shows a payment form (on Stripe's secure page) ↓ 4. User enters credit card info (into Stripe, NOT your app) ↓ 5. Stripe charges the card ↓ 6. Stripe tells your app: "Payment successful!" ↓ 7. Your app unlocks the feature / delivers the product ↓ 8. Stripe deposits the money in your bank account (usually 2 days later)

Notice: your app never sees the credit card. At step 3, the user leaves your app (or sees a Stripe overlay), enters their card info on Stripe's secure page, and then comes back. Your app only hears "it worked" or "it didn't."

One-time payments vs. subscriptions.

One-time payment — the customer pays once, gets the thing. Like buying a book. You charge $20, they get access.

Subscription — the customer pays every month (or year). Like Netflix. You charge $10/month, they get access as long as they keep paying. If they cancel, access stops.

Most SaaS apps (Software as a Service — apps you pay monthly for) use subscriptions. Stripe handles both.

Chapter 7: Building Payment Features

Let's get practical. Here's how to actually add payments to your app.

Step 1: Set up Stripe.

You need a Stripe account. Go to stripe.com and sign up. It's free — Stripe only takes a fee when you actually process payments. You'll get two important keys:

Put both in your .env file. The AI will know what to do with them.

Step 2: Use Stripe Checkout (the easiest way).

Stripe Checkout is a prebuilt payment page hosted by Stripe. You don't design it. You don't build it. You just redirect your user to it. Stripe handles the card form, validation, security, receipts — everything.

Tell the AI

"Add Stripe Checkout to this app. When a user clicks 'Buy Now', create a Stripe Checkout session for a one-time payment of $29.99. After payment succeeds, redirect to a /success page. After payment fails or is cancelled, redirect to a /cancel page. Use the Stripe secret key from environment variables."

Tell the AI

"Add a subscription payment flow using Stripe Checkout. I have two plans: Basic at $9/month and Pro at $29/month. When a user selects a plan, redirect them to Stripe Checkout with the appropriate price. After payment, save the subscription status to the user's record in the database."

Tell the AI

"Add a 14-day free trial to the Pro plan. The user enters their card info during signup but isn't charged for 14 days. If they cancel during the trial, they're never charged."

Step 3: Understand webhooks.

This is the part that confuses people, but it's actually simple.

A webhook is when Stripe calls YOUR app to tell you something happened. Think of it like a restaurant calling to confirm a reservation. You called and made the reservation (started the payment). Later, the restaurant calls YOU back: "Just confirming your table for 7 PM" (payment succeeded).

Why can't you just check if the payment worked when the user comes back to your success page? Because users can close the browser. They can lose internet. They can refresh. The redirect isn't reliable. The webhook IS reliable — Stripe will keep trying until your app confirms it received the message.

User pays on Stripe ↓ Stripe charges the card ↓ Stripe sends a webhook to YOUR server: "Hey, payment #xyz succeeded!" ↓ Your server receives it and updates the database: "User 42 is now a paid customer"
Tell the AI

"Set up Stripe webhooks. Create a webhook endpoint at /api/webhooks/stripe. Handle these events: checkout.session.completed (mark user as paid), invoice.payment_succeeded (renew subscription), customer.subscription.deleted (mark user as unpaid). Verify the webhook signature using the Stripe webhook secret from environment variables."

Step 4: Testing.

Stripe has a test mode. Every Stripe account comes with test API keys (they start with pk_test_ and sk_test_). In test mode, you can use fake credit cards:

Use test mode until everything works perfectly. Then switch to live keys when you launch. The code doesn't change — just the keys.

Chapter 8: Subscriptions and Billing

Most real apps don't just charge once. They have plans. They have tiers. They have billing pages where users manage their subscription. Let's build all of that.

Plans and tiers.

Almost every SaaS app has three tiers. Here's a common pattern:

┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ FREE │ │ PRO │ │ ENTERPRISE │ │ │ │ │ │ │ │ Basic stuff │ │ Everything │ │ Everything │ │ Limited │ │ in Free + │ │ in Pro + │ │ usage │ │ more usage │ │ custom │ │ │ │ + features │ │ + support │ │ $0/mo │ │ $19/mo │ │ $99/mo │ └──────────────┘ └──────────────┘ └──────────────┘

In your database, each user has a plan field. It's something like "free", "pro", or "enterprise". When a user tries to use a Pro feature, your app checks: is their plan "pro" or higher? If not, show them the upgrade page.

Tracking which plan a user is on.

This lives in your database. You need a few fields on each user:

When Stripe sends a webhook saying "this subscription was renewed," you update these fields. When Stripe says "this subscription was cancelled," you update them again.

Upgrading and downgrading.

When a user upgrades from Free to Pro, you create a new Stripe subscription. When a user upgrades from Pro to Enterprise, you update the existing subscription to the new price. When they downgrade, same thing — update the subscription, and Stripe handles the prorating (charging the right amount for the partial month).

Cancellation.

When a user cancels, you have a choice: cancel immediately, or cancel at the end of the billing period. Most apps cancel at the end of the period — the user already paid for this month, so let them finish it.

Invoices.

Stripe generates invoices automatically. You can show them in your app by pulling them from the Stripe API. Users like having a billing history page where they can download past invoices.

Tell the AI

"Build a complete billing system for this app. I need: three plans (Free, Pro at $19/month, Enterprise at $99/month). Create Stripe Products and Prices for each plan. Add a pricing page that shows all three plans. Add a billing page at /settings/billing where users can see their current plan, upgrade, downgrade, or cancel. Handle Stripe webhooks to keep the database in sync. When a user cancels, let them keep access until the end of the billing period. Include an invoice history section that pulls past invoices from Stripe."

That's a big prompt. The AI might take a few rounds to get everything right. That's normal. Break it into pieces if needed — pricing page first, then billing page, then webhooks.

Part 4: Real Data Design

Chapter 9: Beyond Simple Tables

Your toy app probably had one or two database tables. A tasks table for your to-do app. A posts table for your blog.

Real apps have 5, 10, 15, sometimes hundreds of tables. And those tables connect to each other in important ways.

Relationships: how tables connect.

Think of your database like a family tree. People are related to each other — parents have children, siblings share parents, cousins connect through grandparents. Database tables work the same way.

One-to-many: one parent, many children.

One user has many posts. One store has many products. One class has many students.

In the database, this means the "child" table (posts) has a column that points back to the "parent" table (users). Each post has a user_id that says "I belong to this user."

USERS table POSTS table ┌────┬─────────┐ ┌────┬─────────┬─────────┐ │ id │ name │ │ id │ title │ user_id │ ├────┼─────────┤ ├────┼─────────┼─────────┤ │ 1 │ Alice │◄───────│ 1 │ Hello │ 1 │ │ 2 │ Bob │◄──├ │ 2 │ World │ 1 │ └────┴─────────┘ └────│ 3 │ Hi Bob │ 2 │ └────┴─────────┴─────────┘ Alice has 2 posts. Bob has 1 post.

Many-to-many: friends that go both ways.

Students and classes. A student takes many classes. A class has many students. Neither "belongs to" the other — the relationship goes both ways.

You can't just add a student_id column to the classes table (because each class has MANY students). And you can't add a class_id column to the students table (because each student has MANY classes).

The solution: a third table that sits in between. It's called a join table (or junction table). It just has two columns: student_id and class_id.

STUDENTS ENROLLMENTS CLASSES ┌────┬───────┐ ┌────────┬────────┐ ┌────┬─────────┐ │ id │ name │ │stu_id │class_id│ │ id │ name │ ├────┼───────┤ ├────────┼────────┤ ├────┼─────────┤ │ 1 │ Alice │◄──│ 1 │ 1 │──►│ 1 │ Math │ │ 2 │ Bob │◄──│ 1 │ 2 │──►│ 2 │ English │ └────┴───────┘ │ 2 │ 1 │ └────┴─────────┘ └────────┴────────┘ Alice takes Math and English. Bob takes Math. Math has Alice and Bob. English has just Alice.

One-to-one: a single pair.

One user has one profile. One order has one receipt. This is less common but shows up when you want to split a big table into smaller ones.

Database migrations: renovating your house one room at a time.

As your app grows, you'll need to change your database. Add a column here, rename a table there, create a new relationship.

A migration is a file that describes one change to your database. Think of it like renovating your house. Each migration is one renovation job: "add a bathroom to the second floor" or "knock down the wall between the kitchen and dining room."

You keep all your migrations in order. Migration 1, then 2, then 3. Each one builds on the last. If you need to set up the database on a new computer, you just run all the migrations in order and you get the exact same structure.

This is version control for your database. And it's essential for real apps — because you'll change your database design many, many times.

Indexes: bookmarks for fast searches.

When you search a book, you use the index in the back. You don't read every page — you look up the topic in the index and jump to the right page.

Database indexes work the same way. If you often search for users by email, you add an index on the email column. Now the database can find users by email instantly instead of scanning every single row.

Rule of thumb: add indexes on any column you search, sort, or filter by frequently.

When SQLite isn't enough.

SQLite is a simple database that stores everything in a single file. It's great for learning and prototyping. But it struggles with multiple users accessing it at the same time, and it can't handle complex queries well.

PostgreSQL is the real deal. It handles thousands of simultaneous users, supports advanced features, and is what production apps use. Switching from SQLite to PostgreSQL is like going from a notebook to a filing system — same concept, much more capable.

Tell the AI

"I need to design the database for a [describe your app]. Create the database schema with proper relationships. I need tables for [list your main concepts]. Use one-to-many and many-to-many relationships where appropriate. Set up database migrations so I can track changes. Add indexes on columns that will be frequently searched. Use PostgreSQL."

Chapter 10: Users, Roles, and Permissions

Every real app has different types of users who can do different things. Your job is to decide who can do what.

Simple approach: a role column.

The easiest way to handle roles is a single column on the users table called role. It holds a value like "user", "admin", or "moderator".

USERS table ┌────┬─────────┬───────────┐ │ id │ name │ role │ ├────┼─────────┼───────────┤ │ 1 │ Alice │ admin │ │ 2 │ Bob │ user │ │ 3 │ Carol │ moderator │ └────┴─────────┴───────────┘

Then in your code, you check: if the user's role is "admin", let them do admin stuff. If not, show a "not authorized" message.

This works for most apps. If you have 2–4 roles with clear boundaries, this is all you need.

Flexible approach: a permissions table.

What if you want fine-grained control? Maybe some moderators can delete posts but not ban users. Maybe some admins can manage billing but not view user data.

Then you use a permissions table. Instead of one "role" column, you have a whole table that maps users to specific abilities:

PERMISSIONS table ┌─────────┬──────────────────┐ │ user_id │ permission │ ├─────────┼──────────────────┤ │ 1 │ manage_users │ │ 1 │ manage_billing │ │ 1 │ delete_posts │ │ 3 │ delete_posts │ │ 3 │ ban_users │ └─────────┴──────────────────┘

Alice (user 1) can manage users, billing, and delete posts. Carol (user 3) can delete posts and ban users. Bob has no special permissions — he's a regular user.

This is more work to set up. But it gives you total flexibility. Use it when your roles aren't clean-cut.

Multi-tenancy: apartments in a building.

Some apps serve multiple companies or organizations. Think Slack — each company has its own workspace. Users from Company A can't see Company B's messages. Same app, separate spaces.

This is called multi-tenancy. The analogy is an apartment building. Everyone lives in the same building (uses the same app), but each apartment (organization) is completely separate. You can't walk into your neighbor's apartment.

In the database, you add an organization_id to almost every table. Every query filters by that organization. When Alice from Company A loads her messages, the app only fetches messages where organization_id matches Company A.

Tell the AI

"Add a role-based permission system to this app. I need three roles: admin, moderator, and user. Admins can manage everything — users, content, and settings. Moderators can review and delete content but can't manage users or settings. Regular users can only manage their own content. Add a role column to the users table. Create middleware that checks permissions before allowing access to protected endpoints."

Part 5: Essential Features Real Apps Need

Chapter 11: File Uploads

Users want to upload things. Profile pictures. Documents. Images for their posts. Resumes. Receipts.

Here's the key insight: files don't go in the database.

Your database stores text, numbers, and dates. It's terrible at storing files. It would be like stuffing a filing cabinet with actual photos and binders — it gets bloated and slow fast.

Instead, files go in a storage service — a separate place designed specifically for storing files. Your database just stores the URL (the address) of where the file ended up.

User uploads a profile picture ↓ Your app sends the file to a storage service ↓ Storage service saves it and returns a URL like: https://storage.example.com/avatars/user42.jpg ↓ Your app saves that URL in the database ↓ When someone visits that user's profile, the app reads the URL from the database and shows the image from the storage service

Storage service options:

They all do the same thing: store your files and give you a URL. Pick whichever one your AI knows best (usually S3 or Supabase Storage).

Image resizing.

When someone uploads a 4000x3000 pixel photo as their profile picture, you don't want to serve that full image every time. It's slow and wastes bandwidth. You want to resize it — create a smaller version (like 200x200) for the profile picture, and maybe a medium version for other uses.

You can do this on upload (resize before storing) or on-the-fly (resize when someone requests the image). Both work. The AI can set up either approach.

Tell the AI

"Add file upload support to this app. Users should be able to upload a profile picture. Use [S3 / Cloudflare R2 / Supabase Storage / Uploadthing] for file storage. Limit uploads to images only (JPG, PNG, WebP) and max 5MB. After upload, save the file URL to the user's profile in the database. Resize images to 200x200 pixels for the avatar. Show the profile picture on the user's profile page and in the navigation bar."

Chapter 12: Sending Emails

Real apps send emails. Not the marketing kind (though that too) — the "your order shipped" kind, the "here's your password reset link" kind, the "someone commented on your post" kind.

These are called transactional emails — they're triggered by something the user did. They're not spam. They're expected.

You don't send emails from Gmail.

If you tried to send 1,000 emails from your personal Gmail, Google would shut you down within an hour. They'd think you're a spammer.

Instead, you use an email sending service — a company whose entire job is sending emails reliably. They have relationships with email providers (Gmail, Outlook, Yahoo) and know how to get your emails into inboxes instead of spam folders.

Options:

For starting out, Resend is the easiest. It takes about 5 minutes to set up.

Transactional vs. marketing email.

Transactional — triggered by user actions. Password resets, order confirmations, welcome emails, notifications. Users expect these. You don't need permission to send them (they triggered the action).

Marketing — newsletters, promotions, announcements. Users must opt in. You need an unsubscribe link. This is legally required in most countries. Use a different service for this (like Mailchimp or ConvertKit).

Don't mix them. Transactional emails should always arrive instantly. Marketing emails can be batched. If you send marketing emails through your transactional service and get marked as spam, your password reset emails stop arriving too.

Email templates.

Nobody writes email content in code every time. You create templates — reusable designs with placeholders. Think of them like Mad Libs:

"Hi [NAME], your order #[ORDER_NUMBER] has shipped! Track it here: [TRACKING_URL]"

The AI fills in the blanks when sending.

Tell the AI

"Add email functionality to this app using [Resend / SendGrid / Postmark]. Set it up with my API key from environment variables. Create email templates for: welcome email (sent after signup), password reset (includes a reset link), and order confirmation (includes order details). Each email should have a clean, simple HTML design. Send emails asynchronously so they don't slow down the user experience."

Chapter 13: Search and Filtering

Every app with a list needs search. Users table? You need to search by name or email. Products page? You need to filter by category and price. Blog? You need to search by title and content.

Basic search: just check if the text contains the search term.

This is the simplest approach. The user types "banana" and you look for every product where the name contains "banana." It works. It's fast enough for small datasets (under 10,000 items).

Advanced search: full-text search.

When your data gets bigger or you need smarter matching (searching for "running shoes" should also find "jogging sneakers"), you need full-text search. PostgreSQL has this built in. For even more power, there are services like Algolia or Meilisearch that make search blazing fast and smart.

Filtering: narrowing the list.

Search finds items by text. Filtering narrows the list by attributes. "Show me products that are under $50 AND in the Electronics category AND have 4+ stars." Each filter is a condition. Stack them up.

Sorting: putting results in order.

By date (newest first), by price (low to high), by name (alphabetical), by popularity. Users expect to be able to sort. It's one dropdown.

Pagination: showing 20 at a time, not 10,000.

If your database has 50,000 products, you don't load them all at once. That would crash the browser and take forever.

Instead, you load a page at a time. Page 1 shows items 1–20. Page 2 shows items 21–40. And so on. This is called pagination.

There are two styles:

Both are fine. Traditional pagination is easier to implement and better for most use cases.

Tell the AI

"Add search, filtering, sorting, and pagination to the [products / users / posts] page. Search should work on [name, title, description — pick relevant fields]. Add filters for [category, price range, date range, status — pick what applies]. Add sort options: newest first, oldest first, name A-Z, name Z-A. Show 20 items per page with traditional pagination. Include a URL query parameter for each filter so users can bookmark or share filtered views."

Chapter 14: Admin Dashboards

You built the app. Users are signing up. Now you need to see what's happening. How many users signed up today? Are there posts that need moderation? Did any payments fail?

Every real app needs an admin view. It's not for your users — it's for you.

What admins typically see:

The simple approach: an /admin route.

You don't need a fancy separate app for your admin dashboard. Just create a section of your existing app at /admin that's only accessible to users with the admin role.

Inside that section, build pages with tables showing your data. A users table with columns for name, email, signup date, plan, status. A payments table showing recent transactions. A simple dashboard with numbers and maybe a chart or two.

Charts and stats.

Numbers are good. Charts are better. A line chart showing signups over the past 30 days tells a story that a raw number can't. A bar chart showing revenue by month gives you trends at a glance.

Libraries like Chart.js or Recharts make charts easy to add. The AI can wire them up quickly.

Content moderation.

If your app has user-generated content (posts, comments, reviews, images), you need a way to review and remove inappropriate content. This can be as simple as a "reported content" queue that shows items users flagged, with approve/remove buttons.

Tell the AI

"Build an admin dashboard for this app. Only users with the 'admin' role can access it. Add these pages: 1) Overview page with stats cards showing total users, new users this week, monthly revenue, and active subscriptions. Include a line chart for signups over the last 30 days and a bar chart for monthly revenue. 2) Users page with a searchable, sortable table showing all users (name, email, role, plan, signup date). Add the ability to change a user's role and suspend/unsuspend accounts. 3) Content page showing all posts with edit and delete capabilities. Add a 'reported' filter to see flagged content first."

Part 6: Making It Production-Ready

Chapter 15: Security Essentials (The Big 5)

Security is a deep field. People spend entire careers on it. But you don't need to be a security expert. You just need to get the Big 5 right. These cover the vast majority of what matters for a real app.

1. Hash passwords.

We covered this in Chapter 3, but it's worth repeating because it's that important. Never store passwords as plain text. Use a hashing library (bcrypt, argon2). The AI will do this by default with any decent auth library, but double-check.

2. Use environment variables for secrets.

Your API keys, database passwords, Stripe secret keys — these should NEVER be in your code. They go in a .env file that is NOT committed to Git (add .env to your .gitignore file).

Think of it this way: your code is the blueprint for a house. Anyone can see the blueprint. Your .env file is the key to the front door. Only you have it.

3. Validate all input.

Never trust anything that comes from a user. If your form asks for an email, check that it's actually an email. If it asks for a number, check that it's actually a number. If it asks for a name, check that it's not 50,000 characters of garbage.

This protects you from SQL injection — the most common database attack. It's like this: imagine you have a suggestion box at a restaurant. Normal people write suggestions. But someone writes: "Close at 5 PM; also give me all the money in the register." If your restaurant just does whatever the note says without reading it first, you're in trouble.

SQL injection works the same way. A malicious user puts database commands into a form field, hoping your app will run them. Validating input — and using an ORM instead of raw SQL queries — prevents this.

4. Use HTTPS.

HTTPS is the secure version of HTTP. It encrypts everything between the user's browser and your server. Without HTTPS, anyone on the same WiFi network can see what your users are doing.

Good news: any modern hosting platform (Vercel, Railway, Fly.io) gives you HTTPS automatically. If you're using a custom domain, you'll need an SSL certificate — but your hosting platform usually handles that too.

5. Keep dependencies updated.

Your app uses lots of libraries written by other people. Sometimes those libraries have security bugs. Updates fix those bugs. Run your package manager's update command regularly. For JavaScript, that's npm audit. For Python, that's pip audit or safety check.

CORS — keeping the doors closed.

CORS (Cross-Origin Resource Sharing) is a security rule that prevents random websites from making requests to your server. Imagine if any website could make requests to your banking API. That would be bad. CORS says: "only allow requests from MY website."

The AI will set up CORS for you, but know this: if you see a CORS error in the browser, it usually means you need to add your frontend's URL to your backend's allowed origins list.

Rate limiting — preventing abuse.

Rate limiting means: one person can only make X requests per minute. This prevents someone from hammering your server with millions of requests (a DDoS attack) or trying thousands of passwords (a brute force attack).

A simple rule: 100 requests per minute per user for normal endpoints, 5 per minute for login attempts.

Tell the AI

"Review this app for security issues. Specifically check: 1) Are passwords being hashed with bcrypt or argon2? 2) Are all secrets (API keys, database URLs) in environment variables and not hardcoded? 3) Is user input being validated on every endpoint? 4) Is CORS configured to only allow my frontend domain? 5) Is there rate limiting on login and signup endpoints? 6) Are there any raw SQL queries that could be vulnerable to SQL injection? Fix any issues you find."

Chapter 16: Error Handling

Things will go wrong. The database will be temporarily unreachable. A user will submit a form with missing data. Stripe will be down for 30 seconds. An image upload will fail because the file is too big.

The question isn't whether things go wrong. It's how your app behaves when they do.

User-facing errors: be friendly, not cryptic.

When something goes wrong, the user should see a clear, helpful message. Not "Error 500: Internal Server Exception." Not a blank white page. Not a wall of red text.

Good error messages:

The pattern is simple: tell them what happened, and tell them what to do about it.

Logging: keeping a diary.

When something goes wrong, you need to know about it — even if the user just sees a friendly message. That's what logging is.

Your app writes notes to a log file (or a logging service) every time something interesting happens. Not just errors — important events too. "User 42 signed up." "Payment of $29 processed." "Image upload failed: file too large."

Think of it as keeping a diary for your app. When something goes wrong, you read the diary to figure out what happened.

Error tracking: knowing about problems before users complain.

Logging is great, but who reads log files all day? Nobody. That's where error tracking services come in.

Sentry is the most popular. It automatically catches errors in your app and sends you a notification. It groups similar errors together, shows you exactly which line of code caused the problem, and tells you how many users are affected.

It's like having a smoke detector for your app. You don't stand in every room sniffing for smoke — the detector alerts you.

Error boundaries: one room on fire, rest of house fine.

In a real app, one feature crashing shouldn't take down the whole app. If the chat widget breaks, the rest of the page should still work. If the search bar errors out, the user should still see the page content.

This is called an error boundary. It wraps a section of your app and says: "If anything inside this section crashes, show a fallback message instead of breaking the entire page."

Think of it like fire doors in a building. If a fire starts in one room, the fire doors keep it from spreading. The rest of the building is fine.

Tell the AI

"Add proper error handling to this app. 1) Create a consistent error response format for all API endpoints — every error should return a JSON object with a message, status code, and error type. 2) Add user-friendly error messages for all forms — validation errors should appear next to the relevant field. 3) Add a global error boundary component that catches UI crashes and shows a 'Something went wrong' message with a retry button. 4) Set up structured logging that records: timestamp, error level (info, warn, error), message, and relevant context. 5) Add Sentry integration for automatic error tracking in production."

Chapter 17: Deploying for Real

You deployed your toy app. Maybe you put it on Vercel or Railway. It worked. Someone could visit the URL and see it.

But deploying a real app is different. A real deployment means it stays up, it's secure, and you can update it without breaking things.

Environment variables in production.

Your .env file works locally. In production, you set environment variables through your hosting platform's dashboard. Every hosting platform has a settings page where you paste in your keys. The code reads them the same way — it doesn't know or care whether they come from a .env file or a hosting platform setting.

Never upload your .env file to production. Set each variable individually through the dashboard.

PostgreSQL in production (not SQLite).

If you've been using SQLite for development, you MUST switch to PostgreSQL for production. SQLite can't handle multiple users accessing the database simultaneously. Every hosting platform offers managed PostgreSQL:

Set up a production database and put its connection string in your production environment variables.

Custom domain + SSL.

Your app is running at something like my-app-abc123.vercel.app. That's fine for testing. For a real product, you need your own domain (myapp.com).

Steps:

  1. Buy a domain (Namecheap, Google Domains, Cloudflare)
  2. Point it to your hosting platform (they'll tell you what DNS settings to use)
  3. Enable SSL (HTTPS) — most platforms do this automatically

This takes about 15 minutes and costs $10–15/year for the domain.

CI/CD: auto-deploy when you push.

CI/CD stands for Continuous Integration / Continuous Deployment. It's a fancy name for a simple idea: every time you push code to GitHub, your app automatically deploys the new version.

Think of it like a conveyor belt in a factory. You put something on the belt (push code to GitHub), and it automatically goes through quality checks (tests run) and ends up packaged and shipped (deployed to production).

Most platforms (Vercel, Railway, Fly.io) do this automatically when you connect your GitHub repo. Push code, wait 60 seconds, and the new version is live.

Staging environment: test before it's real.

A staging environment is a copy of your production app that only you can see. It has its own database, its own URL, its own environment variables. It's identical to production — but it's not public.

Before you deploy a big change to production, you deploy it to staging first. Test it. Make sure it works. Then deploy to production with confidence.

Think of it as a dress rehearsal before opening night. Same stage, same costumes, same script — but no audience yet.

Database backups.

Your database is the most important part of your entire app. If your code disappears, the AI can help you rewrite it. If your database disappears, your users' data is gone forever.

Set up automated backups. Most managed database providers (Supabase, Neon, Railway) include automatic daily backups. Verify that they're turned on. Some let you do point-in-time recovery — meaning you can restore your database to exactly how it was at 3:47 PM last Tuesday. That's worth paying for.

The deployment checklist.

Before you launch, walk through this:

Tell the AI

"Help me prepare this app for production deployment on [Vercel / Railway / Fly.io]. Set up: 1) A production-ready configuration with environment variables for all secrets. 2) A Dockerfile or deployment config file appropriate for the platform. 3) Database migration commands that run on deploy. 4) A health check endpoint at /api/health. 5) Production logging configuration. 6) A staging environment configuration. Give me a step-by-step deployment guide specific to [your platform]."

Print out that checklist. Go through it item by item. If anything is unchecked, ask the AI to help you fix it before you launch.

That's the first half. You now know how to add authentication, payments, real database design, file uploads, emails, search, admin dashboards, security, error handling, and production deployment to your app.

In Part 2 of this guide, we'll cover: real-time features (WebSockets, live updates), background jobs, testing, performance optimization, mobile considerations, analytics, and scaling — plus a complete walkthrough of building a real SaaS app from scratch.

You already know more than most people who call themselves "vibe coders." The difference between a toy and a product is just these layers. And now you know what they are.

Keep building.

Part 7: Beyond Web Apps — Other Platforms

Chapter 18: Chrome Extensions

Your web app is a restaurant. People have to come to you. A Chrome extension is a delivery service — it brings your product to where users already are.

Chrome extensions are small programs that live inside the Chrome browser. You know that little row of icons in the top-right corner of Chrome? Those are extensions. Ad blockers, password managers, dark mode toggles — all extensions.

Here's the cool part: Chrome extensions are built with the same HTML, CSS, and JavaScript you already know. If you can build a web app, you can build a Chrome extension.

The anatomy of a Chrome extension:

Every extension has a few pieces. Think of it like a small team, each member with a job.

Chrome Extension ├── manifest.json ......... ID card (tells Chrome who you are) ├── popup.html ............ Small window when you click the icon ├── content.js ............ Code that runs ON web pages └── background.js ......... Behind-the-scenes worker

manifest.json is the ID card. It tells Chrome your extension's name, version, what permissions it needs, and what files to load. Every extension has one.

popup is the little window that appears when someone clicks your extension's icon. It's just a tiny web page — HTML, CSS, and a bit of JavaScript.

content script is code that runs on other people's websites. This is how ad blockers work — they inject code into every page you visit and hide the ads. Your content script can read page content, change how things look, or add buttons.

background script is the behind-the-scenes worker. It listens for events, manages state, and coordinates everything. It runs even when the popup is closed.

What can you build?

As a vibe coder, you can build surprisingly useful extensions:

Tell the AI

"Build me a Chrome extension that [does X]. Use Manifest V3. Create the manifest.json, a popup with a simple UI, and a content script that [interacts with web pages how]. Keep it minimal — just the core feature. Include clear comments explaining each file."

Publishing your extension:

Getting your extension into the Chrome Web Store is straightforward.

  1. Developer account — Sign up at the Chrome Web Store Developer Dashboard. It costs $5. One time. That's it.
  2. Zip your files — Put all your extension files into a zip file.
  3. Upload — Go to the dashboard, click "New Item," upload the zip.
  4. Listing — Add a description, screenshots, and an icon. Just like an app store listing.
  5. Review — Google reviews it. Takes 1–3 days usually. They check for malware and policy violations.

Once it's live, updating is easy. Change your code, bump the version number in manifest.json, upload a new zip. Users get the update automatically.

Tell the AI

"Help me prepare my Chrome extension for the Chrome Web Store. I need: a 128x128 icon, a store description, a privacy policy (my extension does/doesn't collect user data), and instructions for creating the zip file. Also bump my manifest.json version to [number]."

Chapter 19: Mobile Apps (App Store and Google Play)

Here's a secret that would have saved a lot of people a lot of money: you do NOT need to learn Swift or Kotlin to put your app on phones.

There are three paths. Each has trade-offs.

Path 1: PWA (Progressive Web App)

Think of this like giving someone your restaurant's website and saying "bookmark this on your home screen." A PWA is your existing web app with a few upgrades that let it install on a phone like a real app.

You add a small file called a "service worker" (it caches your app so it works offline) and a "manifest" file (it tells the phone your app's name and icon). That's basically it.

Tell the AI

"Convert my web app into a PWA. Add a service worker for offline caching, a web app manifest with my app name '[name]' and colors, and an install prompt. Make sure it works when added to the home screen on both iPhone and Android."

Path 2: React Native / Expo

This is like opening a restaurant location inside a shopping mall. You get the foot traffic, the credibility, and the real estate — but you follow their rules.

React Native lets you write one codebase that runs on both iPhone and Android. Expo is a toolkit that makes React Native much easier. You write code that looks a lot like web development, and it produces real native apps.

Tell the AI

"Build a mobile app using Expo and React Native for my [app idea]. It should have these screens: [list screens]. Use Expo Router for navigation. Keep it simple — functional components, basic styling. Include instructions for running it on my phone with Expo Go."

Path 3: Capacitor

This is like taking your food truck and turning it into a permanent kiosk. You already have a working web app. Capacitor wraps it in a native shell so you can put it in the app stores.

Tell the AI

"Help me wrap my existing web app with Capacitor so I can submit it to the App Store and Google Play. Walk me through the setup, configuration, and build process step by step."

When to use each:

Situation Use
Just want it on phones, no budget PWA
Need app store presence, building from scratch React Native / Expo
Already have a web app, want store listing Capacitor

App Store traps to know about:

Chapter 20: Desktop Apps

Most people don't need a desktop app. Web apps work great for almost everything.

But sometimes you do. Maybe your app needs to work offline. Maybe it accesses local files. Maybe your users expect a desktop experience — think design tools, code editors, or music software.

Here's the twist: you already know how to build one.

Electron — The Web Developer's Shortcut

VS Code? Built with web tech. Slack? Web tech. Discord? Web tech. Figma desktop? Web tech.

Electron takes your HTML, CSS, and JavaScript and wraps them in a desktop window. Your web app becomes a Mac app, a Windows app, and a Linux app. Same code.

The trade-off: Electron apps are big. Like, 100MB+ big. Because each one ships its own copy of the Chrome browser inside it. Users don't love that. But it works, and it's the fastest path from web app to desktop app.

Tauri — The Lighter Alternative

Tauri does the same thing as Electron but uses the computer's built-in browser engine instead of shipping Chrome. Result: apps are tiny (under 10MB) and faster. The trade-off is it's newer and has a smaller community.

How people get your desktop app:

Two options:

  1. Direct download — Put a download link on your website. Users download and install it. Simple. You handle updates yourself.
  2. App stores — Mac App Store or Microsoft Store. More visibility, automatic updates, but Apple/Microsoft take a cut and review your app.
Tell the AI

"Convert my web app into a desktop app using Electron. Set up the project with electron-builder for creating installers for Mac and Windows. Include auto-update functionality. Keep the setup minimal — just wrap my existing web app."

For most vibe coders, if your app works great in the browser, keep it there. Desktop apps add complexity. But if your users need offline access or deep system integration, now you know the path.

Part 8: Launch — Getting Your First Users

Chapter 21: Landing Pages That Convert

Before anyone uses your app, they see a page. One page. And they decide in about 5 seconds whether to stay or leave.

That page is your landing page. It's not your app. It's the advertisement for your app. Think of it as the front window of a store. People glance in, and either walk in or walk past.

The anatomy of a landing page that works:

┌──────────────────────────────┐ │ HEADLINE (biggest problem) │ │ Subheadline (your solution) │ │ [Call to Action Button] │ ├──────────────────────────────┤ │ Problem: "You know how..." │ ├──────────────────────────────┤ │ Solution: "We fix that by" │ ├──────────────────────────────┤ │ How it works (3 steps) │ ├──────────────────────────────┤ │ Social proof (testimonials) │ ├──────────────────────────────┤ │ Pricing │ ├──────────────────────────────┤ │ FAQ │ ├──────────────────────────────┤ │ Final CTA (same button) │ └──────────────────────────────┘
Tell the AI

"Build me a landing page for my app '[name].' The app [does what] for [who]. Include: a headline focused on the main benefit, a problem section, solution section with 3-step 'how it works,' a testimonials section (use placeholder text), pricing, FAQ with 5 common questions, and a final call-to-action. Make it clean, modern, and mobile-friendly. Use [color scheme]."

SEO — How Google finds you

SEO stands for Search Engine Optimization. It's just: making Google understand what your page is about so it shows up when people search for related things.

Think of Google as a librarian. Your page is a book. SEO is making sure the librarian knows the title, the topic, and where to shelve it.

The basics:

Open Graph tags — How your link looks on social media

When someone shares your link on Twitter or LinkedIn, those tags control what image, title, and description appear. Without them, shared links look ugly and get fewer clicks.

Tell the AI

"Add SEO and Open Graph meta tags to my landing page. The page is about [topic]. Target keyword is '[keyword].' Create a sitemap.xml and robots.txt. Also add Open Graph tags so the page looks good when shared on Twitter and LinkedIn — include a social sharing image placeholder."

Chapter 22: Email Marketing With AI

Social media followers aren't yours. Instagram could change its algorithm tomorrow and nobody sees your posts. But an email list? That's yours. Nobody can take it away.

Step 1: Build your list.

Add a signup form to your landing page or app. Offer something free in exchange for their email — a guide, a template, a free trial. This is called a "lead magnet." It's bait. Good bait.

Step 2: Pick a tool.

Tool Best For Free Tier
Mailchimp Beginners 500 contacts
ConvertKit Creators 1,000 contacts
Resend Developers 3,000 emails/month
Loops SaaS products 1,000 contacts

Start with whatever has a free tier that fits your needs. You can switch later.

Step 3: Welcome sequence.

When someone signs up, don't just say "thanks." Send them a series of 3-5 emails over the next week. This is called a "drip campaign" — like a slow drip of water instead of a firehose.

A simple welcome sequence:

  1. Day 0 — Welcome! Here's what to expect.
  2. Day 1 — Here's the thing you promised (lead magnet).
  3. Day 3 — A quick tip about [your topic].
  4. Day 5 — How other people use [your product].
  5. Day 7 — Ready to try the full thing? (CTA)
Tell the AI

"Write a 5-email welcome sequence for my app '[name].' The app helps [who] do [what]. Email 1: welcome and what to expect. Email 2: deliver the free [lead magnet]. Email 3: a useful tip about [topic]. Email 4: a customer story or use case. Email 5: soft pitch to try the paid version. Keep each email under 200 words, friendly tone, one clear CTA per email."

Tell the AI

"Write a re-engagement email for users who signed up for my app but haven't logged in for 2 weeks. Tone: friendly, not pushy. Remind them what they're missing and offer to help if they're stuck."

Tell the AI

"Write a product update email announcing [new feature]. Structure: what changed, why it matters to them, how to use it. Keep it under 150 words. Casual tone."

Tell the AI

"Write a weekly newsletter template for my [industry/topic]. Include sections for: one main insight, one tip, one resource recommendation, and one update about my product. Friendly and short."

Chapter 23: Social Media and Content With AI

Here's the content creation cheat code: write ONE thing, then slice it into many things.

Write one blog post. Turn the key points into 5 tweets. Summarize it for a LinkedIn post. Pull out the best tip for an Instagram caption. Rewrite the intro as a newsletter opener.

One piece of content. Five platforms. This is called "repurposing," and AI makes it almost effortless.

AI for writing

Blog posts, Twitter threads, LinkedIn articles, product announcements — AI can draft all of them. You add the ideas and personality. AI handles the structure and first draft.

Tell the AI

"Write a blog post about [topic] for my audience of [who]. Keep it under 800 words. Use simple language, short paragraphs, and include practical tips. End with a soft mention of my product [name] as a solution."

Tell the AI

"Take this blog post and turn it into: 5 standalone tweets, 1 LinkedIn post (under 200 words), and 1 newsletter intro paragraph. Keep each piece self-contained — someone should get value without reading the original post."

AI for images

You don't need a graphic designer for every social media post.

Tell the AI

"Create a content calendar for the next 4 weeks for my [product/brand]. I post on Twitter (daily), LinkedIn (3x/week), and my blog (weekly). Theme this month: [topic]. Give me specific post ideas with titles/hooks for each slot. Include which content can be repurposed from which."

One session, one month of content. Spend a couple of hours with AI on a Sunday. Map out the whole month. Draft everything. Schedule it with a tool like Buffer or Typefully. Then get back to building.

Part 9: Run — Operating Your Business With AI

Chapter 24: Customer Support With AI

Your first users will have questions. Some obvious. Some confusing. Some will find bugs you never imagined.

This is good. It means people are using your product.

Step 1: FAQ page.

Before you build anything fancy, write an FAQ page. Take every question anyone has ever asked you about your product, and answer it. AI is great at this.

Tell the AI

"Write an FAQ page for my app '[name].' The app [does what] for [who]. Include 15 common questions covering: getting started, pricing, account management, troubleshooting, and data/privacy. Write clear, short answers. Friendly tone."

Step 2: Chatbot.

A chatbot is a small chat window on your website that answers questions automatically. Think of it as a really patient employee who works 24/7 and never gets tired.

Options:

Tell the AI

"Build me a simple AI-powered support chatbot for my website. It should use these FAQ answers as its knowledge base: [paste your FAQ]. When it doesn't know an answer, it should offer to email the question to me at [your email]. Use a clean chat widget UI."

Step 3: Email support templates.

When people email you directly, AI helps you respond fast and consistently.

Tell the AI

"Write email response templates for these common support situations for my app: 1) User can't log in, 2) User wants a refund, 3) User reports a bug, 4) User requests a feature, 5) User asks about pricing. Keep each under 100 words. Professional but warm."

Step 4: Knowledge base.

As you grow, upgrade your FAQ into a full help center. Organized by category. Searchable. With screenshots and step-by-step guides.

Tell the AI

"Create a help center structure for my app '[name].' Organize articles into categories: Getting Started, Account & Billing, Features, Troubleshooting, and API/Integrations. List 5 article titles per category. Then write the first article in full: '[article title].'"

Chapter 25: Operations and Automation

Running a business has a lot of repetitive tasks. Sending invoices. Writing weekly reports. Cleaning up data. Following up with leads. Drafting contracts.

AI eats repetitive tasks for breakfast.

What AI can automate for you

Tell the AI

"Generate a professional invoice. Client: [name], Company: [company]. Services: [list services with hours and rates]. Payment terms: Net 30. Include my business name [name] and address [address]. Format it cleanly."

Tell the AI

"Write a weekly status report for my startup. This week: [list what happened — new users, features shipped, bugs fixed, revenue]. Format it with sections: Highlights, Metrics, Next Week, Blockers. Keep it under 300 words."

Connecting tools with Zapier/Make.com

Zapier and Make.com are like universal translators between apps. "When someone fills out my form, add them to my email list and send them a welcome message and create a task in my project board." No code needed.

Think of them as dominoes. You set up a chain. When the first one falls (a trigger happens), everything else follows automatically.

Tell the AI

"Help me plan Zapier automations for my business. I use [list your tools: Stripe, Gmail, Notion, etc.]. What are the most useful automations I can set up? Give me the trigger and action for each one."

Chapter 26: Analytics and Monitoring

"Is anyone using my app?" is a question you'll ask every single day. Analytics answers it.

Analytics is just counting. How many people visited. How many signed up. How many came back. Which features they use. Where they leave.

Think of it like a restaurant owner watching the floor. How many people walk in? How many sit down? How many order? How many come back next week?

Tools

Tool Best For Privacy
Plausible Simple, privacy-friendly No cookies needed
PostHog Product analytics, feature tracking Self-hostable
Google Analytics Free, powerful, complex Uses cookies

Start with Plausible if you care about simplicity and privacy. Start with Google Analytics if you want free and powerful.

Tell the AI

"Add Plausible analytics to my web app. Walk me through setting up the account, adding the script tag, and setting up custom events for: user signup, feature usage ([list features]), and payment completion."

Uptime monitoring

Your app will go down. It just will. The question is: do you find out from a monitoring tool or from an angry user?

UptimeRobot is free and checks your site every 5 minutes. If it goes down, you get a text or email. Set this up on day one.

The daily dashboard

Every morning, check three things:

  1. Is the app up? (UptimeRobot)
  2. Are people using it? (Analytics)
  3. Are there errors? (Error logs)
Tell the AI

"Help me set up a simple monitoring dashboard for my app. I want to track: uptime (suggest a free tool), daily active users, new signups this week, errors in the last 24 hours, and current monthly revenue. Give me a checklist of what to set up and how."

Tell the AI

"Here are my app's metrics for the last month: [paste data]. Analyze the trends. What's going well? What's concerning? What should I focus on next week? Give me 3 actionable recommendations."

Part 10: Build a Business — From Product to Company

Chapter 27: Market Research With AI

The biggest mistake you can make is building something nobody wants. It happens all the time. Someone spends six months building the perfect app, launches it, and... crickets.

Don't be that person. Validate before you code.

Step 1: Is anyone actually looking for this?

Tell the AI

"I want to build [app idea]. Help me validate this. Search for existing competitors. What are people complaining about in this space? Are there Reddit threads, Twitter posts, or forum discussions where people ask for something like this? What gaps exist that I could fill?"

Step 2: Competitive analysis.

Find out who else does what you want to do. Not to copy them — to find the gaps.

Tell the AI

"Do a competitive analysis for my app idea: [description]. Find 5-10 competitors. For each one, list: what they do well, what users complain about (check review sites, Reddit, Twitter), their pricing, and what's missing. Then tell me: where's my opportunity?"

Step 3: TAM/SAM/SOM — How big is the opportunity?

These are investor buzzwords, but the concept is simple. Think of pizza.

If your TAM is "all small businesses" but your SOM is "freelance designers in the US who use Figma," that's fine. Start specific.

Step 4: Talk to real people.

This is the step everyone skips, and it's the most important one. Talk to 10 people who would use your app. Not your friends. Not your mom. People who have the problem you're solving.

Tell the AI

"Write 10 customer interview questions for my app idea: [description]. The target user is [who]. Questions should uncover: how they currently solve this problem, how painful it is, what they've tried, how much they'd pay for a solution, and what features matter most. Keep questions open-ended, not leading."

Tell the AI

"Here are the notes from my 10 customer interviews: [paste notes]. Analyze the responses. What patterns do you see? What do people care about most? What surprised you? Should I proceed with this idea, pivot, or drop it? Be honest."

Chapter 28: Finding Co-Founders

Do you need a co-founder? Not always. Plenty of successful companies were built by one person. Plenty of others were built by two or three.

The question is: do you have a skill gap that's holding you back?

If you're a vibe coder who can build the product but can't sell it, you might need a co-founder who's great at sales and marketing. If you can sell anything but can't build, you need a technical co-founder (but with AI, this matters less than it used to).

What to look for

Where to find co-founders

Tell the AI

"Write a co-founder search post for [platform: Indie Hackers / Twitter / LinkedIn]. I'm building [product description]. I'm [your skills]. I'm looking for someone who [skills you need]. Include what I bring to the table, what the opportunity looks like, and what I'm looking for in a partner. Keep it authentic, not corporate."

The co-founder agreement

Before you write a single line of code together, agree on the terms. In writing.

The most important concept: vesting with a cliff.

Here's the analogy. Imagine you and your co-founder split the company 50/50 on day one. Two months later, they quit. They still own 50% of a company you're building alone. That's a disaster.

Vesting fixes this. Instead of giving all the equity upfront, it's earned over time. The standard is 4-year vesting with a 1-year cliff.

This protects everyone.

Tell the AI

"Draft a simple co-founder agreement outline for a 50/50 partnership. Include: equity split, 4-year vesting with 1-year cliff, roles and responsibilities, decision-making process, what happens if someone leaves, IP assignment. Note: this is a starting point — we'll have a lawyer review it."

Always get a lawyer to review. AI drafts. Lawyers protect.

Chapter 29: Pitching Investors

Let's be clear: not every product needs investors. Many incredible businesses were built without outside money. Basecamp, Mailchimp (for most of its life), Craigslist — all bootstrapped.

Taking investor money means giving up some control and ownership. It's not free money. It's a trade.

When you DO need funding

Funding stages — the ladder

Stage Amount What You Need
Bootstrapping Your own money Just an idea
Pre-seed $10K–$250K Idea + prototype
Seed $250K–$2M Product + early users
Series A $2M–$15M Real traction + growth

At each stage, you give up a piece of your company. Pre-seed might take 5–10%. Seed might take 15–25%. Each round dilutes your ownership.

What investors look for

  1. Big market — Is the opportunity large enough?
  2. Strong team — Can these people actually pull it off?
  3. Traction — Are real people using it? Paying for it?
  4. Unique insight — Why will this team win where others haven't?

The 10-slide pitch deck

Almost every pitch deck follows this structure. Each slide is one idea.

  1. Title — Company name, one-line description, your name
  2. Problem — What sucks right now? Make them feel the pain.
  3. Solution — How you fix it. Demo screenshot.
  4. Market — How big is the opportunity? (TAM/SAM/SOM)
  5. Product — How it works. Screenshots or quick demo.
  6. Traction — Users, revenue, growth rate. Any numbers.
  7. Business model — How you make money.
  8. Competition — Who else is doing this? Why are you different?
  9. Team — Who are you? Why are you the right people?
  10. Ask — How much money, what you'll use it for.
Tell the AI

"Help me build a pitch deck for my startup. Company: [name]. We do: [what]. For: [who]. Problem: [what problem]. Our traction: [numbers]. We're raising: [$amount] for: [what you'll spend it on]. Create the content for all 10 slides. Keep each slide to 3-5 bullet points max. Write a script for what I'd say on each slide (1 minute per slide)."

Tell the AI

"Write a 30-second elevator pitch for my startup [name]. We help [who] do [what] by [how]. Our key metric is [number]. Make it conversational — like I'm explaining it to someone at a party."

Tell the AI

"Create financial projections for my startup for the next 3 years. Current MRR: $[amount]. Growth rate: [X]% month over month. Main costs: [list]. Show monthly for year 1, quarterly for years 2–3. Include: revenue, costs, net profit/loss, and cumulative cash position. Present as a simple table."

Chapter 30: Runway, Budgets, and Making Money Last

Runway is your fuel gauge.

If your car has half a tank and you burn a quarter tank per trip, you have two trips left. Runway works the same way.

$30,000 in the bank. $5,000/month in expenses. That's 6 months of runway.

When you hit 3 months of runway, that's your warning light. Time to either make more money or raise more money.

How to calculate

Runway (months) = Money in bank / Monthly expenses

That's it. Update this number every month.

Typical expenses breakdown

Expense Range
Hosting (Vercel, Railway, etc.) $0–100/month
Domain name $10–15/year
Tools (email, analytics, etc.) $0–200/month
App store fees $0–99/year
Marketing $0–1,000/month
Contractors (design, etc.) $0–3,000/month
Legal (incorporation, etc.) $500–2,000 one-time

Revenue models — how apps make money

Tell the AI

"Help me plan my startup budget. I have $[amount] to start. My app is [description]. List every expense I should expect in the first 6 months, with realistic cost ranges. Calculate my monthly burn rate and runway. Suggest where I can save money without hurting the product."

Tell the AI

"Help me set pricing for my SaaS app. It does [what] for [who]. Competitors charge [prices]. I want a free tier and two paid tiers. Suggest pricing, what features go in each tier, and explain your reasoning. Consider: what would make free users upgrade?"

Chapter 31: Legal Basics

This chapter isn't legal advice. It's a map so you know what exists and what to ask a real lawyer about.

Documents every app needs

  1. Terms of Service (ToS) — The rules for using your app. What users can and can't do. What happens if things go wrong. Your liability limits.
  2. Privacy Policy — What data you collect, how you use it, who you share it with. Required by law in most countries. Required by app stores. Required by ad platforms.
  3. Cookie Policy — If your website uses cookies (most do), European law (GDPR) requires you to tell users about it.
Tell the AI

"Draft a Terms of Service for my app '[name].' The app [does what]. Users can [list user actions]. We store [what data]. Include sections on: acceptable use, intellectual property, disclaimers, limitation of liability, termination, and governing law ([your state/country]). Note: I'll have a lawyer review this before publishing."

Tell the AI

"Draft a Privacy Policy for my app '[name].' We collect: [list data — email, name, usage data, etc.]. We use [analytics tool], [payment processor], [email service]. We [do/don't] sell data. We [do/don't] use cookies. Include GDPR and CCPA sections. Note: I'll have a lawyer review this."

AI drafts these in minutes. A lawyer reviews for $200–500. Don't skip the lawyer.

Incorporating your business

Two main options in the US:

If you're a solo founder just starting out, LLC. If you're raising money, C-Corp in Delaware.

Stripe Atlas — The easy button

Stripe Atlas costs $500 and does almost everything: incorporates your C-Corp in Delaware, gets you an EIN (your business's social security number), sets up a bank account, and provides legal document templates. It's the "I don't want to deal with this" option, and it's worth it.

Tell the AI

"I'm starting a business for my app. Help me decide: LLC or C-Corp? My situation: [describe — solo/co-founder, raising money or not, revenue level, location]. List the pros and cons of each for my specific case. Include estimated costs and steps to incorporate."

Part 11: Grow — Scaling What Works

Chapter 32: Marketing Strategy With AI

AI is the best marketing co-pilot you'll ever have. It doesn't get tired. It doesn't have creative blocks. It's available at 2 AM when you suddenly have an idea.

Competitor research

Tell the AI

"Analyze the marketing strategy of [competitor name/URL]. What channels do they use? What's their messaging? What keywords do they target? What can I learn from them? Where are they weak that I could be strong?"

Ad copywriting

Writing ads is hard. You have 3 seconds and a few words to grab attention. AI can generate dozens of variations in minutes.

Tell the AI

"Write 10 Facebook ad variations for my app '[name].' Target audience: [who]. Main benefit: [what]. Include: headline (under 40 characters), primary text (under 125 characters), and a description (under 30 characters). Mix styles: some with questions, some with stats, some with urgency, some with social proof."

Tell the AI

"Write 10 Google Search ad variations for my app. Target keyword: '[keyword].' Include headline 1 (30 chars), headline 2 (30 chars), headline 3 (30 chars), and two descriptions (90 chars each). Focus on the benefit, not the feature."

A/B testing ideas

A/B testing means showing two versions of something to different people and seeing which one performs better. Version A vs Version B.

Tell the AI

"I want to improve my landing page conversion rate. Currently [X]% of visitors sign up. Suggest 10 A/B tests I could run. For each test, describe: what to change, why it might help, and how to measure the result. Prioritize by expected impact."

Pricing experiments

Tell the AI

"Help me experiment with pricing for my app. Current price: $[X]/month. I have [Y] paying users. Suggest 3 pricing experiments I could run: one testing higher prices, one testing different tier structures, one testing annual discounts. For each, explain the hypothesis and how to measure results."

Chapter 33: The Lifecycle of a Real App

Building the app is chapter one. Running it is the whole book.

Bug reports

Users will find bugs. That's fine. The process is always the same:

  1. Reproduce — Can you make the bug happen on your end?
  2. Fix — Find the broken code and fix it.
  3. Test — Make sure the fix works and didn't break something else.
  4. Deploy — Push the fix to production.
Tell the AI

"A user reported this bug: '[paste bug report].' Help me reproduce it, find the likely cause in my code, and suggest a fix. Also suggest a test to make sure it doesn't happen again."

Feature requests

Users will ask for features. You can't build everything. Prioritize by asking:

Technical debt

Think of technical debt like dishes piling up in the sink. You can ignore them for a day. Maybe two. But eventually, the kitchen becomes unusable. You have to stop cooking and just wash dishes for a while.

In code, technical debt is shortcuts you took. Messy code. Duplicate logic. Things that work but aren't organized well. Every app accumulates it.

The rule: if the mess is slowing you down, clean it up. If it's not, keep shipping.

When your app outgrows vibe coding

This happens. It's a good problem. Your app gets complex enough that AI-assisted vibe coding isn't enough. You need a real developer or a team.

Signs it's time:

Building a team — what roles come first

  1. First hire: someone who covers your weakness. If you're technical, hire marketing. If you're marketing, hire technical.
  2. Customer support — when you can't answer every email yourself.
  3. A real developer — when the codebase needs someone with deep experience.

The journey continues.

You started by telling an AI to build you a button. Now you're running a product, serving users, making money, and thinking about your next hire.

That's not a small thing. Most people never ship anything. You did.

The tools will keep getting better. AI will keep getting smarter. The gap between "I have an idea" and "I have a product" will keep shrinking.

But the fundamentals don't change. Solve a real problem. Talk to your users. Keep shipping. Stay curious.

You've got this.

Appendices

Appendix A: The Real Product Checklist

Build

Ship

Launch

Business

Run

Grow

Appendix B: “Tell the AI” Prompt Collection

Building Features

Tell the AI

“Build me a Chrome extension that [does X]. Use Manifest V3. Create the manifest.json, a popup with a simple UI, and a content script that [interacts with web pages how]. Keep it minimal — just the core feature. Include clear comments explaining each file.”

Tell the AI

“Convert my web app into a PWA. Add a service worker for offline caching, a web app manifest with my app name ‘[name]’ and colors, and an install prompt. Make sure it works when added to the home screen on both iPhone and Android.”

Tell the AI

“Build a mobile app using Expo and React Native for my [app idea]. It should have these screens: [list screens]. Use Expo Router for navigation. Keep it simple — functional components, basic styling. Include instructions for running it on my phone with Expo Go.”

Tell the AI

“Help me wrap my existing web app with Capacitor so I can submit it to the App Store and Google Play. Walk me through the setup, configuration, and build process step by step.”

Tell the AI

“Convert my web app into a desktop app using Electron. Set up the project with electron-builder for creating installers for Mac and Windows. Include auto-update functionality. Keep the setup minimal — just wrap my existing web app.”

Shipping to Platforms

Tell the AI

“Help me prepare my Chrome extension for the Chrome Web Store. I need: a 128x128 icon, a store description, a privacy policy (my extension does/doesn’t collect user data), and instructions for creating the zip file. Also bump my manifest.json version to [number].”

Launching

Tell the AI

“Build me a landing page for my app ‘[name].’ The app [does what] for [who]. Include: a headline focused on the main benefit, a problem section, solution section with 3-step ‘how it works,’ a testimonials section (use placeholder text), pricing, FAQ with 5 common questions, and a final call-to-action. Make it clean, modern, and mobile-friendly. Use [color scheme].”

Tell the AI

“Add SEO and Open Graph meta tags to my landing page. The page is about [topic]. Target keyword is ‘[keyword].’ Create a sitemap.xml and robots.txt. Also add Open Graph tags so the page looks good when shared on Twitter and LinkedIn — include a social sharing image placeholder.”

Tell the AI

“Write a 5-email welcome sequence for my app ‘[name].’ The app helps [who] do [what]. Email 1: welcome and what to expect. Email 2: deliver the free [lead magnet]. Email 3: a useful tip about [topic]. Email 4: a customer story or use case. Email 5: soft pitch to try the paid version. Keep each email under 200 words, friendly tone, one clear CTA per email.”

Tell the AI

“Write a re-engagement email for users who signed up for my app but haven’t logged in for 2 weeks. Tone: friendly, not pushy. Remind them what they’re missing and offer to help if they’re stuck.”

Tell the AI

“Write a product update email announcing [new feature]. Structure: what changed, why it matters to them, how to use it. Keep it under 150 words. Casual tone.”

Tell the AI

“Write a weekly newsletter template for my [industry/topic]. Include sections for: one main insight, one tip, one resource recommendation, and one update about my product. Friendly and short.”

Tell the AI

“Write a blog post about [topic] for my audience of [who]. Keep it under 800 words. Use simple language, short paragraphs, and include practical tips. End with a soft mention of my product [name] as a solution.”

Tell the AI

“Take this blog post and turn it into: 5 standalone tweets, 1 LinkedIn post (under 200 words), and 1 newsletter intro paragraph. Keep each piece self-contained — someone should get value without reading the original post.”

Tell the AI

“Create a content calendar for the next 4 weeks for my [product/brand]. I post on Twitter (daily), LinkedIn (3x/week), and my blog (weekly). Theme this month: [topic]. Give me specific post ideas with titles/hooks for each slot. Include which content can be repurposed from which.”

Business & Legal

Tell the AI

“I want to build [app idea]. Help me validate this. Search for existing competitors. What are people complaining about in this space? Are there Reddit threads, Twitter posts, or forum discussions where people ask for something like this? What gaps exist that I could fill?”

Tell the AI

“Do a competitive analysis for my app idea: [description]. Find 5-10 competitors. For each one, list: what they do well, what users complain about (check review sites, Reddit, Twitter), their pricing, and what’s missing. Then tell me: where’s my opportunity?”

Tell the AI

“Write 10 customer interview questions for my app idea: [description]. The target user is [who]. Questions should uncover: how they currently solve this problem, how painful it is, what they’ve tried, how much they’d pay for a solution, and what features matter most. Keep questions open-ended, not leading.”

Tell the AI

“Here are the notes from my 10 customer interviews: [paste notes]. Analyze the responses. What patterns do you see? What do people care about most? What surprised you? Should I proceed with this idea, pivot, or drop it? Be honest.”

Tell the AI

“Write a co-founder search post for [platform: Indie Hackers / Twitter / LinkedIn]. I’m building [product description]. I’m [your skills]. I’m looking for someone who [skills you need]. Include what I bring to the table, what the opportunity looks like, and what I’m looking for in a partner. Keep it authentic, not corporate.”

Tell the AI

“Draft a simple co-founder agreement outline for a 50/50 partnership. Include: equity split, 4-year vesting with 1-year cliff, roles and responsibilities, decision-making process, what happens if someone leaves, IP assignment. Note: this is a starting point — we’ll have a lawyer review it.”

Tell the AI

“Help me build a pitch deck for my startup. Company: [name]. We do: [what]. For: [who]. Problem: [what problem]. Our traction: [numbers]. We’re raising: [$amount] for: [what you’ll spend it on]. Create the content for all 10 slides. Keep each slide to 3-5 bullet points max. Write a script for what I’d say on each slide (1 minute per slide).”

Tell the AI

“Write a 30-second elevator pitch for my startup [name]. We help [who] do [what] by [how]. Our key metric is [number]. Make it conversational — like I’m explaining it to someone at a party.”

Tell the AI

“Create financial projections for my startup for the next 3 years. Current MRR: $[amount]. Growth rate: [X]% month over month. Main costs: [list]. Show monthly for year 1, quarterly for years 2-3. Include: revenue, costs, net profit/loss, and cumulative cash position. Present as a simple table.”

Tell the AI

“Help me plan my startup budget. I have $[amount] to start. My app is [description]. List every expense I should expect in the first 6 months, with realistic cost ranges. Calculate my monthly burn rate and runway. Suggest where I can save money without hurting the product.”

Tell the AI

“Help me set pricing for my SaaS app. It does [what] for [who]. Competitors charge [prices]. I want a free tier and two paid tiers. Suggest pricing, what features go in each tier, and explain your reasoning. Consider: what would make free users upgrade?”

Tell the AI

“Draft a Terms of Service for my app ‘[name].’ The app [does what]. Users can [list user actions]. We store [what data]. Include sections on: acceptable use, intellectual property, disclaimers, limitation of liability, termination, and governing law ([your state/country]). Note: I’ll have a lawyer review this before publishing.”

Tell the AI

“Draft a Privacy Policy for my app ‘[name].’ We collect: [list data — email, name, usage data, etc.]. We use [analytics tool], [payment processor], [email service]. We [do/don’t] sell data. We [do/don’t] use cookies. Include GDPR and CCPA sections. Note: I’ll have a lawyer review this.”

Tell the AI

“I’m starting a business for my app. Help me decide: LLC or C-Corp? My situation: [describe — solo/co-founder, raising money or not, revenue level, location]. List the pros and cons of each for my specific case. Include estimated costs and steps to incorporate.”

Running Operations

Tell the AI

“Write an FAQ page for my app ‘[name].’ The app [does what] for [who]. Include 15 common questions covering: getting started, pricing, account management, troubleshooting, and data/privacy. Write clear, short answers. Friendly tone.”

Tell the AI

“Build me a simple AI-powered support chatbot for my website. It should use these FAQ answers as its knowledge base: [paste your FAQ]. When it doesn’t know an answer, it should offer to email the question to me at [your email]. Use a clean chat widget UI.”

Tell the AI

“Write email response templates for these common support situations for my app: 1) User can’t log in, 2) User wants a refund, 3) User reports a bug, 4) User requests a feature, 5) User asks about pricing. Keep each under 100 words. Professional but warm.”

Tell the AI

“Create a help center structure for my app ‘[name].’ Organize articles into categories: Getting Started, Account & Billing, Features, Troubleshooting, and API/Integrations. List 5 article titles per category. Then write the first article in full: ‘[article title].’”

Tell the AI

“Generate a professional invoice. Client: [name], Company: [company]. Services: [list services with hours and rates]. Payment terms: Net 30. Include my business name [name] and address [address]. Format it cleanly.”

Tell the AI

“Write a weekly status report for my startup. This week: [list what happened — new users, features shipped, bugs fixed, revenue]. Format it with sections: Highlights, Metrics, Next Week, Blockers. Keep it under 300 words.”

Tell the AI

“Help me plan Zapier automations for my business. I use [list your tools: Stripe, Gmail, Notion, etc.]. What are the most useful automations I can set up? Give me the trigger and action for each one.”

Tell the AI

“Add Plausible analytics to my web app. Walk me through setting up the account, adding the script tag, and setting up custom events for: user signup, feature usage ([list features]), and payment completion.”

Tell the AI

“Help me set up a simple monitoring dashboard for my app. I want to track: uptime (suggest a free tool), daily active users, new signups this week, errors in the last 24 hours, and current monthly revenue. Give me a checklist of what to set up and how.”

Tell the AI

“Here are my app’s metrics for the last month: [paste data]. Analyze the trends. What’s going well? What’s concerning? What should I focus on next week? Give me 3 actionable recommendations.”

Growing

Tell the AI

“Analyze the marketing strategy of [competitor name/URL]. What channels do they use? What’s their messaging? What keywords do they target? What can I learn from them? Where are they weak that I could be strong?”

Tell the AI

“Write 10 Facebook ad variations for my app ‘[name].’ Target audience: [who]. Main benefit: [what]. Include: headline (under 40 characters), primary text (under 125 characters), and a description (under 30 characters). Mix styles: some with questions, some with stats, some with urgency, some with social proof.”

Tell the AI

“Write 10 Google Search ad variations for my app. Target keyword: ‘[keyword].’ Include headline 1 (30 chars), headline 2 (30 chars), headline 3 (30 chars), and two descriptions (90 chars each). Focus on the benefit, not the feature.”

Tell the AI

“I want to improve my landing page conversion rate. Currently [X]% of visitors sign up. Suggest 10 A/B tests I could run. For each test, describe: what to change, why it might help, and how to measure the result. Prioritize by expected impact.”

Tell the AI

“Help me experiment with pricing for my app. Current price: $[X]/month. I have [Y] paying users. Suggest 3 pricing experiments I could run: one testing higher prices, one testing different tier structures, one testing annual discounts. For each, explain the hypothesis and how to measure results.”

Tell the AI

“A user reported this bug: ‘[paste bug report].’ Help me reproduce it, find the likely cause in my code, and suggest a fix. Also suggest a test to make sure it doesn’t happen again.”

Appendix C: Service Comparison

Authentication Services

Name Difficulty Free Tier Paid From Best For
Supabase AuthEasy50,000 MAU$25/moAlready using Supabase
Firebase AuthEasyUnlimited$0 (generous)Quick setup
ClerkVery Easy10,000 MAU$25/moBest UI components
Auth0Medium7,500 MAU$23/moEnterprise needs
NextAuth.jsMediumFree (self-host)$0Full control

Payment Services

Name Difficulty Transaction Fee Best For
StripeMedium2.9% + $0.30Most businesses
LemonSqueezyEasy5% + $0.50Digital products, handles tax
PaddleEasy5% + $0.50SaaS, handles tax globally
GumroadVery Easy10%Simple digital sales

Email Services (Transactional)

Name Difficulty Free Tier Paid From Best For
ResendEasy3,000/mo$20/moModern, developer-friendly
SendGridMedium100/day$20/moHigh volume
PostmarkEasy100/mo$15/moDeliverability
AWS SESHard62,000/mo$0.10/1000Cheapest at scale

Email Marketing

Name Difficulty Free Tier Paid From Best For
MailchimpEasy500 contacts$13/moBeginners
ConvertKitEasy1,000 contacts$29/moCreators
LoopsEasy1,000 contacts$49/moSaaS products
ButtondownEasy100 contacts$9/moNewsletters

File Storage

Name Difficulty Free Tier Paid From Best For
Supabase StorageEasy1 GB$25/moAlready using Supabase
Cloudflare R2Medium10 GB$0.015/GBCost-effective at scale
AWS S3Hard5 GB (12 months)$0.023/GBIndustry standard
UploadthingVery Easy2 GB$10/moSimple file uploads

Databases

Name Difficulty Free Tier Paid From Best For
SupabaseEasy500 MB, 2 projects$25/moFull-stack with auth
PlanetScaleMedium5 GB$39/moScaling MySQL
NeonEasy512 MB$19/moServerless Postgres
Firebase FirestoreEasy1 GBPay-as-you-goReal-time apps
MongoDB AtlasMedium512 MB$9/moDocument storage

Hosting

Name Difficulty Free Tier Paid From Best For
VercelVery EasyGenerous$20/moNext.js, frontend
NetlifyVery EasyGenerous$19/moStatic sites, Jamstack
RailwayEasy$5 trial credit$5/moBackend, databases
Fly.ioMedium3 small VMsPay-as-you-goGlobal distribution
RenderEasyStatic sites free$7/moFull-stack apps

Analytics

Name Difficulty Free Tier Paid From Best For
PlausibleVery EasyNone$9/moPrivacy-friendly
PostHogEasy1M events/mo$0 (generous)Product analytics
Google AnalyticsMediumUnlimitedFreeMaximum data
MixpanelMedium20M events/mo$20/moUser behavior

Appendix D: Startup Costs Cheat Sheet

Bootstrap Tier ($0–100/month)

For people testing an idea with minimal investment.

Item Cost Notes
Domain name$1–15/yearNamecheap, Cloudflare
Hosting (Vercel free tier)$0Free for personal projects
Database (Supabase free tier)$0500 MB, 2 projects
Auth (Supabase/Firebase)$0Free tiers are generous
Email (Gmail)$0Use personal email to start
Analytics (PostHog free)$01M events/month
Uptime monitoring$0UptimeRobot free tier
SSL certificate$0Included with most hosts
AI tools (ChatGPT free)$0Or Claude free tier
Monthly total$0–8

Lean Tier ($100–500/month)

For products with paying users, getting serious.

Item Cost Notes
Domain name$1–15/year
Hosting (Vercel Pro)$20/moMore bandwidth, features
Database (Supabase Pro)$25/mo8 GB, daily backups
Email service (Resend)$20/moTransactional emails
Email marketing (ConvertKit)$0–29/moFree up to 1,000 subs
Analytics (Plausible)$9/moOr PostHog free
AI tools (ChatGPT Plus)$20/moBetter for development
Error monitoring (Sentry)$0–26/moFree tier available
Google Workspace$7/moProfessional email
App Store fee (Apple)$8/mo$99/year
Legal (Privacy policy, ToS)$200–500 one-timeLawyer review
Monthly total$110–185Plus one-time legal

Growth Tier ($500–2,000/month)

For products scaling with a real user base.

Item Cost Notes
Domain name$1–15/year
Hosting (Vercel/Railway)$50–200/moHigher usage
Database (Supabase/PlanetScale)$50–100/moMore storage, performance
Email service$20–50/moHigher volume
Email marketing$29–100/moGrowing list
Analytics (PostHog/Mixpanel)$0–50/mo
AI tools$20–100/moMultiple tools
Error monitoring$26–50/mo
Google Workspace (team)$14–50/moMultiple seats
Customer support tool$0–50/moCrisp or similar
Paid advertising$150–500/moStart small, test
Contractors (design, etc.)$0–1,000/moAs needed
Accounting software$0–30/moWave (free) or QuickBooks
Stripe Atlas / incorporation$500 one-time
Monthly total$500–2,000Plus one-time costs

You made it. The whole guide. From “what’s a Chrome extension?” to “how do I pitch investors?”

Now close this guide and go build something. Ship it. Get users. Listen to them. Iterate. That’s the whole game.

The best product is the one that exists.