demo / index.html
mishig's picture
mishig HF Staff
Update index.html
8f7818b verified
raw
history blame
9.35 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Mistral AI Robotics Hackathon</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- Tailwind CDN -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- React & ReactDOM CDN -->
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
</head>
<body class="bg-white">
<div id="root"></div>
<script type="text/javascript">
const {
useEffect,
useState
} = React;
function App() {
const [videos, setVideos] = useState([]);
const [teamDatasets, setTeamDatasets] = useState({});
useEffect(() => {
fetch("https://huggingface.co/api/datasets/roboticshack/submissions/tree/main")
.then(res => res.json())
.then(data => {
const videoFiles = data
.filter(file => file.path.endsWith(".mp4"))
.map(file => {
const url =
`https://huggingface.co/datasets/roboticshack/submissions/resolve/main/${encodeURIComponent(file.path)}`;
const match = file.path.match(/(?:team|group)[-_ ]?(\d+)/i);
const team = match ? match[1] : null;
const label = team ? `Team ${team}` : "Unknown Team";
return {
url,
label,
team
};
});
setVideos(videoFiles);
});
fetch("https://huggingface.co/api/datasets?author=roboticshack")
.then(res => res.json())
.then(data => {
const map = {};
data.forEach(entry => {
const match = entry.id.match(/roboticshack\/team[_-]?(\d+)/i);
if (match) {
const team = match[1];
if (!map[team]) map[team] = [];
map[team].push(`https://huggingface.co/spaces/lerobot/visualize_dataset?dataset=${entry.id}`);
}
});
setTeamDatasets(map);
});
}, []);
return React.createElement("div", {
className: "min-h-screen p-6 bg-[linear-gradient(-45deg,#dbeafe,#f0abfc,#fcd34d,#a5f3fc)] bg-[length:400%_400%]",
style: {
animation: "gradientBG 15s ease infinite"
}
},
React.createElement("style", {
dangerouslySetInnerHTML: {
__html: `
@keyframes gradientBG {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
`
}
}),
React.createElement("h1", {
className: "text-3xl font-bold mb-2 text-center"
},
React.createElement("a", {
href: "https://mistral.ai/",
className: "text-orange-500 underline",
target: "_blank"
}, "Mistral AI"), " Robotics Hackathon"
),
React.createElement("p", {
className: "text-center text-gray-700 mb-6"
},
"Paris, France", React.createElement("br", null),
"11 April 2025, 13:00 – 13 April 2025, 14:00"
),
React.createElement("div", {
className: "flex flex-wrap justify-center items-center gap-8 mb-10"
},
// Powered by
React.createElement("div", {
className: "flex flex-wrap items-center gap-2"
},
React.createElement("span", {
className: "text-lg font-semibold"
}, "Powered by:"),
React.createElement("a", {
href: "https://lsvp.com/",
target: "_blank"
}, React.createElement("img", {
src: "https://lsvp.com/wp-content/uploads/2023/04/logo_lightspeed_venture_partners.svg",
className: "h-8 max-w-32 object-contain"
}))
),
// Sponsored by
React.createElement("div", {
className: "flex flex-wrap items-center gap-2"
},
React.createElement("span", {
className: "text-lg font-semibold"
}, "Sponsored by:"),
[
["https://huggingface.co/",
"https://huggingface.co/datasets/huggingface/brand-assets/resolve/main/hf-logo.svg"
],
["https://www.joinef.com/", "https://huggingface.co/spaces/roboticshack/demo/resolve/main/logo-ef.png"],
["https://www.nvidia.com/",
"https://upload.wikimedia.org/wikipedia/sco/thumb/2/21/Nvidia_logo.svg/702px-Nvidia_logo.svg.png?20150924223142"
],
["https://www.motier.vc/",
"https://cdn.prod.website-files.com/61dd4bedf96feb260d027b32/620901ff3592bf41e41e3779_motier-ventures.svg"
],
["https://www.scaleway.com/en/", "https://www.scaleway.com/_next/static/media/logo.7e2996cb.svg"],
["https://www.linkedin.com/company/sotafamily/",
"https://huggingface.co/spaces/roboticshack/demo/resolve/main/logo-sota.png"
]
].map(([href, src], i) =>
React.createElement("a", {
key: i,
href,
target: "_blank"
}, React.createElement("img", {
src,
className: "h-8 max-w-32 object-contain"
}))
)
),
// SO-ARM100 arms
React.createElement("div", {
className: "flex flex-wrap items-center gap-2"
},
React.createElement("a", {
href: "https://github.com/huggingface/lerobot/blob/main/examples/10_use_so100.md",
className: "underline text-blue-600",
target: "_blank"
}, "SO-ARM100 arms"),
React.createElement("div", {
className: "flex flex-wrap items-center gap-2"
},
React.createElement("span", {
className: "text-lg font-semibold"
}, "provided by:"),
React.createElement("a", {
href: "https://github.com/huggingface/lerobot",
target: "_blank"
}, React.createElement("img", {
src: "https://github.com/huggingface/lerobot/raw/main/media/lerobot-logo-thumbnail.png",
className: "h-8 max-w-32 object-contain"
})),
React.createElement("span", {
className: "text-lg font-semibold"
}, "&"),
React.createElement("a", {
href: "https://phospho.ai/",
target: "_blank"
}, React.createElement("img", {
src: "https://framerusercontent.com/images/MYJX4U9UCs4ojvzaR5VuwH7zjY.svg",
className: "h-8 max-w-32 object-contain"
}))
),
// Office space
React.createElement("div", {
className: "flex flex-wrap items-center gap-2"
},
React.createElement("span", {
className: "text-lg font-semibold"
}, "Office space by:"),
React.createElement("a", {
href: "https://www.photoroom.com/",
target: "_blank"
}, React.createElement("img", {
src: "https://media.licdn.com/dms/image/v2/D4E0BAQGY9CCqd-ULZA/company-logo_200_200/company-logo_200_200/0/1721219031708/photoroom_logo?e=1750291200&v=beta&t=Ja2zXQoUenH2WgRb-jkSoPIFwcOQQ9t-r322tMfyLGs",
className: "h-8 max-w-32 object-contain"
}))
),
),
),
React.createElement("div", {
className: "columns-1 sm:columns-2 lg:columns-3 gap-4 space-y-4"
}, videos.map((video, i) =>
React.createElement("div", {
key: i,
className: "break-inside-avoid bg-white rounded-2xl shadow-md overflow-hidden"
},
React.createElement("video", {
src: video.url,
controls: true,
className: "w-full h-auto"
}),
React.createElement("div", {
className: "p-2 text-center text-sm font-medium text-gray-700"
},
video.label,
video.team && teamDatasets[video.team] &&
React.createElement("div", {
className: "mt-1 space-y-1"
},
teamDatasets[video.team].map((url, j) =>
React.createElement("div", {
key: j
},
React.createElement("a", {
href: url,
className: "text-blue-500 underline",
target: "_blank"
}, `Dataset: ${url.split('=')[1]}`)
)
)
)
)
)
))
);
}
ReactDOM.createRoot(document.getElementById("root")).render(React.createElement(App));
</script>
</body>
</html>