---
title: "I want AI to build me an app"
url: https://iwantaito.com/asks/build-me-an-app/
summary: "Five plain-English prompts made a shared job list that saves to a database. Upload two files to GitHub and Cloudflare puts it live, and every change after: free, no terminal."
published: 2026-10-01
updated: 2026-10-01
author: "Jack Stovell"
publisher: "Adapt Progress Evolve Limited"
language: en-GB
---

# I want AI to build me an app

Five plain-English prompts made a shared job list that saves to a database. Upload two files to GitHub and Cloudflare puts it live, and every change after: free, no terminal.

> Elm Street Community Garden: Made up for this demo. The garden, its 15 volunteers, the jobs and the names Ann and Bob are invented, and the screenshot we attached is of one of our own sites.

Run: 2026-10-01, claude-sonnet-5-5, Claude Code 2.1.287 (claude -p, file tools only: no terminal, no web), session 0d6a82f9-f185-4690-9f63-3354794ff145. Claude's time: 8 min 17 s. Edited by hand: no. Full transcript: https://iwantaito.com/transcripts/build-me-an-app.md

## Set up once

Step by step, with what each screen looks like: https://iwantaito.com/start/

1. **Get a free Claude account**. It's where you describe what you want and Claude makes it. The Free plan covers every guide on this site; Pro adds the shortcut where Claude saves changes to GitHub itself. Free (Pro is optional).
2. **Let Claude hand you files**. A website is a handful of files. With this switched on, Claude can make them and give them to you to download, ready to upload to GitHub. Free.
3. **Get a free GitHub account and an empty repository**. A repository is a folder on GitHub that keeps every version of your files. It's the one place your site lives: you (or Claude) change the files there, and Cloudflare publishes whatever is in it. Free.
4. **Get a free Cloudflare account and connect it to your repository**. Cloudflare is where your site is live on the internet. Once it is connected to your repository, every change to the files on GitHub goes live by itself, in a minute or two. A site made of plain files costs nothing to host: Cloudflare says requests to static files are "free and unlimited". Free.
5. **Connect Claude to GitHub**. So Claude can read the files that are live now before it changes them, even in a brand new chat. On Pro, the same connection is what lets Claude Code on the web save its changes to your repository. Free.

## The prompts

### Prompt 1 of 5: Describe the problem, and ask for a plan before anything is made.

```text
I help run a small community garden called Elm Street Community Garden. We have about 15 volunteers. At the moment we organise the jobs (watering, weeding, fixing the shed, that sort of thing) in a messy WhatsApp group, and things either get missed or done twice.

I'd like a simple app that all of us can open on our phones: a shared list of jobs where anyone can add a job, say "I'll do it", and tick it off when it's done. Everyone has to see the same list, so it needs to be saved online, not just on one phone.

I don't want people to have to sign up for accounts, but random strangers on the internet shouldn't be able to mess with our list. I'd like it to be free to run, and I've heard Cloudflare can do that.

I'm not technical and I've never made an app. Before you make anything, ask me anything you need to know, and tell me in plain English what you're going to make, where the list will be kept, and how strangers will be kept out.
```

What you should see: A plan and some questions, and nothing made yet. Ours proposed a web page you add to your phone's home screen, the list kept in a small Cloudflare database, and one shared garden code checked by the server. It asked seven questions, and said putting it online would need a few commands typed on a computer.

### Prompt 2 of 5: Answer its questions, show it a design you like, and ask for copy and paste only.

Attach: a screenshot of a website you like the look of

