"use client"; import { CheckCircle, Clock, Loader2, Target, Github } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { cn } from "@/lib/utils"; interface RoadmapItem { title: string; description: string; status: "completed" | "in_progress" | "planned"; } const roadmapItems: RoadmapItem[] = [ { title: "findPort", description: "WebSerial-based robot detection and connection management", status: "completed", }, { title: "releaseMotors", description: "Release motor torque for safe manual positioning and setup", status: "completed", }, { title: "calibrate", description: "Real-time joint calibration with visual feedback and data export", status: "completed", }, { title: "teleoperate", description: "Manual robot control with keyboard and slider inputs", status: "completed", }, { title: "node/cli", description: "Node.js CLI tools for robot control and automation scripts", status: "in_progress", }, { title: "SO-100 leader arm", description: "Leader arm teleoperation support for intuitive robot control", status: "in_progress", }, { title: "record", description: "Record robot trajectories and sensor data to create datasets", status: "planned", }, { title: "replay", description: "Replay any recorded episode or episodes from existing datasets", status: "planned", }, { title: "train", description: "Run training based on a given dataset to create a policy", status: "planned", }, { title: "eval", description: "Run inference using trained policies for autonomous operation", status: "planned", }, ]; const statusConfig = { completed: { icon: CheckCircle, label: "COMPLETED", dotColor: "bg-green-500 dark:bg-green-400", textColor: "text-green-600 dark:text-green-400", bgColor: "bg-green-500/10 dark:bg-green-400/5", borderColor: "border-green-500/30 dark:border-green-400/20", }, in_progress: { icon: Loader2, label: "IN PROGRESS", dotColor: "bg-orange-500 dark:bg-orange-400", textColor: "text-orange-600 dark:text-orange-400", bgColor: "bg-orange-500/10 dark:bg-orange-400/5", borderColor: "border-orange-500/30 dark:border-orange-400/20", }, planned: { icon: Clock, label: "PLANNED", dotColor: "bg-slate-500 dark:bg-muted-foreground", textColor: "text-slate-600 dark:text-muted-foreground", bgColor: "bg-slate-500/10 dark:bg-muted-foreground/5", borderColor: "border-slate-500/30 dark:border-muted-foreground/20", }, }; export function RoadmapSection() { const completedCount = roadmapItems.filter( (item) => item.status === "completed" ).length; const inProgressCount = roadmapItems.filter( (item) => item.status === "in_progress" ).length; const totalCount = roadmapItems.length; return (

Roadmap

our goal is to provide{" "} LeRobot 's simple, easy-to-use Python functions for the JavaScript community

{/* Header */}
{completedCount} COMPLETED
{inProgressCount} IN PROGRESS
{totalCount - completedCount - inProgressCount} PLANNED
PROGRESS: {Math.round((completedCount / totalCount) * 100)}%
{/* Progress Bar */}
{/* Items List */}
{roadmapItems.map((item, index) => { const config = statusConfig[item.status]; const StatusIcon = config.icon; return (
{/* Number */}
{String(index + 1).padStart(2, "0")}
{/* Content */}

{item.title} {item.title !== "SO-100 leader arm" ? "()" : ""}

{item.description}

{/* Status Badge */} {config.label} {/* Status Icon */}
); })}
{/* Footer */}

want to help? LeRobot.js is open source on{" "} GitHub

); }