How to build an app with AI
This guide walks you through building an app with an AI assistant, from a one-paragraph idea to a published app, then through selling it and improving it from what users tell you. It works with any capable AI, including ChatGPT, Claude and Gemini. The method is the same whichever you use; what changes is how much you check the answers.
What you will build
By the end you will have a working app that runs on a phone or in a browser, a way to store its data, a place where it is published, a price and a listing, your first users, and a routine for improving it from their feedback. The example used throughout is a simple habit tracker, but the steps apply to any app of similar size: a booking tool, a calculator for your trade, a checklist app, a small game.
Expect the first working version to take a few evenings. Publishing and polishing takes longer than the code does.
AI writes the code. You still make the decisions, run the app, test it and publish it. Do not skip the testing steps; they are where most first apps fail.
Before you begin
You need the following. All of it is free to start.
| Requirement | Why |
|---|---|
| An AI assistant | ChatGPT, Claude, Gemini, or a workspace that gives you several of them. A paid tier helps because you will have long conversations with a lot of code in them. |
| A computer | Mac, Windows or Linux. You will run the app on it before it runs anywhere else. |
| A code editor | Visual Studio Code is free and is what most AI-generated instructions assume. |
| Node.js | Runs JavaScript on your computer. Most app frameworks need it. Install the LTS version from nodejs.org. |
| Git and a GitHub account | Saves versions of your code so a bad change can be undone. Free at github.com. |
| A phone (optional) | To test a mobile app on a real device. |
Create one text file called CONTEXT.md in your project folder before you start. Every decision, every screen and every "we tried X and it did not work" goes in there. You will paste it into new AI conversations so the assistant does not lose track of what you decided. This one file prevents most of the frustration people have with AI coding.
Write the brief
10 minDescribe the app in one paragraph, in plain language. Do not think about technology yet. Answer four questions: who is it for, what problem does it solve, what is the one thing it must do, and what does the person see first when they open it.
Habit Streaks is for people who want to keep one or two daily habits going. The problem: existing habit apps have too many features and lose your streak unfairly when you travel across time zones. The one thing it must do: let me tick off a habit for today and show my current streak. The first screen is a list of my habits with a tick button next to each one.
Save this in CONTEXT.md. Everything that follows is built from it.
Choose the platform
15 minThis is the first decision that is hard to undo. For a first app, build a web app unless you have a specific reason to go native.
| Option | Best for | Trade-offs | Typical framework |
|---|---|---|---|
| Web app | Almost every first app. Tools, dashboards, trackers, calculators. | Fastest to build and publish. No store review. Can be added to a phone home screen. Limited access to phone hardware. | React with Vite, or Next.js |
| Mobile app (iOS and Android) | Apps that need notifications, camera, offline use, or must be in the app stores. | Store review, developer accounts (Apple charges a yearly fee), more setup. One codebase can serve both platforms. | Expo (React Native), or Flutter |
| Browser extension | Small tools that act on web pages you visit. | Narrow but quick to build. Published through browser stores. | Plain JavaScript |
Ask the AI to argue for and against each option for your brief, then decide. Write the decision and the reason in CONTEXT.md.
Here is my app brief: [paste brief]. Should the first version be a web app or a native mobile app? Argue both sides for my specific case, then recommend one and name the framework you would use. Assume I have no coding experience.
If you have access to more than one AI, ask two of them this question. When they recommend different things, the reasons they give are usually the real trade-off for your app.
Turn the brief into a spec
30 minA spec is a short document that lists what the app does precisely enough to build it. Ask the AI to write it from your brief, then correct it. It should contain:
- A list of screens, and what is on each one
- What data the app stores (for the habit tracker: habits, and which days each was completed)
- What happens on each button
- What is deliberately not in version one
- Every assumption the AI made
Turn this brief into a one-page spec for version one: list every screen and what is on it, the data the app stores, what each button does, and what is out of scope. At the end, list every assumption you made so I can correct them. Keep version one as small as possible. Brief: [paste brief]
Read the assumptions carefully. This is where the AI decides things you did not say (for example, that the app needs user accounts, or that streaks reset at midnight UTC). Correct anything wrong, ask for a revised spec, and save the final version in CONTEXT.md.
Do not proceed with a spec you have not read. Everything built in the next steps follows it exactly, including its mistakes.
Set up your tools
30 minInstall Node.js, Git and Visual Studio Code if you have not already. Then open a terminal (on Mac: the Terminal app; on Windows: PowerShell) and check they work:
node --version npm --version git --version
Each command should print a version number. If one prints an error, paste the exact error into the AI and ask what to do; installation problems are the one area where AI answers are almost always right.
Create a folder for the app and turn it into a Git repository:
mkdir habit-streaks cd habit-streaks git init
From now on, every time something works, save a version: git add . then git commit -m "describe what works". When the AI later breaks something, you can go back.
Generate the skeleton
20 minCreate the empty app using the framework's own starter command, not code the AI types out. Starters are maintained and tested; AI-typed project files often have outdated versions.
Web app (React with Vite):
npm create vite@latest . -- --template react npm install npm run dev
Mobile app (Expo):
npx create-expo-app@latest . npx expo start
Open the address the terminal prints (for a web app, usually http://localhost:5173). You should see the framework's placeholder page. For Expo, install the Expo Go app on your phone and scan the QR code.
Now give the AI the layout of the project so it knows what exists. Ask it to explain the files:
I created a new [Vite React / Expo] project. Here is the file list: [paste the output of `ls` or the folder tree]. Explain in plain language what each file is for and which ones I will edit. Then tell me which file the first screen should go in.
Commit: git add . && git commit -m "empty app runs".
Build screen by screen
Several sessionsThis is the loop you will repeat for every screen and every feature. Doing it in small pieces is what makes AI coding work; asking for the whole app at once is what makes it fail.
- Describe one screen. Paste the spec section for that screen, and the current contents of the file it goes in.
- Ask for the code and an explanation. "Write the code for this screen, then explain what each part does in two or three sentences."
- Put the code in the file and run it. Look at it in the browser or on the phone. Click everything.
- Report back exactly what happened. If there is an error, paste it word for word. If something looks wrong, describe what you see and what you expected.
- Repeat until the screen works, then commit.
Build the habit list screen from this spec: [paste spec section]. It goes in src/App.jsx, which currently contains: [paste file]. Use plain, simple code with no extra libraries. After the code, explain what each part does.
Ask for one change at a time and say "only change what I asked for". AI assistants tend to rewrite or "improve" code you did not mention, which is how working features break.
Start with the screen the person sees first. For the habit tracker: the list of habits with a tick button. Then add habits. Then the streak count. Each is one pass through the loop.
Add data storage
1 to 2 sessionsYour app needs to remember things between opens. Use the simplest option that works, in this order:
| Option | Use when | Limits |
|---|---|---|
| On-device storage (localStorage on the web, AsyncStorage in Expo) | Data belongs to one person on one device. Most first apps. | Lost if the app is deleted. Not shared between devices. |
| Hosted database (Supabase, Firebase) | Data must survive reinstalls, sync across devices, or be shared between users. | Needs an account and a few settings. Free tiers are generous. |
Ask the AI to design the data first, then to add the storage code:
Based on the spec, what data does this app store, and in what shape? Show it as a simple example. Then add code to save it to [localStorage / Supabase] and load it when the app opens. Explain how I can check the saved data myself.
Dates and time zones cause more bugs in small apps than anything else. Ask specifically: "How does this handle a user in a different time zone, and what happens at midnight?" For the habit tracker, this is the difference between a fair streak and an angry review.
Add sign-in and payments (only if you need them)
1 to 2 sessionsMany first apps do not need either. If yours does, use a hosted service and never handle passwords or card numbers in your own code.
- Sign-in: Supabase Auth, Firebase Auth or Clerk. All handle passwords, email links and "sign in with Google/Apple" for you.
- Payments: Stripe for web apps. For mobile apps sold through the stores, Apple and Google require their own in-app purchase systems for digital goods; RevenueCat makes that manageable.
Add sign-in with [Supabase Auth] to this app. Show me exactly which settings to create in the Supabase dashboard, then the code. Do not store passwords anywhere in my code. Explain what happens if someone is not signed in.
Secret keys (API keys, database passwords) must never be inside the app's code or in Git. Ask the AI: "Which of these values are secrets, and where should they live instead?" The usual answer is an .env file that is listed in .gitignore.
Test and review
1 session, then ongoingCode that runs is not code that works. Before publishing, do three kinds of testing.
Use it like a stranger would
Open the app fresh, with no data. Add nothing and look at every screen: are the empty states sensible? Then add too much: 50 habits, a name with emoji, a very long name. Turn off the internet. Rotate the phone. Close and reopen. Write down everything odd.
Have the code reviewed by an AI, ideally a different one
An assistant reviewing its own code tends to approve it. If you can, paste the code into a different AI and ask for problems. If you only have one, start a fresh conversation so it has no memory of writing it.
Review this code as a senior developer who did not write it. List bugs, security problems and things that will break for real users, ordered by severity. For each, show the exact fix. Be critical; do not praise the code. [paste file]
Check the usual suspects
- Time zones and midnight (see step 7)
- What happens when storage is empty, full or corrupted
- Double taps: pressing a button twice quickly
- Data from the previous version of the app after an update
- On mobile: older phones, small screens, dark mode, notifications denied
Fix what you found using the loop in step 6. Commit.
Publish
Web: 1 hour · Stores: daysWeb app
Push your code to GitHub, then connect the repository to a hosting service. Vercel, Netlify and Cloudflare Pages all do this for free and rebuild the site every time you push a change.
git remote add origin https://github.com/YOUR-NAME/habit-streaks.git git push -u origin main
Then, in the hosting service's dashboard: New project, import from GitHub, choose the repository, deploy. You get a public address within minutes. Add your own domain later if you want one.
Mobile app
With Expo, the EAS Build service produces the files the stores need. You will also need an Apple Developer account (paid yearly) and a Google Play developer account (one-time fee). Store review takes from a day to a week and commonly rejects apps for missing privacy policies, crashes on launch, and screenshots that do not match the app.
Publishing checklist
Ask the AI to produce this for your specific app and platform, then work through it:
- App name, icon, and screenshots at the sizes the store requires
- A privacy policy page (required by both stores and by most hosting terms if you collect any data)
- Error reporting, so you learn about crashes before users tell you (Sentry has a free tier)
- Basic analytics, so you know whether anyone is using it
- A support email address
- For stores: the review notes, including a test account if sign-in is required
Decide how it makes money
1 hourDecide this before you write a single line of marketing, because the price shapes the message. There are four common models for a small app:
| Model | Works well when | Watch out for |
|---|---|---|
| Free, then one paid upgrade | Consumer apps where people need to feel the value first (trackers, utilities). | The upgrade must be something people want after they are attached, not a nag on day one. |
| Subscription | The app does ongoing work or stores growing data (business tools, sync, reports). | Cancellations. People must see value every month, not once. |
| One-time purchase | Simple tools with no running cost to you. | No recurring income; every month starts at zero. |
| Free | Community apps, portfolio pieces, apps you build for your own business. | Hosting and your time still cost something. |
Ask the AI to argue the options for your specific app. This is another place where a second AI's opinion is worth having, because pricing advice from a single assistant tends to be generic.
Here is my app and who it is for: [paste brief]. Compare free-with-upgrade, subscription and one-time purchase for this app. For each: who pays, what they get, a realistic price, and the biggest risk. Then recommend one and tell me what the paid part should be. Be specific to this app, not generic.
Your first price is a guess. Pick something reasonable, write it in CONTEXT.md, and plan to revisit it after the first fifty users. Changing a price is easy; not launching because you cannot decide is the expensive mistake.
Write the listing and the landing page
2 hoursWhether your app lives in a store or on the web, people decide in a few seconds from a title, a sentence and a screenshot. AI is very good at drafting these, and very bad at knowing your user. You supply the user; it supplies the words.
Start with a positioning sentence
One sentence in the form: [App] helps [who] do [what] without [the annoying thing]. For the example: "Habit Streaks helps busy people keep one or two daily habits without losing their streak to a time-zone glitch." Everything else is built from this.
Here is my positioning sentence: [sentence]. Write five alternative versions, each emphasising a different benefit. Then tell me which one you would put on a billboard and why. Avoid hype words like "revolutionary" or "seamless".
App store listing
Store listings are searched like a search engine. Ask the AI for the words people would actually type when looking for an app like yours, then use them in the title and the first two lines of the description, where they matter most.
Write an App Store and Google Play listing for this app: [positioning sentence and feature list]. Include: a title under 30 characters, a subtitle, the first two lines of the description (these are the only ones people see before tapping "more"), a full description, and 20 search keywords people would actually type. Plain language, no exclamation marks.
Landing page
A web app needs a landing page; a mobile app benefits from one too, because it is where you send people from social posts and emails. A good first landing page has five parts: headline, one sentence under it, a screenshot or short video, three short benefits, and one button. Ask for exactly that, then have it built with the same screen-by-screen loop from step 6.
Write the copy for a one-screen landing page: headline (under 10 words), one supporting sentence, three benefits of one line each, and the button text. The reader is [describe your user]. Then write the page as a simple HTML file I can publish, with the copy in place and a spot for a screenshot.
Screenshots matter more than words. Ask the AI what five screenshots would convince someone, in which order, and what one-line caption to put on each. Then take those screenshots from your real app.
Find the first users
2 to 4 weeksThe first fifty users almost never come from ads. They come from places where your users already talk to each other, and from you personally asking. AI helps you find those places and write the messages; it cannot do the asking for you.
Map where your users are
My app is for [describe user]. List 20 specific places online where these people already gather: subreddits, Facebook groups, Discord servers, forums, newsletters, YouTube channels, podcasts. For each, say what kind of post would be welcome there and what would get me banned.
Check each one yourself. Read the rules. Spend a week being useful there before you mention your app. Communities can tell when someone arrives only to promote.
Write the launch messages
You need a handful of pieces: a short post for communities, a launch post for a site like Product Hunt if it fits, a direct message to people you know who match the user, and a one-line reply you can use when someone asks "what do you do?". Ask for all of them at once, in your voice.
Here is my positioning sentence and my landing page copy: [paste]. Write: 1) a 120-word community post that leads with the problem, not the app; 2) a Product Hunt style launch description; 3) a personal message to a friend who fits the user, asking them to try it and tell me honestly what is wrong with it; 4) a one-line answer to "what are you working on?". Write the way I write: [paste two or three sentences you wrote yourself].
Ask for feedback, not for praise
Every first user is worth more as a source of feedback than as a download. Ask each one three questions: what did you expect it to do, what confused you, and would you miss it if it disappeared. Put the answers in a file; you will use them in step 15.
Do not ask the AI to write fake reviews, testimonials or "user stories" for your listing. Stores remove apps for it, and users can tell. Real quotes from real users, with permission, are the only kind worth having.
Keep marketing with AI
A few hours a weekOnce the first users are in, marketing becomes a routine rather than a launch. AI makes the routine affordable for one person. Pick two of these channels, not all of them.
- Articles people search for
- Ask the AI for the twenty questions your users type into a search engine that your app answers. Write one useful article a week answering one of them, with the AI drafting and you adding what only you know. Put it on your landing page's domain. This compounds slowly and is the cheapest long-term channel.
- Social posts
- Give the AI one real thing that happened this week (a user story, a bug you fixed, a number) and ask for three short posts about it in your voice. Post the one you would actually say out loud. Generic AI posts about "productivity tips" get ignored.
- Onboarding emails
- If people give you an email address, send three short emails in the first week: how to get the first win, the one feature people miss, and a question asking what they think. Ask the AI to draft the sequence from your spec, then cut every sentence that sounds like marketing.
- Small paid tests
- Only after the free channels show that people who arrive actually stay. Ask the AI for five ad variations built on your positioning sentence, run them with a small budget, and let the numbers pick the winner.
My app: [positioning sentence]. List 20 questions my users would type into a search engine that my app helps answer. Rank them by how likely someone asking is to want the app. For the top one, outline a 700-word article that answers it properly, and tell me where I should add my own experience.
Read the numbers with AI
Once a month, export whatever your analytics and store dashboards give you (installs, sign-ups, people still active after a week, cancellations) and paste the table in. Ask what changed, what it suggests, and what one thing to try next. An AI is a patient analyst for numbers you do not have time to study.
Keep a MARKETING.md next to CONTEXT.md: your positioning sentence, your user description, the channels you chose, and what worked. Paste it into every marketing conversation so the AI writes for your user, not for a generic one.
Turn feedback into the next version
Weekly routineOnce real people use the app, the work changes from building to listening. Most apps improve or die on this step. The routine below takes an hour a week and works with any AI.
- Collect everything in one place. Store reviews, support emails, community replies, crash reports from your error tool, and the three-question answers from step 13. One text file or spreadsheet, one row per item, with the date.
- Let the AI group it. Paste the week's items and ask for groups by underlying cause. Ten complaints often turn out to be three problems.
- Rank by how many people and how badly. A crash that hits everyone beats a feature request from one person, however loudly they asked.
- Fix the top item with the loop from step 6. Point the AI at the likely place in the code, get the fix, run it, test the exact scenario the user described.
- Ship a small version and tell the people who asked. A one-line reply, "this is fixed in 1.1, thank you for reporting it", turns a complainer into a fan more reliably than any feature.
Here are this week's user reviews, support emails and error reports: [paste]. Group them by underlying cause and tell me which ones are the same problem. Rank the groups by how many users are affected and how severe it is. For the top three, point to the likely place in my code (here is the file list: [paste]) and propose the fix. Then draft release notes for 1.1 in plain language, and a short, polite reply to each person who reported something, saying what changed.
Separate bugs from wishes
Bugs get fixed. Feature requests get written down and counted. Ask the AI to keep a running list of requests with a tally, and only build a feature when several unrelated people ask for the same thing. This is how you avoid building an app that does everything for nobody.
Watch what people do, not only what they say
If your analytics show that people open the app twice and never return, that is feedback too, even though nobody wrote it down. Paste the numbers in with the reviews and ask the AI what the two together suggest. The usual answer is that the first-run experience is confusing, which no one bothers to report; they just leave.
Update CONTEXT.md after every release: what changed, why, and what was decided against. The next conversation should start from the app as it is now, not as it was in the original spec.
Handle support with AI
Minutes a daySupport is where small apps quietly lose users: a question goes unanswered for a week and the person is gone. AI lets one person answer quickly and kindly without it taking over the day.
Build a short help document
Ask the AI to turn your spec and your feedback file into a plain-language FAQ: the ten questions people actually ask, with clear answers. Put it on your landing page and in the app. Half of support requests stop arriving once this exists.
From my spec and this list of user questions [paste], write a help page with the ten most common questions and short, friendly answers. Where an answer depends on something I have not told you, say so instead of guessing.
Draft replies, then send them yourself
Paste each support email into the AI along with the help document and ask for a reply in your voice. Read it, fix anything wrong, and send it from your own address. Keep the human in the loop: users forgive slow, they do not forgive wrong.
Here is a support email: [paste]. Here is my help document: [paste]. Draft a reply that answers the question directly in the first sentence, is warm without being chatty, and admits it if this is a bug on my side. If the answer is not in the help document, tell me what I need to find out first.
Feed support back into the product
Every support question is a design flaw or a missing sentence in the app. Add each one to the feedback file from step 15. When the same question arrives three times, the fix belongs in the app, not in another reply.
If you have more than one AI available, use one to draft the reply and another to check it: "Is anything in this reply wrong, unclear, or likely to annoy the person?" Support replies are short and high-stakes; a second reading is cheap.
Working with AI effectively
These habits matter more than which assistant you use.
- Give context every time
- Paste
CONTEXT.mdand the relevant file at the start of a conversation. The assistant knows nothing you have not shown it in this conversation. Some workspaces let you attach files and instructions once so every conversation starts from them; that saves a great deal of pasting. - Paste errors exactly
- Never paraphrase an error message. Copy the whole thing, including the file names and line numbers.
- Ask for the smallest change
- "Fix only this" produces better results than "make it better".
- Ask why, not just what
- "Explain this in two sentences" after every piece of code. Over a few weeks you will understand your own app, which matters when something breaks at a bad time.
- Get a second opinion on anything important
- Platform choice, data design, sign-in, payments, and any code the AI calls "done". A second model, or at least a fresh conversation, catches what the first one was confident about and wrong.
- Commit whenever something works
- Git is your undo button. Use it before every risky change.
Troubleshooting
- The code the AI gave me does not run
- Paste the exact error back, together with the file it mentions. Ask: "What is the cause, and what is the smallest fix?" If two fixes in a row do not work, undo to your last commit and describe the feature again from scratch in a new conversation.
- The AI forgot what we decided
- Conversations have limits and the assistant only knows what is in the current one. Start a new conversation and paste
CONTEXT.md. Keep that file current. - It keeps changing things I did not ask about
- Add "Only change the part I asked about; return the full file with everything else identical" to your prompt. Compare the result with your committed version before accepting it.
- It says the code is fine but the app is wrong
- The assistant cannot run your app. Describe what you see on screen, step by step, and what you expected instead. If it still insists, ask a different AI.
- It suggests a library or service I have never heard of
- Ask whether the same thing can be done without it. For a first app, fewer dependencies means fewer things that break.
- Store review rejected my app
- Paste the rejection text into the AI and ask for the specific change and the reply to the reviewer. Most rejections are about privacy policies, missing test accounts, or crashes on first launch.
Frequently asked questions
- Can I build an app with AI without knowing how to code?
- Yes, for apps of the size described here. You will not need to write code, but you will read some, run commands, and make decisions. Expect to learn a little as you go; that is a feature, not a cost.
- Which AI is best for building apps?
- ChatGPT, Claude and Gemini can all do this. Their strengths shift with each release. The safer approach is to use more than one: build with one, review with another. What matters most is the process in this guide, not the assistant.
- How long does it take?
- A first working version: a few evenings. A published web app: about a week. A mobile app in the stores: two to four weeks, mostly waiting on review and setup. Finding the first fifty users usually takes longer than building the app did.
- What does it cost?
- The tools in this guide are free to start. Paid AI tiers help with long conversations. Hosting for a small web app is free. Apple's developer account is a yearly fee; Google's is one-off.
- Should I use a no-code app builder instead?
- No-code builders are faster for standard apps that fit their templates, and you are limited to what the builder allows, on their pricing. The approach here takes longer to learn and gives you code you own and can take anywhere.
- Who owns the app?
- You do. Code produced by AI assistants for you is yours to use; check your assistant's terms if you are unsure. Keep your code in your own GitHub account and your data with providers you control.
Ready to start?
Open a workspace, paste your brief from step 1, and begin. The same workspace carries you through building, selling and improving the app.