# Is it safe to send a client a link to an app you built with AI? A checklist

- URL: https://getroomi.com/guides/is-it-safe-to-send-a-client-an-ai-built-app
- Updated: 2026-10-12

Yes, if it runs on mock data, holds no live keys and reaches no real system, and if each client gets a link you can switch off. Before you send it, check that nothing real is inside it, that it works for someone who is not you, and that you have told them their visit is recorded.

This guide is eleven checks, in the order to make them, with what each one is for. Then how apps built with AI usually leak, what to tell the client, and what Roomi checks for you. [Security](https://getroomi.com/docs/security) says how a room keeps your demo apart from everything else, and [sharing a private link](https://getroomi.com/docs/sharing) covers the links.

## Is it safe to send a client an app built with AI?

It is as safe as what is inside it. An app built with Claude, Lovable or Bolt is code like any other. If a real key, a real customer record or a live database is in reach, your client can reach it too. Take those out, give each client their own link, and a demo is safe to send.

The risk is rarely the client. It is the link travelling further than you meant, or the app carrying more than you knew. The checklist below catches both.

## The checklist

| # | Check | Why it matters | How to check | What Roomi does |
|---|---|---|---|---|
| 1 | No real customer data | Every viewer gets a copy of what is in it | Read the seed files and samples | Mock data only, and every room says so |
| 2 | No live keys in the code or the build | A key in a browser build is a key published | Search for keys; read `.env` | Scans the project and the build, and stops on a secret |
| 3 | No live backend | A copied app can still talk to its real database | Look for calls to a database or an outside API | A container demo has no internet |
| 4 | Row rules, if it must use a database | Without them, a table is open to anyone with access | Your database’s security settings | Not needed: a demo never reaches one |
| 5 | It works for someone who is not you | Your own sign-in hides gaps | Open it in a private window, signed out | `roomi dev`, and a preview deploy |
| 6 | It works on a phone | Clients open links on their phones | Open it on yours | A QR code hands it to a phone |
| 7 | One link per person | A public address travels | Count who it is for | A named link, with an expiry, that you can revoke |
| 8 | Forwarding shows up | A good pitch gets passed on | Ask what happens if they forward it | Asks whoever opens it who they are |
| 9 | They know the visit is recorded | Your terms with Roomi require it | Read your message before you send it | Nothing: it is your message to write |
| 10 | No real client names on a public page | A public listing is public | Read the card and the demo | A scan flags what might name a business |
| 11 | The tour opens the right screens | They will see it without you | Run it through yourself | The rehearsal runs every step of the tour |

1. **No real customer data.** Every viewer gets a copy of the demo, so a real name in it is a real name sent to every client. Use invented records shaped like the real ones: [swapping real data for mock data](https://getroomi.com/guides/how-to-use-mock-data-in-an-ai-built-demo) shows how.
2. **No live keys.** Search the project for anything that looks like a key, and read every `.env` file. A key the demo seems to need is a mock the demo should have.
3. **No live backend.** An app copied out of Lovable or Bolt can still be wired to its real database. Swap every call to it for sample data before you deploy.
4. **Row rules, if it must use a database.** A demo should not touch one at all. If a public version of your app does, turn on the database’s row rules first.
5. **It works for someone who is not you.** Open it in a private window, signed out of everything. On Roomi, `roomi dev` shows you the room on your machine, and a preview deploy shows you the new build before your viewers get it.
6. **It works on a phone.** Many clients open a link on their phone first. Open yours on a phone, and fix what breaks.
7. **One link per person.** Give each client their own link, with an expiry. You can switch one off without touching anyone else’s.
8. **Forwarding shows up.** Whoever opens a forwarded link is asked “Are you Priya Shah?”, and someone who says no gives their own name.
9. **They know the visit is recorded.** Say so in the message you send the link in. The next section has a line you can copy.
10. **No real client names on a public page.** A private room is for the person you sent it to. A public listing is for anyone, so keep a client’s name and logo out of it.
11. **The tour opens the right screens.** Take the tour yourself, from the first step to the last, as your client will.

## How do AI-built apps usually leak?

Three ways, mostly. A key ends up in the code sent to the browser, where anyone can read it. A database is left without its row rules, so anyone with the address can read it. Or a copied app still talks to its live backend, so a demo reaches real records.

- **A key in the front end.** Vite builds any variable whose name starts with VITE_ into the code it sends to the browser. Vite says such variables must not hold anything sensitive, such as API keys. If your app is built with Vite, as older Lovable projects are, a key named that way is published with the app.
- **A database without its rules.** Supabase says to turn on row-level security for every table its API exposes. Without it, a table can be read and changed by any role the database grants access to.
- **A live backend still connected.** Lovable’s hosting guide says an app deployed to another host can keep using its built-in Cloud backend. The backend’s address and publishable key are built into the browser code. A demo copied that way reaches the same records as the real app.

None of this is a fault of the tools. Each one says what to avoid. The checks above are how you make sure you did. The best ways to share an app built with AI compares the routes themselves.

## What should you tell the client?

Tell them who you are, that the room records what they do there and shows it to you, and how to reach you about their data. Roomi’s terms ask every publisher to say this before or when they send a link. Every room already tells its viewers the demo runs on mock data.

A line you can use, changed to suit you:

> This link is for you. It opens a demo of the product on invented data, so try anything. The room shows me what you look at, which helps me follow up. To ask about your data, reply to this email.

You can also point them to Roomi’s [privacy policy](https://getroomi.com/privacy), which says what the room records. [The follow-up email templates](https://getroomi.com/guides/follow-up-email-after-sending-a-demo) build the same line into the message that sends the link.

## What does Roomi check for you, and what doesn’t it?

Roomi checks for secrets in your project and your build, and stops the deploy if it finds one. It keeps each viewer’s copy of a live app apart from everyone else’s, with no internet. It does not read your words or judge your sample data. Whether a name in it is real is yours to check.

What it does:

- **Scans for secrets.** `roomi deploy` scans the project and the build with gitleaks before anything is uploaded, and a finding stops the deploy. Your own `.gitleaksignore` is not read, so a finding cannot be waved through.
- **Checks a demo from a chat.** The connector flags anything that looks like a private key, or a key from AWS, Stripe, GitHub, Slack, Anthropic, OpenAI or Google.
- **Keeps copies apart.** Each private link gets its own copy of a container demo, with no internet, no secret and no route back into the platform.

What it does not do:

- **Read your sample data.** It cannot tell an invented customer from a real one.
- **Check your words**, except for a community listing. There, a pre-flight scan flags what might identify a real business or client. It is a guess, and it never stops you. [The community](https://getroomi.com/docs/community) explains it.

## Questions people ask

### Can a client break it for everyone else?

Not a live app. Each private link gets its own copy of a container demo, so one client’s clicks and changes never reach another’s. A static demo runs in each viewer’s own browser, so what one changes stays with them.

### Can a client see my code?

A static demo’s files are sent to each viewer’s browser, as any website’s are, so anyone can read them. Keep nothing secret in them. A container demo’s server runs in its own container, out of the viewer’s reach.

### I sent a real key by mistake. What now?

Rotate it now, at the service that issued it, and treat the old one as published. Roomi’s scan asks the same of any key it finds, because the key has sat on disk in plain text.

### A client wants their data deleted. Can I?

Yes. Erase data, beside their link on the project’s Links tab, removes everything done under that link: visits, comments and answers. The app counts what will go and asks you first, and it cannot be undone.

### Can I stop them opening the demo in a new tab?

Yes. Viewer controls, on the project’s Room tab, can switch off the new tab, full screen or the phone. With no new tab, the demo opens only inside the room or on the viewer’s phone.

## Sources

- Vite: [vite.dev/guide/env-and-mode](https://vite.dev/guide/env-and-mode), checked 12 October 2026

- Supabase: [supabase.com/docs/guides/database/postgres/row-level-security](https://supabase.com/docs/guides/database/postgres/row-level-security), checked 12 October 2026

- Lovable: [docs.lovable.dev/tips-tricks/external-deployment-hosting](https://docs.lovable.dev/tips-tricks/external-deployment-hosting), checked 12 October 2026

## About the author

**[Kaz Kato](https://getroomi.com/about)**, Co-founder & CTO, Roomi. Kaz co-founded Roomi with Tesh, whom he has built with since 2017: two startups that failed, one venture studio that didn’t, and an exit.

## Related guides

- [How do you swap real data for mock data in a demo built with AI?](https://getroomi.com/guides/how-to-use-mock-data-in-an-ai-built-demo)

- [What should your follow-up email say after you send a demo? Templates](https://getroomi.com/guides/follow-up-email-after-sending-a-demo)
