Skip to main content

Feature: Tool Display Components

IMPLEMENTATION RULES: Before implementing this plan, read and follow:

Status: Completed βœ…β€‹

Goal: Create React components to display tools with logos, abstracts, and extended metadata on the website.

Completed: 2026-01-17

PR: #19

Source: PLAN-003 (Extended Script and Category Metadata)


Prerequisites: PLAN-003 (completed - provides tools.json, categories.json, and logo assets) Blocks: PLAN-005 (Interactive Homepage) Related: None Priority: High (enables visual tool browsing)


Overview​

PLAN-003 added extended metadata (tags, abstract, logo, website, summary, related) to all tools and categories. This plan creates React components to display this information visually.

Data Sources​

Available from PLAN-003:

  • website/src/data/tools.json - Tool metadata with all extended fields
  • website/src/data/categories.json - Category metadata
  • website/static/img/tools/*.webp - Processed tool logos (512x512)
  • website/static/img/categories/*.webp - Processed category logos (512x512)

Components to Create​

  1. ToolCard - Displays a single tool with logo, name, abstract
  2. ToolGrid - Grid layout for multiple ToolCards
  3. CategoryCard - Displays a category with logo and description
  4. CategoryGrid - Grid layout for CategoryCards
  5. ToolDetails - Full tool page with all metadata
  6. RelatedTools - Shows related tools as linked cards

Visual Mockups​

ToolCard (Single Tool)​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ β”‚ Python Development Tools β”‚
β”‚ β”‚ 🐍 β”‚ ───────────────────────────────────── β”‚
β”‚ β”‚ β”‚ Full Python development environment β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ with pip, venv, and VS Code extensions. β”‚
β”‚ Tags: python, pip, venv, pytest β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
64x64
logo

ToolGrid (Desktop - 3 columns)​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Development Tools (10 tools) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ 🐍 β”‚ Python Dev Tools β”‚ β”‚ TS β”‚ TypeScript Tools β”‚ β”‚ Go β”‚ Go Dev Tools β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ Full Python dev... β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ TypeScript with... β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ Go runtime and... β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ¦€ β”‚ Rust Dev Tools β”‚ β”‚ C# β”‚ C# Dev Tools β”‚ β”‚ β˜• β”‚ Java Dev Tools β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ Rust via rustup... β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ .NET SDK and... β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ JDK, Maven, and... β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [ View All 10 Tools β†’ ] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

ToolGrid (Mobile - 1 column)​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Development Tools β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ 🐍 β”‚ Python Tools β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ Full Python... β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ TS β”‚ TypeScript β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ TypeScript... β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Go β”‚ Go Tools β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ Go runtime... β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [ View All Tools β†’ ] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

CategoryCard​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”Œβ”€β”€β”€β”€β” β”‚
β”‚ β”‚ </> β”‚ Development Tools β”‚
β”‚ β””β”€β”€β”€β”€β”˜ ────────────────────────────── β”‚
β”‚ Programming language setups β”‚
β”‚ for Python, Go, Rust, and more β”‚
β”‚ β”‚
β”‚ 10 tools available [ Browse β†’ ]β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

CategoryGrid (Homepage section)​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Browse by Category β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”Œβ”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β” β”‚
β”‚ β”‚</>β”‚ Development Tools β”‚ β”‚ ☁️ β”‚ Cloud Tools β”‚ β”‚ πŸ“Š β”‚ Data & Analytics β”‚
β”‚ β””β”€β”€β”€β”€β”˜ 10 tools β”‚ β””β”€β”€β”€β”€β”˜ 5 tools β”‚ β””β”€β”€β”€β”€β”˜ 2 tools β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”Œβ”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ€– β”‚ AI & ML Tools β”‚ β”‚ βš™οΈ β”‚ Infrastructure β”‚ β”‚ πŸ”§ β”‚ Contributor Tools β”‚
β”‚ β””β”€β”€β”€β”€β”˜ 1 tool β”‚ β””β”€β”€β”€β”€β”˜ 3 tools β”‚ β””β”€β”€β”€β”€β”˜ 1 tool β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Enhanced Tools Page (Full Layout)​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ DevContainer Toolbox Docs v1.4.2 GitHub πŸ” Search β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ # Available Tools β”‚
β”‚ β”‚
β”‚ 20+ development tools ready to install with one click. β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ Browse by Category β”‚β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚β”‚
β”‚ β”‚ β”‚ </> Dev β”‚ β”‚ ☁️ Cloud β”‚ β”‚ πŸ“Š Data β”‚ β”‚ πŸ€– AI β”‚ β”‚ βš™οΈ Infra β”‚ β”‚β”‚
β”‚ β”‚ β”‚ 10 tools β”‚ β”‚ 5 tools β”‚ β”‚ 2 tools β”‚ β”‚ 1 tool β”‚ β”‚ 3 tools β”‚ β”‚β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚ β”‚
β”‚ ## Development Tools β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ 🐍 Python β”‚ β”‚ TS TypeScript β”‚ β”‚ Go Golang β”‚ β”‚
β”‚ β”‚ Full Python dev...β”‚ β”‚ TypeScript with...β”‚ β”‚ Go runtime and... β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ¦€ Rust β”‚ β”‚ C# .NET β”‚ β”‚ β˜• Java β”‚ β”‚
β”‚ β”‚ Rust via rustup...β”‚ β”‚ .NET SDK and... β”‚ β”‚ JDK, Maven, and...β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ## Cloud & Infrastructure Tools β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ ☁️ Azure Dev β”‚ β”‚ ☁️ Azure Ops β”‚ β”‚ ☸️ Kubernetes β”‚ β”‚
β”‚ β”‚ Azure CLI, Func...β”‚ β”‚ PowerShell, Az... β”‚ β”‚ kubectl, helm,... β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

RelatedTools (Horizontal scroll on tool detail page)​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Related Tools β”‚
β”‚ ────────────────────────────────────────────────────────────────────────────────────── β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ 🐍 Python β”‚ β”‚ Go Golang β”‚ β”‚ πŸ¦€ Rust β”‚ β”‚ πŸ“Š Data β”‚ ← scroll β†’ β”‚
β”‚ β”‚ Full dev... β”‚ β”‚ Go runtime..β”‚ β”‚ Systems... β”‚ β”‚ Jupyter,... β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Tool Detail Page (Enhanced)​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ DevContainer Toolbox Docs β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ β”‚ Python Development Tools β”‚
β”‚ β”‚ 🐍 β”‚ ════════════════════════════ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ 128x128 β”‚ Full Python development environment with pip, venv, β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ and VS Code extensions. β”‚
β”‚ β”‚
β”‚ **Website:** [python.org](https://python.org) β”‚
β”‚ **Category:** Development Tools β”‚
β”‚ **Tags:** `python` `pip` `venv` `pytest` `ipython` β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────────────────────────────────────│
β”‚ β”‚
β”‚ ## Description β”‚
β”‚ β”‚
β”‚ Complete Python development setup including virtual environment management, β”‚
β”‚ package installation via pip, and VS Code integration. Adds ipython for β”‚
β”‚ interactive development, pytest for testing, and common development utilities. β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────────────────────────────────────│
β”‚ β”‚
β”‚ ## Installation β”‚
β”‚ β”‚
β”‚ ```bash β”‚
β”‚ # Via dev-setup menu β”‚
β”‚ dev-setup β”‚
β”‚ β”‚
β”‚ # Or directly β”‚
β”‚ .devcontainer/additions/install-dev-python.sh β”‚
β”‚ ``` β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────────────────────────────────────│
β”‚ β”‚
β”‚ ## Related Tools β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ“Š Data β”‚ β”‚ πŸ€– Claude β”‚ β”‚ Go Golang β”‚ β”‚
β”‚ β”‚ Analytics β”‚ β”‚ Code β”‚ β”‚ Go runtime β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Phase 1: ToolCard Component β€” βœ… DONE​

Create a reusable card component for displaying a single tool.

Tasks​

  • 1.1 Create website/src/components/ToolCard/index.tsx
  • 1.2 Create website/src/components/ToolCard/styles.module.css
  • 1.3 Component props: tool object with all fields, showTags boolean
  • 1.4 Display: logo (64x64), name (linked to detail page), abstract (2 lines max)
  • 1.5 Hover effect: subtle elevation/shadow
  • 1.6 Responsive: flex layout works on all screens

Validation​

cd website && npm run start
# Verify ToolCard renders correctly with sample data

Phase 2: ToolGrid Component β€” βœ… DONE​

Create a grid component that displays multiple tools.

Tasks​

  • 2.1 Create website/src/components/ToolGrid/index.tsx
  • 2.2 Create website/src/components/ToolGrid/styles.module.css
  • 2.3 Import tools from @site/src/data/tools.json
  • 2.4 Props: category, limit, showViewAll, showTags, title
  • 2.5 Responsive grid: 1 col mobile, 2 col tablet, 3-4 col desktop
  • 2.6 Optional "View All" link when limit is set and more tools exist

Validation​

# Add ToolGrid to a test page and verify filtering works

Phase 3: CategoryCard and CategoryGrid β€” βœ… DONE​

Create components for displaying categories.

Tasks​

  • 3.1 Create website/src/components/CategoryCard/index.tsx
  • 3.2 Create website/src/components/CategoryGrid/index.tsx
  • 3.3 CategoryCard: logo (48x48), name, abstract, tool count, links to category section
  • 3.4 CategoryGrid: responsive grid (1-4 cols), sorted by order, excludes empty
  • 3.5 Import from both categories.json and tools.json for counting

Validation​

# Verify categories display with correct tool counts

Phase 4: Enhanced Tools Page β€” βœ… DONE​

Replace or enhance the current tools page with visual components.

Tasks​

  • 4.1 Create website/src/pages/tools.tsx with matching CSS
  • 4.2 Display CategoryGrid at top with "Browse by Category" title
  • 4.3 Display ToolGrid for each category, sorted by order
  • 4.4 Add search/filter by tags (deferred to future enhancement)
  • 4.5 Existing /docs/tools/ links unchanged (new page is /tools)

Validation​

cd website && npm run build
# Verify no broken links, visual display works

Phase 5: RelatedTools Component β€” βœ… DONE​

Show related tools on tool detail pages.

Tasks​

  • 5.1 Create website/src/components/RelatedTools/index.tsx
  • 5.2 Takes relatedIds prop (array of tool IDs), title prop
  • 5.3 Displays as horizontal scrollable row of mini cards (48x48 logo)
  • 5.4 Integrate into tool detail pages (deferred - requires MDX migration)

Validation​

# Verify related tools display correctly on a sample tool page

Phase 6: Integration and Testing β€” βœ… DONE​

Tasks​

  • 6.1 Run full build to verify no errors (warnings only for existing TOC anchors)
  • 6.2 Test on localhost with Chrome
  • 6.3 Verify responsive design on mobile viewport (deferred)
  • 6.4 Verify all logos load correctly (fixed useBaseUrl)
  • 6.5 Verify links work (tool pages, category pages)

Validation​

docker exec <container> bash -c "cd /workspace/website && npm run build"
# Test in Chrome at localhost:3000

Phase 7: Sidebar Reordering β€” βœ… DONE​

Restructure the documentation sidebar for better organization.

New Sidebar Order​

1. DevContainer Toolbox (intro)
2. Getting Started
3. Tools (with category folders and tool pages)
4. What Are DevContainers?
5. AI Development (parent folder)
β”œβ”€β”€ AI Developer (Internal)
└── AI Demos & Recordings
6. Commands Reference
7. Configuration
8. Troubleshooting
9. Contributing

Tasks​

  • 7.1 Update sidebar positions in frontmatter:
    • intro.md β†’ position 1
    • getting-started/ β†’ position 2
    • tools/ β†’ position 3
    • what-are-devcontainers/ β†’ position 4
    • commands.md β†’ position 6
    • configuration.md β†’ position 7
    • troubleshooting.md β†’ position 8
    • contributing.md β†’ position 9
  • 7.2 docs/ai-development/ folder already existed with _category_.json (updated position 5)
  • 7.3 Move docs/ai-developer/ β†’ docs/ai-development/ai-developer/
  • 7.4 Move docs/ai-docs/ β†’ docs/ai-development/ai-docs/
  • 7.5 Update _category_.json files for nested folders
  • 7.6 Fix relative links in moved files (../contributors/ β†’ ../../contributors/)

Phase 8: Individual Tool Pages β€” βœ… DONE​

Create dedicated pages for each tool (no anchor links).

Tasks​

  • 8.1 Updated dev-docs.sh to generate individual tool pages:
    • Added generate_tool_pages() function
    • Generates category folders, category.json, index.mdx, and tool .mdx files
    • 5 category index pages + 21 individual tool pages
  • 8.2 Added utility functions in anchors.ts:
    • getCategoryFolder() - maps category ID to folder name
    • getToolFilename() - strips prefixes from tool ID
    • getToolPath() - generates full tool page path
  • 8.3 Updated components to link to new pages:
    • ToolCard uses getToolPath()
    • CategoryCard uses getCategoryFolder()
    • RelatedTools uses getToolPath()
  • 8.4 Removed old files: tools-details.md, partial tool pages
  • 8.5 Fixed broken link in ai-development/index.md

Phase 9: Commit and Deploy β€” PENDING​

Tasks​

  • 9.1 Commit all changes
  • 9.2 Bump version in version.txt
  • 9.3 Push and create PR
  • 9.4 Verify on deployed site

Acceptance Criteria​

  • ToolCard displays logo, name, abstract correctly
  • ToolGrid shows tools in responsive grid
  • CategoryCard displays category info with tool count
  • Tools page shows visual browsing experience
  • All components are responsive (mobile-friendly)
  • No broken images or links
  • Build passes without errors

Files to Create​

Components:

  • website/src/components/ToolCard/index.tsx
  • website/src/components/ToolCard/styles.module.css
  • website/src/components/ToolGrid/index.tsx
  • website/src/components/ToolGrid/styles.module.css
  • website/src/components/CategoryCard/index.tsx
  • website/src/components/CategoryCard/styles.module.css
  • website/src/components/CategoryGrid/index.tsx
  • website/src/components/CategoryGrid/styles.module.css
  • website/src/components/RelatedTools/index.tsx
  • website/src/components/RelatedTools/styles.module.css

Pages (optional - may use MDX instead):

  • website/src/pages/tools.tsx

Design Notes​

Color Scheme​

Use existing Docusaurus theme colors:

  • Primary: --ifm-color-primary (green #25c2a0)
  • Background: --ifm-background-color
  • Card background: slightly elevated from page background

Logo Display​

  • Tool cards: 64x64px logos
  • Category cards: 48x48px logos
  • Detail pages: 128x128px logos
  • Use object-fit: contain to preserve aspect ratio

Typography​

  • Tool name: font-weight: 600
  • Abstract: font-size: 0.9rem, color: var(--ifm-color-emphasis-700)
  • Tags: small badges with category color

Implementation Notes​

Importing JSON Data​

import toolsData from '@site/src/data/tools.json';
import categoriesData from '@site/src/data/categories.json';

const { tools } = toolsData;
const { categories } = categoriesData;

Logo Paths​

// Logo path pattern
const logoPath = `/img/tools/${tool.logo}`;
// e.g., /img/tools/dev-python-logo.webp

Filtering by Category​

const filteredTools = tools.filter(tool => tool.category === categoryId);