the universal sandbox runtime for agents and humans. pocketenv.io
sandbox openclaw agent claude-code vercel-sandbox deno-sandbox cloudflare-sandbox atproto sprites daytona
7
fork

Configure Feed

Select the types of activity you want to include in your feed.

Show spinner when selecting sandbox

Add a selected state in NewProject to display a loading
spinner for the chosen sandbox while creation/navigation runs.
Clear the selection after navigation and reset the filter.
Update favicon and logo assets.

+10 -2
apps/web/public/favicon.png

This is a binary file and will not be displayed.

apps/web/src/assets/logo.png

This is a binary file and will not be displayed.

+10 -2
apps/web/src/components/newproject/NewProject.tsx
··· 12 12 }; 13 13 14 14 function NewProject({ isOpen, onClose }: NewProjectProps) { 15 + const [selected, setSelected] = useState<string | null>(null); 15 16 const inputRef = useRef<HTMLInputElement>(null); 16 17 const [filter, setFilter] = useState(""); 17 18 const { data, isLoading } = useSandboxesQuery(); ··· 56 57 }; 57 58 58 59 const onSelect = async (id: string) => { 60 + setSelected(id); 59 61 const res = await mutateAsync(id); 60 62 await navigate({ to: `/sandbox/${res.data.id}` }); 63 + setSelected(null); 61 64 onClose(); 62 65 setFilter(""); 63 66 }; ··· 96 99 sandboxes?.map((item) => ( 97 100 <div 98 101 key={item.id} 99 - className="p-3 hover:bg-white/7 cursor-pointer rounded-md" 102 + className="p-3 hover:bg-white/7 cursor-pointer rounded-md flex" 100 103 onClick={() => onSelect(item.uri)} 101 104 > 102 - <div className="font-semibold">{item.displayName}</div> 105 + <div className="font-semibold flex-1"> 106 + {item.displayName} 107 + </div> 108 + {selected === item.uri && ( 109 + <span className="loading loading-spinner loadiing-md text-pink-500"></span> 110 + )} 103 111 </div> 104 112 ))} 105 113 {!isLoading && sandboxes?.length === 0 && (