Where to put the app you built with an AI assistant
Petr Kolonicz
Software engineer
· 6 min read
Every few weeks someone sends me a link to something they built with Claude or Lovable over a weekend. It works. It runs in a preview tab that expires in an hour, or on their own laptop, and they want it at a real address they can send to people.
This is how to do that without ever opening a terminal. Mostly, though, it is a post about not getting invoiced.
I host almost everything on Cloudflare. Here is why, how to do it by clicking, and where it will let you down.
The bill problem
Most hosting companies charge by how much your app gets used. That sounds fair until you remember that you did not write the app. An assistant did, and you cannot say what it does every time someone opens a page.
A bot finds the address and hits it thousands of times an hour. A loop nobody noticed calls a paid service ten thousand times overnight. On a platform that has your card, both of those become a line on next month’s statement.
There are two ways to be safe. Do not give the platform a card. Or pick one where the free plan stops working when you reach the limit, instead of quietly charging you.
Cloudflare does both. On its free plan the site, the code behind it and its database all have hard limits. Reach one and the app goes dark until midnight UTC, then comes back. With no card on the account there is nothing to charge. A few hours of downtime is annoying. It is not a financial event.
The limit that matters is 100,000 a day, and for most weekend apps almost nothing a visitor does counts towards it.
The one place Cloudflare asks for a card
Cloudflare’s file storage is called R2, and if your app lets people upload photos or PDFs, that is where they would go. It has a free allowance of 10 GB, but Cloudflare will not show you the storage screen until you go through a checkout, and people consistently report that the checkout means adding a card. Some report a small charge soon after.
The rest still costs nothing, but once a card is on the account the “it simply stops” guarantee is gone. For a first launch, ask the assistant to switch uploads off or hide them behind a “coming soon” note, and come back to storage once you know people are using the thing.
The clicking route: GitHub, then Cloudflare
You need two free accounts: GitHub, where the app’s files will live, and Cloudflare, which turns them into a website. Here is the whole route in one picture.
A repository is GitHub’s word for a folder of files it keeps safe and remembers every version of. Cloudflare watches it and rebuilds the site whenever it changes.
Step one is getting the files onto GitHub. Some tools do this for you; Lovable, for instance, has a GitHub connection built in, so look for that first. If your tool only gave you a folder, sign up at github.com, click the “New” button, give the repository a name and create it. On the empty page that follows, find the “uploading an existing file” link, drag your app’s files in, and click “Commit changes”. If there is a folder called node_modules, leave it out. It is thousands of files Cloudflare will fetch for itself.
Step two is Cloudflare. Sign up at dash.cloudflare.com and skip anything that asks for payment. In the left menu, open “Workers & Pages”, click “Create”, pick the “Pages” tab, then “Connect to Git”. Approve access when GitHub asks, then pick your repository. The labels shift now and then, but the shape stays the same.
Two fields on the next form stop most people: the build command, the instruction that turns your files into the finished site, and the build output directory, the folder it produces. Do not guess. Ask your assistant, “what is the build command and output directory for this project?”, and paste its answers in. A “Framework preset” dropdown fills both in if you know what the app was built with. Your assistant knows.
Click “Save and Deploy”. In a minute or two you get an address ending in .pages.dev that works from anywhere. Open it on your phone.
From now on, every change that lands in the GitHub folder goes live on its own, including changes you make in a tool that is connected to GitHub. When you want your own name instead of .pages.dev, the “Custom domains” tab does that. I wrote about buying a domain separately.
Let the assistant do it
You built the app by describing it. You can put it online the same way.
Ask something like: “I want this app online at a real address, for free, with no card on file. Put it on Cloudflare Pages through GitHub. Do everything you can yourself, and tell me exactly what to click when you need me.”
It will come back wanting things from you, usually approving access to GitHub or Cloudflare, which shows up as a link to open and a button that says “Authorize”. Claude has an official Cloudflare connector at claude.com/connectors/cloudflare. Sign in through it and Claude can work in your Cloudflare account directly instead of narrating steps for you to copy.
When the first build fails, copy the red text from Cloudflare’s build log, paste it into the chat, and say “fix this”. You do not need to understand the red text; that is the point of having the assistant.
Ask it one more question before you start: “Can this app run on Cloudflare at all, and does it need file storage?” The answer can save you a weekend.
Where Cloudflare is the wrong answer
Cloudflare runs your code the moment a visitor asks for something, then puts it away. It does not keep a computer switched on for you, and it is built around JavaScript. Some apps need a machine that stays on, and some have their behind-the-scenes half written in Python, PHP or Ruby; ask your assistant whether that half can move, and if the answer is a long paragraph, stop fighting.
If any answer is yes, use something built to keep a computer running. Railway costs about $5 a month, gives you a server that stays on plus a proper database, and will run whatever the assistant wrote. Render has a free plan, but the app goes to sleep after 15 minutes with no visitors and takes 30 to 60 seconds to wake up, so a link you send someone looks broken at first. Neither stops for free the way Cloudflare does, so read the billing page before connecting anything.
Before you deploy
- Check the Cloudflare account has no card on it, and keep it that way.
- Ask your assistant whether the app can run on Cloudflare at all, and whether it needs file storage. Either answer can change the plan.
- Ask it for the build command and the output directory.
- Get the files onto GitHub, without
node_modules. - Connect the repository in Cloudflare, deploy, and watch the first build finish.
- Open the live address yourself and click through every screen. A build can succeed and a page can still be blank.
- If the build fails, check cloudflarestatus.com so you know whether it is you or them, then paste the error to your assistant.
If it all works, what you have taken on is a GitHub login and a Cloudflare login. The one number worth glancing at is the requests figure on the Cloudflare dashboard, and it resets at midnight UTC.