AI builders often export an app as a folder — index.html plus separate CSS, JS, and assets — not a single file. How to share the whole thing as one private link without flattening it or deploying it.
The single-file case is easy: a self-contained .html with everything inlined drops cleanly and shares as a link. But a lot of AI-built apps don't come out that way. Ask Codex or Bolt for "an app," and what comes back is a project — index.html, a styles.css, an app.js, maybe an /assets folder with images and fonts. The files reference each other by relative path: <link href="styles.css">, <script src="app.js">.
That structure runs fine on your machine. Sharing it is where it gets awkward.
Three things go wrong when a multi-file app meets the usual sharing channels:
index.html alone and the CSS, JS, and images don't come with it — the recipient gets an unstyled, broken page.The cleaner move is to keep the structure and let the host handle it. Zip the project folder — index.html at the root, the CSS/JS/asset files alongside or in subfolders — drop the .zip, and the host unpacks it and serves the app at one link. The relative paths resolve because the file structure is preserved; index.html loads as the entry point; the page behaves the way it did locally.
This is the same delivery shape as sharing a vibe-coded app before you deploy — the difference is just that the export is a bundle rather than a single file.
Drop a .zip of the project folder, get one live link that serves the whole app. No build step, no account. The anonymous tier handles files up to 3 MB; signed-in and paid tiers raise the cap.
index.html at the root of the archive as the page. Make sure your entry file is named index.html and sits at the top level — not nested inside another folder.index.html lands at the root of the archive, with css/, js/, assets/ (or whatever the export uses) alongside it..zip. The bundle uploads and unpacks; the link comes back.The ZIP path is for a front-end bundle — HTML, CSS, JS, and assets that run in the visitor's browser. If the Codex or Bolt app has a live backend — server routes, a database it reads and writes, authentication — that part doesn't travel in a zip, and the app needs an actual deploy (Vercel, Netlify, the builder's own publish flow) to keep its server side working. A finished, public AI-built landing belongs on a public host too.
The private ZIP link covers the in-between and the front-end-only cases: the app works, it isn't public yet, and the multi-file structure should stay intact for the person reviewing it.
The host serves the bundle as static files at a link — it isn't running a build, a server, or a database for you. ZIP bundles up to 50 MB, served the way the app renders in a browser; anything that needs server-side execution is a deploy-platform job. The private link's role is to take the project as it is and make it viewable, by exactly the people you choose.
Hit a ChatGPT Sites usage limit? Your Sites aren't gone. Here's how to tell the ones that are just pages, which travel, from the ones that need Sites underneath them.
A disabled Publish button isn't one bug — it's four different situations wearing the same grey. Only one of them clears if you try again. Here's how to tell which one you're looking at, and how to get the page to the person waiting for it either way.
From a Claude artifact to a vibe-coded app to a multi-file Codex bundle — how to share what an AI tool builds, as a private link, without a deploy pipeline.
miinideck turns a single HTML file into an unguessable link with optional password and expiry. Default-private, never indexed.