Share and Update an AI-Built App After the Demo
Table of Contents
- After the demo: the part nobody plans for
- Give the app one live URL
- Put the source in Git, not in a chat
- Choose who can open the demo
- Update the app without breaking the shared version
- Collect feedback on the right version
- Hand off between agents
- Built-in publishing or your own host
- Before you send the link
- After the demo: the part nobody plans for
- Give the app one live URL
- Put the source in Git, not in a chat
- Choose who can open the demo
- Update the app without breaking the shared version
- Collect feedback on the right version
- Hand off between agents
- Built-in publishing or your own host
- Before you send the link
After the demo: the part nobody plans for
The fun part of sharing an AI-built app is the demo. The harder part starts five minutes later. Someone asks for the link, and someone else wants the app private. A teammate finds a bug. Then an agent must change the app and not break the version that people already opened.
That is a small operations problem. A working app needs four things. It needs a stable URL and a way to review changes before they go live. It needs access control that fits the audience. It also needs an update path that survives handoffs between Claude, ChatGPT, Codex, Grok or the next agent that works on it. A handoff is a move of the work from one agent to another.
In short, keep the code in a Git repository. Connect the repository to a host such as Vercel, Netlify or Cloudflare Pages. Give reviewers one production URL.
Make each change on a branch. Review the change at the preview URL of the branch. Then merge the branch. Protect previews (and production, if necessary) with the access controls of the host. Make sure that you know how to roll back (go back to an earlier version).
Give the app one live URL
If every AI edit makes a new random link, nobody knows which one is current. Keep the three kinds of URL that your host gives you separate:
| URL | What it shows | Who gets it |
|---|---|---|
| Production URL or custom domain | The current released version | Clients, users, anyone who bookmarked the demo |
| Branch or preview URL | The latest change on one branch | Reviewers of a specific change |
| Per-deployment URL | One exact build that never changes | You, for comparisons and debugging |
Each host that connects to Git works this way:
- Vercel creates a preview deployment (a test build at its own URL) for each push to a branch other than the production branch. The deployment has a URL for the branch, and this URL always points to the latest commit of that branch (Vercel environments).
- Cloudflare Pages gives each branch an alias in the form
<branch>.<project>.pages.dev. The alias points to the latest commit of the branch (Cloudflare preview deployments). - Netlify builds a Deploy Preview for each pull request. The preview has an address such as
deploy-preview-42--yoursite.netlify.app(Netlify Deploy Previews).
Send clients the production URL. If possible, put it on your own domain. Send previews only to the people who review that change.
Put the source in Git, not in a chat
An app that lives only inside one chat session is fragile. When other people start to depend on the app, move it into a repository:
- Download or export the project from the tool that built it.
- Create a GitHub repository. Push the files to it.
- Add a short
README.md. In it, write the build command, the output folder and where the app is deployed. Also list the environment variables that the app needs (names only, never values). - Connect the repository to your host. On Vercel, use the New Project page. On Cloudflare Pages, use Workers & Pages > Create application > Pages > Connect to Git. On Netlify, use Add new project > Import an existing project.
From then on, the repository is the source of truth (the one place that holds the correct version). Any agent that can read and write the repository can work on the app. The host deploys each change that lands on the production branch.
Choose who can open the demo
Some AI-built apps must stay private. A prototype can contain client names, test data, financial assumptions or unfinished workflows. Pick the gate (the access check in front of the app) that matches the audience:
| Audience | Gate | Where to set it |
|---|---|---|
| Anyone | Public | Default on most hosts |
| A small group with one shared code | Password | Netlify basic password protection (Pro plans and above), or Vercel Password Protection (paid plans) |
| Named people who sign in with their own email | One-time PIN | Cloudflare Access on a Cloudflare Pages project |
| Your own team | Team sign-in | Vercel Authentication, or Netlify team login protection (Enterprise) |
Previews often show unfinished work. Protect them even when production is public:
- On Vercel, Standard Protection protects every deployment except your production domains. It is available on all plans (Vercel Deployment Protection).
- On Cloudflare Pages, Settings > General > Enable access policy restricts preview deployments to your Cloudflare account. For the production
pages.devaddress or a custom domain, you need a separate Access application (Cloudflare docs). - On Netlify, password protection can cover all deploys. This includes Deploy Previews and branch deploys (Netlify docs).
A long preview URL that is hard to guess is not authentication. Anyone who gets the link can open it.
Update the app without breaking the shared version
Keep the update loop boring:
- Start a branch for one change, such as
fix-signup-copy. - Ask the agent for a specific change. Tell it the page, what you tried, what happened and what you expected.
- Push the branch. The host builds a preview.
- Make sure that the preview works. Then send it to the reviewer who asked for the change.
- Merge the branch into the production branch. The production URL updates, and everyone keeps the same link.
- After the deploy, open production in a private window. Make sure that it works.
If a release breaks something, roll back first. Then find the cause. Each host has its own rollback:
- On Vercel, use Instant Rollback on the production deployment tile of the project. Hobby plans can roll back to the previous production deployment. Pro and Enterprise plans can choose any eligible earlier deployment (Vercel Instant Rollback).
- On Netlify, open an earlier successful deploy. Select Publish deploy. On a site that connects to Git with auto publishing on, the next production deploy replaces it. While you fix the problem, use Lock to stop auto publishing (Netlify docs).
- On Cloudflare Pages, open Deployments. Open the menu on an earlier production deployment. Select Rollback to this deployment (Cloudflare docs).
If the app has a database or server code, include data changes and server configuration in the release plan. A rollback of the front end does not roll back a database migration.
Collect feedback on the right version
Feedback is useful only when it refers to the version that the reviewer saw. Ask reviewers for three things: the URL, the action they tried, and the result they expected. Before you ask an agent to change code, reproduce the problem (make it happen again yourself).
Comment tools on preview builds help with this:
- Vercel Comments let reviewers pin comment threads to any part of a preview deployment. They are on by default for previews. Every commenter needs a Vercel account. To invite people outside your team, you need a Pro or Enterprise plan (Vercel Comments).
- The Netlify Drawer on Deploy Previews lets your team leave comments, screenshots, and video about a change.
Some clients will not create an account. For them, link a short form from the preview. The form asks for the page, the action, and the expected result.
Hand off between agents
One week, Claude can build the prototype. The next week, Codex can fix a layout bug. Later, ChatGPT can rewrite text or make a new data file. This works when the repository, not the agent, holds the project:
- Keep build and deploy instructions in the
README.md(or anAGENTS.mdthat coding agents read). - Store secrets in the environment variable settings of the host, not in the code or the chat.
- Give each agent session its own branch. Merge a branch only after you test its preview.
- Write down which branch is production and which URL clients use.
The host does not care which agent wrote the files. This keeps handoffs simple and prevents lock-in (dependence on one tool).
Built-in publishing or your own host
Some AI tools now publish for you. ChatGPT and Codex have Sites, and Grok Build publishes apps to grok.me addresses. Built-in publishing is often the easiest path when the full build and publish process stays inside one tool.
A repository and your own host are a better fit in these cases:
- More than one agent or tool needs to change the same app
- Clients need a URL on your domain that outlives any one tool
- You need preview URLs, access control, and rollback that you configure yourself
- You want the code to stay portable
Neither path is always better. Ask which problem you have. Do you want this tool to deploy the app? Or do you want any agent to update the app that your team already shared?
Before you send the link
Make sure that these statements are true:
- The production URL opens in a private window and shows the right version.
- The access gate works for a reviewer who is not on your team.
- Placeholder data, test accounts, and unfinished screens are hidden, unless the review needs them.
- The main flow works on a phone.
- You know how to roll back.
- The reviewer knows which URL is current and how to send feedback.
A docs portal with Ask AI
and support tickets
Connect a repository, or describe your product to start. Each docs site has search, Ask AI, an API console, an MCP server and support tickets.
- Publishes from GitHub on every push
- Works with Mintlify repositories
- API console from your OpenAPI file
- MCP server and llms.txt for AI agents
- Ask AI and support tickets
- Analytics for people and AI agents
Frequently Asked Questions
Can search engines find my preview deployments?
Netlify adds an X-Robots-Tag noindex header to Deploy Previews. Vercel does not index preview deployments by default. A noindex header only asks search engines to skip the page. It does not stop people who have the link. If previews show private content, put them behind the access control of the host.
Related Articles

Add a Custom Domain to a Cloudflare Pages Site
Add a custom domain or www to a Cloudflare Pages site: set it up in Pages first, add the DNS record, fix stuck verification and redirect www.

What Is localhost:3000?
Your browser uses localhost:3000 to reach an app running on your own computer. Sending that address to someone else does not give them access to your app.

Move Exported Grok Website Files to Another Host
Export a Grok Build site to GitHub, deploy it on Cloudflare Pages, Netlify, Vercel or GitHub Pages, test it, then retire the grok.me copy.