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. Two of them are permanent, two clear in a minute. 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.