```text
Thanks, that sounds right. My answers:

1. Type their name once and the phone remembers it.
2. Yes, I've made a free Cloudflare account.
3. I'll do it myself, but I don't want to run commands or install anything. I've read that Cloudflare lets you paste code into its website and set up a database by clicking, so please make it so all I have to do is copy and paste.
4. Just a title for now.
5. Yes, anyone can hand a job back.
6. Anyone can delete a job, but ticked-off jobs should stay in a "done" list for a while so we can see what's been done.
7. Call it "Elm Street Garden Jobs". I've attached a screenshot of a website I like the look of. I like the light background, the rounded buttons with little coloured dots, and the one strong blue. Don't copy its words, just the feel. Big, easy-to-tap buttons please.

Please make it now. Keep it as simple as possible: just what I'll need to paste into Cloudflare, nothing I have to install. It must work well on a phone. Tell me in plain English what each file is for.
```

What you should see: Files to download. Ours saved two: worker.js, the whole app in one file (490 lines), and SETUP.md, six click-by-click steps. There was no database file: the app makes its own table the first time it runs. It said it hadn't run any of it.

### Prompt 3 of 5: Ask it to check its work like a volunteer, and like someone trying to break it.

```text
Thanks. Before I put it online and share it with the volunteers, please check it carefully, as if you were a volunteer on a small phone screen and as if you were trying to break it:
- two people pressing "I'll do it" on the same job at the same moment
- someone ticking off or editing a job that another person has just deleted
- a very long job title, or a blank one
- someone typing odd symbols, web code or a script into a job title or their name
- a stranger who has the link but not the garden code, trying to guess the code or to read or change the list some other way
- a bad signal halfway through pressing a button

Tell me in plain English what you found, then fix it in the files.
```

What you should see: A plain-English list of what it found, and updated files. Ours found that two people pressing "I'll do it" together were both told they had the job, that acting on a deleted job said OK, and that a retry after a bad signal could add a job twice. It fixed those and more, and said it had checked by reading the code, not running it.

### Prompt 4 of 5: Change something, the way you will once people are using it.

```text
One more thing before we start. Some jobs need doing by a certain day, like "water the seedlings before Saturday's open day". Please let people add an optional "by when" day to a job, show it on the job, and put the ones that are due soonest at the top.

Imagine we've already been using the app for a few weeks, so it mustn't lose the jobs that are already on the list. Then tell me exactly what I need to paste into Cloudflare again to put the change live.
```

What you should see: The change, and what to paste again. Ours added an optional day under the job box, amber when close and red when overdue, soonest at the top, plus a "Set a day" button for older jobs. It said to paste the new worker.js over the old one and leave the database and the garden code alone.

### Prompt 5 of 5: Ask how to put it live from GitHub, by clicking, not typing commands.

```text
I've made free GitHub and Cloudflare accounts, and a new repository on GitHub called elm-street-jobs (I switched on "Add README"). I'd like Cloudflare to put the app live by itself every time the files on GitHub change. I've read that Cloudflare can do this from Workers & Pages, Create application, "Import a repository". I don't want to use the terminal or install anything.

If Cloudflare needs any extra files for that, please make them. Then tell me, step by step, how to get the files into my repository using the GitHub website, how to connect it in Cloudflare, where the garden code goes and how I change it if it leaks, what I should see at each step, and how I put a change live later (like the "by when" day). Also, how do I keep a backup copy of the list now and then?
```

What you should see: One new settings file, wrangler.jsonc, with a line to paste your database's ID into, and click-by-click steps: make the database, upload the files, paste in the ID, connect the repository in Cloudflare with a matching name, add the garden code as a secret. It also added a "Download a backup copy of the list" link, and said it hadn't run any of it.

## Before you start

