Interactive Project Explorer

An IDE-style project explorer with collapsible year folders, status badges, and floating cursor image previews.

Installation

Interactive Project Explorer is published as a shadcn registry item. The CLI drops the file into your project, installs its dependencies, and adds any primitives it relies on.

$npx shadcn@latest add https://akoder.xyz/r/project-explorer.json

Install often? Register the namespace once in components.json and use the shorter form npx shadcn@latest add @akoder/project-explorer.

Usage

import { ProjectExplorer } from "@/components/project-explorer";
 
const projects = [
  {
    id: "zeno",
    title: "Zeno — AI Assistant for PostgreSQL",
    year: 2025,
    status: "building",
    category: "ai-tool",
    href: "https://zeno.example.com",
    image: "/images/zeno.png",
  },
  {
    id: "gridly",
    title: "Gridly — Modern UI Component Library",
    year: 2025,
    status: "new",
    category: "design-system",
    href: "https://gridly.example.com",
  },
];
 
export function PortfolioProjects() {
  return (
    <div className="max-w-2xl mx-auto">
      <ProjectExplorer
        projects={projects}
        showHoverPreview={true}
        defaultOpen="latest"
      />
    </div>
  );
}

Features & Anatomy

The Interactive Project Explorer organizes work chronologically with an IDE / file-explorer design language.

Props & Options

PropTypeDefaultDescription
projectsProjectExplorerItem[]sampleProjectsArray of project items to display.
titlestring"Featured Projects"Section heading text.
showHeadingbooleantrueShow or hide the top section heading rule and title.
defaultOpen"all" | "latest""all"Open all folders or only the most recent year.
showHoverPreviewbooleantrueToggle floating cursor preview cards on row hover/focus.
classNamestringundefinedAdditional CSS classes for the root container.

Data Structure

export type ProjectStatus = "building" | "new" | "shipped";
 
export interface ProjectExplorerItem {
  id: string;
  title: string;
  year: number;
  description?: string;
  category?: string;
  status?: ProjectStatus;
  href?: string;
  liveUrl?: string;
  githubUrl?: string;
  image?: string;
  imageAlt?: string;
  enabled?: boolean;
  order?: number;
}

Examples

Explore different presets, palettes, and configurations.

Latest Work First

Start with the most recent folder open when the explorer sits inside a compact project panel.

Example 1 of 3: Latest Work First