Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions apps/web/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,10 @@ live iframe mounted so application state is preserved during ordinary use.
Fresh app-builder projects keep the animated Cheatcode mark visible while the internal starter
scaffold boots and the model generates the requested app. The persisted `app-preview-status`
stream part reveals the iframe only when generated content is ready, and an iframe-load guard keeps
the same mark in place until the final document has loaded. Existing project edits remain visible
and continue hot-reloading normally.
the same mark in place until the final document has loaded. While that mark is visible, the hidden
session exchange remains mounted so the one-minute URL handoff becomes a renewable ten-minute
host cookie before long-running builds finish. Existing project edits remain visible and continue
hot-reloading normally.

## Public exports

Expand Down
21 changes: 12 additions & 9 deletions apps/web/src/components/preview/preview-side-panel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -402,15 +402,18 @@ function AppTabContent({
}) {
if (previewPhase === "booting" || isGeneratedPreviewPending) {
return (
<PreviewDeviceFrame
device={frameDevice}
content={
<CheatcodeLoader
className="h-full min-h-[420px] min-w-0 flex-1 bg-bg-secondary"
label={isGeneratedPreviewPending ? "Building preview…" : "Starting preview…"}
/>
}
/>
<>
<PreviewSessionRefresh previewUrl={requestedIframeUrl} />
<PreviewDeviceFrame
device={frameDevice}
content={
<CheatcodeLoader
className="h-full min-h-[420px] min-w-0 flex-1 bg-bg-secondary"
label={isGeneratedPreviewPending ? "Building preview…" : "Starting preview…"}
/>
}
/>
</>
);
}
if (previewPhase === "error") {
Expand Down