You need three free accounts, set up once: Claude, GitHub and Cloudflare. [The set-up page](/start/) walks through each. In Claude, switch on "Code execution and file creation" (Settings, then Capabilities; it's on the Free plan) so Claude can hand you files to download. On GitHub, make an empty repository with "Add README" switched on; ours was called elm-street-jobs. Connecting Claude to GitHub is part of the set-up too, but on the Free plan it only reads your files. It can't save anything to GitHub from a chat, so you upload what Claude gives you.

Nothing to install, and no terminal.

Our example is made up: Elm Street Community Garden, about 15 volunteers, with jobs like watering, weeding and fixing the shed. They organise it all in a WhatsApp group, so jobs get missed or done twice. Swap in your own club, team or street.

## What happened when we ran it

We typed five plain-English prompts into one conversation with claude-sonnet-5-5 on 1 October 2026. One caveat: we ran them through Anthropic's command-line tool with only its file tools switched on, so Claude could save files into an empty folder, much like file creation on claude.ai. We didn't use the claude.ai website itself, so your screen will look different. Prompt 5 was asked again later for the GitHub route, carrying on from exactly where prompt 4 left off, so Claude saw the whole conversation. The replies are published as they came back and we edited nothing by hand. Claude spent 497.2 seconds writing them.

The first prompt described the garden and the WhatsApp problem, and asked for a plan and questions before anything was made. Claude planned a web page you add to your phone's home screen, a list kept in a small Cloudflare database, and one shared garden code, checked by the server, to keep strangers out. It asked seven questions, and said putting it online would need "a few commands run on a computer".

The second prompt said no commands, no installing. Claude saved worker.js, the whole app in one file (490 lines), and a set-up guide. There's no database file to deal with: the app makes its own table the first time it runs.

Claude never ran its code, and said so each time. So prompt 3 asked it to try to break its own work, and it found real problems. Two people pressing "I'll do it" together were both told they'd got the job. Ticking off a deleted job said OK. A retry after a bad signal could add the same job twice. It fixed those and more. Prompt 4 added an optional "by when" day, soonest first, without losing the jobs already on the list.

Prompt 5 asked how to get Cloudflare to put the app live by itself whenever the files on GitHub change. Claude made one extra file, wrangler.jsonc: a short settings file with the app's name, which file to run and which database to connect, plus a placeholder for the database's ID that you swap for the real one. It wrote GITHUB-SETUP.md with "You should see" after each step, and added a "Download a backup copy of the list" link to the app, because the dashboard has no simple backup button for it. It got the one thing Cloudflare warns about right: the name in the settings file must match the name you give the app in Cloudflare.

Then we tested it ourselves on a local copy, with Claude's settings file (a made-up ID in place of the placeholder) and its worker.js unchanged. Nothing went on GitHub or Cloudflare. Cloudflare's own checking tool read the settings file without complaint. The final build passed all 21 server checks and, on a fresh database, all 20 browser checks with Ann on a laptop and Bob on a phone (an earlier run failed one, which we put down to timing in our test). When 20 people pressed "I'll do it" at the same instant, exactly one got the job. A list made with the first build survived the final file with every job intact.

## Put it live

These clicks follow GitHub's and Cloudflare's documentation, so the button names are theirs. Claude's order is right: the database comes first, because the settings file needs its ID before Cloudflare's first build. We haven't hosted this demo publicly, because it would mean publishing the code and letting anyone change the jobs; the screenshots are from our own machine.

1. Pick a garden code of at least 10 characters, such as three random words. The app refuses anything shorter. Never put it in a file.
2. In the Cloudflare dashboard, go to the D1 SQL database page, select Create Database, name it elm-street-jobs-db and select Create. Copy the database's ID from its page in the dashboard. There are no tables to make.
3. Download Claude's worker.js and wrangler.jsonc. On GitHub, open your elm-street-jobs repository and select Add file, then Upload files. Drag in those two files (the files, not the folder they're in) and select Commit changes. The other two files Claude made, GITHUB-SETUP.md and SETUP.md, are notes for you; the old SETUP.md describes the paste-it-in route and can be ignored.
4. On GitHub, open wrangler.jsonc and select the pencil icon at the top right. Replace PASTE-YOUR-DATABASE-ID-HERE with your ID, keeping the quote marks, and commit. Do this before the next step, or the first build fails.
5. In Cloudflare, go to Workers & Pages, select Create application, then Get started next to "Import a repository". Choose your GitHub account (sign in and allow Cloudflare access the first time), pick elm-street-jobs, and keep the name exactly elm-street-jobs, as in the settings file. Leave the build settings as they are and select Save and Deploy. You should see a build finish and an address ending in workers.dev.
6. Open the app in Cloudflare, then Settings, then Variables and Secrets, and select Add. Choose Secret, name it GARDEN_CODE (exactly), type your code as the value and select Deploy. A secret stays put when the app is rebuilt later.
7. Open the workers.dev address on your phone. You should see the sign-in screen. Add a test job, take it, tick it off, then share the address and the code with the group.
8. To put a change live, such as the "by when" day, ask Claude in the same chat and download the files it changed. On GitHub, select Add file, then Upload files, drag them in and select Commit changes. Files with the same name are replaced; the rest stay. Cloudflare rebuilds by itself within a minute or two, and the jobs stay in the database. Download a backup from the app first.

