import { Plus, Sparkles, UserCircle, Clapperboard } from "lucide-react"; import type { ProjectModeData } from "../../types"; interface ProjectSidebarProps { data: ProjectModeData; } export function ProjectSidebar({ data }: ProjectSidebarProps) { const { project, scenes, shots, selectedSceneId, phase, onSelectScene, onAddScene } = data; if (scenes.length === 0) { return ; } return (

Description

{project.description || No description yet.}

Scenes
{scenes.map((scene) => { const sceneShots = shots.filter((s) => s.scene_id === scene.id); const generated = sceneShots.filter((s) => s.image_file).length; const active = scene.id === selectedSceneId; return ( ); })}
); } function OutlineSidebar({ data }: ProjectSidebarProps) { const { project, onAddScene } = data; return (
Start the outline

Pitch your project to your agent and it'll draft scenes and shots here. No scenes yet — once they appear, this sidebar becomes a scene switcher.

Try saying

"Make me a 30s cyberpunk teaser, my character walking through neon rain."

"Put me in an Iron Man movie. Workshop, suit assembly, rooftop in the rain."

Project

Title

{project.title}

{project.description && (

Description

{project.description}

)}

Aspect

{project.aspect_ratio}

Duration

{project.duration_seconds ?? "—"}s

{project.characters.length > 0 && (

Cast

{project.characters.map((id) => ( {id} ))}
)}

Scenes hold the story beats. Shots inside scenes get rendered into images, then animated. Outline first; only generate after the structure is approved.

); }