diff --git a/app/classroom/[id]/page.tsx b/app/classroom/[id]/page.tsx index 523e23211..40dd2b872 100644 --- a/app/classroom/[id]/page.tsx +++ b/app/classroom/[id]/page.tsx @@ -27,8 +27,27 @@ export default function ClassroomDetailPage() { const generationStartedRef = useRef(false); const { generateRemaining, retrySingleOutline, stop } = useSceneGenerator({ - onComplete: () => { + onComplete: async () => { log.info('[Classroom] All scenes generated'); + // Update server-side storage with all generated scenes + const state = useStageStore.getState(); + if (state.stage && state.scenes.length > 0) { + try { + const resp = await fetch('/api/classroom', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + stage: state.stage, + scenes: state.scenes, + }), + }); + if (resp.ok) { + log.info('[Classroom] Updated server-side storage with all scenes'); + } + } catch (err) { + log.warn('[Classroom] Failed to update server-side storage:', err); + } + } }, }); diff --git a/app/generation-preview/page.tsx b/app/generation-preview/page.tsx index 213a51409..55dca6d9f 100644 --- a/app/generation-preview/page.tsx +++ b/app/generation-preview/page.tsx @@ -721,6 +721,29 @@ function GenerationPreviewContent() { }), ); + // Persist classroom to server-side storage for cross-device access + const state = store; + try { + const persistResp = await fetch('/api/classroom', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + stage: state.stage, + scenes: state.scenes, + }), + }); + if (persistResp.ok) { + const persistData = await persistResp.json(); + log.info('[Generation] Classroom persisted to server:', persistData.url); + } else { + log.warn( + '[Generation] Failed to persist classroom to server, continuing with local-only storage', + ); + } + } catch (persistErr) { + log.warn('[Generation] Error persisting classroom to server:', persistErr); + } + sessionStorage.removeItem('generationSession'); await store.saveToStorage(); router.push(`/classroom/${stage.id}`);