If the code leaks, edit GARDEN_CODE under Variables and Secrets and deploy; no files change. If an update goes wrong, open the app, then Deployments, select the three dots next to the previous version and choose Rollback; GitHub still holds the broken file, so put a working worker.js back there too. For your own domain, the domain has to be on Cloudflare first; then it's Settings, Domains & Routes, Add, Custom Domain.

On Claude Pro, you can skip the downloading and uploading. Ask Claude Code on the web for the change and it saves it to a branch of your repository; you merge it on GitHub and Cloudflare puts it live. [The set-up page](/start/#pro) shows how.

No GitHub? You can paste worker.js straight into Cloudflare's online code editor instead, and add the database and the code by clicking, but every change means pasting it in again.

## What it costs

£0 a month at this size. On Cloudflare's free plan as of October 2026, Workers get 100,000 requests a day with 10 ms of CPU each. D1, the database, allows 5 million rows read and 100,000 rows written a day, 5 GB in total, 500 MB per database and 10 databases. Fifteen volunteers ticking off jobs won't come near that.

GitHub's Free plan holds the files, and Claude's Free plan covered everything here. You don't need a domain; the workers.dev address works without one.

## For developers

With the repository connected through Workers Builds, every push to main runs `npx wrangler deploy` (the default deploy command) and pushes to other branches can build previews:

```
git clone https://github.com/<you>/elm-street-jobs.git
cp worker.js wrangler.jsonc elm-street-jobs/
cd elm-street-jobs
git add worker.js wrangler.jsonc
git commit -m "Add the app"
git push origin main
```

Claude's wrangler.jsonc names an existing D1 database by ID. Cloudflare also documents automatic provisioning: leave `database_id` out (`"d1_databases": [{ "binding": "DB" }]`) and the database is created on deploy, including deploys from GitHub. Workers Builds' auto-generated API token lists Workers Scripts, KV and R2 edit permissions, not D1, so we haven't confirmed that works from a Builds deploy; making the database first, as Claude did, avoids the question.

We tested with Claude's own wrangler.jsonc: `wrangler deploy --dry-run` put it at 35.43 KiB (10.92 KiB gzipped) with `env.DB` bound, and `wrangler dev` with a local D1 and `GARDEN_CODE` in `.dev.vars` ran our server, browser and upgrade tests. Without GitHub, the first, command-line version of this page (claude-sonnet-5-5, 1 October 2026) deployed with Wrangler directly; its commands, condensed:

```
npx wrangler login
npx wrangler d1 create elm-street-garden --location=weur
npx wrangler d1 execute elm-street-garden --remote --file=schema.sql
npx wrangler deploy
npx wrangler secret put GARDEN_PASSCODE
npx wrangler d1 export elm-street-garden --remote --table=jobs --output=backup.sql
```

This version's worker.js needs no schema file (it creates its tables) and reads `env.DB` and `env.GARDEN_CODE`. Our test scripts are in `demos/build-me-an-app/tests/`.

## What we tested

- PASS: Claude's wrangler.jsonc, read by Cloudflare's own tool (a dry run, nothing uploaded). Name elm-street-jobs, worker.js, the database bound as DB; 35.43 KiB. The dry run doesn't check the database ID, so the placeholder must be replaced before the first real build
- PASS: Final files (after prompt 5), as a stranger with the link but not the code. Reading the list, adding a job and downloading the backup are all refused; the page itself holds no jobs and not the code
- PASS: Final files: 20 people press I'll do it on the same job at the same instant. Exactly 1 got it; the other 19 were told "Volunteer2 just took that job."
- PASS: Final files: two volunteers on two devices in headless Chrome (Ann on a laptop, Bob on a phone). 20 of 20 on a fresh database: wrong code refused, same list on both, Ann told "Bob just took that job.", Done on a deleted job says "That job has just been deleted.", backup file downloads, HTML typed into a title shows as plain text, no sideways scrolling, no errors. An earlier run failed one check (setting a day on an old job), which we put down to timing in our test
- PASS: Final files: every other check on the server. 21 of 21 passed: a retry after a bad signal adds the job once, blank, 500-character and invisible titles refused, 30 February refused, a title starting with = is made harmless in the backup spreadsheet
- PASS: Uploading the final worker.js over a list made by the first build (same database). 12 of 12: all 3 jobs kept, Bob's claim and the ticked-off job kept, old jobs get an empty day, a new job with a day goes to the top
- PASS: 30 wrong guesses at once, final files. 22 got an ordinary "wrong code" answer and 8 were blocked: the limit is 20, but guesses sent at the same instant slip a couple past it. Then even the right code from that connection was blocked for 15 minutes
- FAIL: First build (after prompt 2), same server checks. 12 of the 18 that apply passed. All 20 people were told they had the job, a retry added a job twice, a 500-character title was cut and saved, invisible titles were accepted, and ticking or claiming a deleted job said OK. Prompt 3 fixed all of these

## What it got wrong

- **It never ran its own code.** Claude said so every time. All the testing on this page is ours, on a local copy on our own machine; we did not put it on GitHub or Cloudflare or try it on a real phone.
- **Its first plan needed commands.** In prompt 1 Claude said putting it online needs a few commands typed on a computer. When we asked for no commands, it put the whole app in one file.
- **It left an out-of-date guide in the folder.** Claude wrote GITHUB-SETUP.md for the GitHub route but left the older SETUP.md, which says to paste the app into Cloudflare's code editor, unchanged and called it a note for you. Follow GITHUB-SETUP.md (or the steps below) and ignore SETUP.md.
- **Button names that don't quite match Cloudflare's.** Claude said to go to "Storage & databases" for the database; Cloudflare's guide calls it the D1 SQL database page. It said to choose Import a repository and select Next; Cloudflare's guide says Get started next to Import a repository, then set it up and select Save and Deploy. Claude warned names might differ, and the steps below use Cloudflare's.
- **A guesser can lock out the whole wifi.** After 20 wrong codes from one connection, the right code from that connection is refused too, for 15 minutes. Volunteers on the same wifi as a guesser are locked out for a while.
- **Names are on trust.** Anyone with the garden code can type any first name. Claude said so in its plan and in prompt 3.
- **Backups are by hand, and only a record.** The backup link saves a spreadsheet; there's no button to put a list back from it. Claude said so.

Demo: Not hosted live: the shared job list is protected by one code and saves to a database, so a public copy would mean publishing the code and letting anyone add, change or delete jobs. The screenshots and the full transcript are the recorded output of our run.

## From the same studio

Ours: made by the same studio that runs this site.

- [Adapt Progress Evolve](https://adaptprogressevolve.com/): We build apps like this properly, if you'd rather not do it yourself.

## Related

- [I want AI to build me a dashboard, CRM or spreadsheet tool](https://iwantaito.com/asks/build-me-a-dashboard/)
- [I want AI to build me a mobile app](https://iwantaito.com/asks/build-me-a-mobile-app/)
- [I want AI to build me a website](https://iwantaito.com/asks/build-me-a-website/)

## Sources

- [Claude help: create and edit files with Claude (all plans; Settings > Capabilities)](https://support.claude.com/en/articles/12111783)
- [Claude docs: GitHub integration (every plan, reads files only)](https://claude.com/docs/connectors/github)
- [GitHub Docs: adding a file to a repository (Add file > Upload files; 100 files at once, 25 MiB each)](https://docs.github.com/en/repositories/working-with-files/managing-files/adding-a-file-to-a-repository)
- [GitHub Docs: editing files (the pencil icon)](https://docs.github.com/en/repositories/working-with-files/managing-files/editing-files)
- [Cloudflare Workers Builds: Create application > Import a repository; the Worker name must match the settings file](https://developers.cloudflare.com/workers/ci-cd/builds/)
- [Cloudflare Workers Builds configuration (default deploy command; the auto-created API token's permissions)](https://developers.cloudflare.com/workers/ci-cd/builds/configuration/)
- [Cloudflare Wrangler configuration: automatic provisioning of D1 databases, including deploys from GitHub](https://developers.cloudflare.com/workers/wrangler/configuration/#automatic-provisioning)
- [Cloudflare D1 get started, dashboard steps (D1 SQL database page > Create Database)](https://developers.cloudflare.com/d1/get-started/)
- [Cloudflare D1 and Prisma tutorial (a database's ID can be found in the dashboard)](https://developers.cloudflare.com/d1/tutorials/d1-and-prisma-orm/)
- [Cloudflare Workers secrets: add a secret in the dashboard (Settings > Variables and Secrets)](https://developers.cloudflare.com/workers/configuration/secrets/)
- [Cloudflare Workers rollbacks (dashboard: Deployments > Rollback)](https://developers.cloudflare.com/workers/versions-and-deployments/rollbacks/)
- [Cloudflare Workers custom domains (Settings > Domains & Routes; needs an active Cloudflare zone)](https://developers.cloudflare.com/workers/configuration/routing/custom-domains/)
- [Claude Code on the web: get started (Pro, Max and Team plans)](https://code.claude.com/docs/en/web-quickstart)
- [Cloudflare Workers pricing (free: 100,000 requests a day, 10 ms CPU each)](https://developers.cloudflare.com/workers/platform/pricing/)
- [Cloudflare D1 pricing (free: 5 million rows read, 100,000 written a day, 5 GB)](https://developers.cloudflare.com/d1/platform/pricing/)
- [Cloudflare D1 limits (free: 10 databases, 500 MB each)](https://developers.cloudflare.com/d1/platform/limits/)

## Questions people ask

### Can Claude build me an app that saves data?

A small web app, yes. Five prompts in one Claude conversation made a shared job list that saves to a Cloudflare database, and it passed all our checks on a local copy. Claude never ran it itself, so try it before you rely on it.

### Do I need to use a terminal or install anything?

No. You make the database and add the garden code by clicking in Cloudflare, and upload two files on the GitHub website. Cloudflare does the rest.

### Can Claude put the app online for me?

Not from a chat on the Free plan, as of October 2026: Claude's GitHub connection there only reads your files. But once the repository is connected to Cloudflare, uploading the files to GitHub is putting the app live. On Claude Pro, Claude Code on the web can save a change to a branch of your repository for you; you merge it on GitHub and Cloudflare puts it live.

### Do people need to sign up?

No. Everyone types one shared garden code and their first name once, and their phone remembers both. The trade-off is that anyone with the code can type any name.

### Will an update lose our jobs?

Not in our test. The jobs live in the database, not in the files on GitHub. We made a list with the first version, put the final one over it, and every job was still there.

### Is the garden code on GitHub?

No, and it mustn't be. It goes into Cloudflare as a secret, which stays put when the app is rebuilt. The settings file on GitHub holds only the app's name and the database's ID.
